Class: Html2rss::AutoSource::Discovery::Sitemap

Inherits:
Object
  • Object
show all
Defined in:
lib/html2rss/auto_source/discovery/sitemap.rb

Overview

Parses XML sitemap documents and extracts prioritized, recent article entries.

Defined Under Namespace

Classes: Result, SitemapEntry

Constant Summary collapse

DEFAULT_MIN_PRIORITY =

Default minimum priority threshold (0.0 to 1.0)

0.3
DEFAULT_MAX_AGE_DAYS =

Default maximum age in days for sitemap entries

30
NEWS_NS =

Google News sitemap XML namespace

'http://www.google.com/schemas/sitemap-news/0.9'

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(xml_content, min_priority: DEFAULT_MIN_PRIORITY, max_age_days: DEFAULT_MAX_AGE_DAYS) ⇒ Sitemap

Returns a new instance of Sitemap.

Parameters:

  • xml_content (String)
  • min_priority (Float) (defaults to: DEFAULT_MIN_PRIORITY)
  • max_age_days (Integer) (defaults to: DEFAULT_MAX_AGE_DAYS)


44
45
46
47
48
# File 'lib/html2rss/auto_source/discovery/sitemap.rb', line 44

def initialize(xml_content, min_priority: DEFAULT_MIN_PRIORITY, max_age_days: DEFAULT_MAX_AGE_DAYS)
  @xml_content = xml_content
  @min_priority = min_priority
  @max_age_days = max_age_days
end

Class Method Details

.call(xml_content, min_priority: DEFAULT_MIN_PRIORITY, max_age_days: DEFAULT_MAX_AGE_DAYS) ⇒ Result

Parses sitemap XML body and returns a Result.

Parameters:

  • xml_content (String)

    sitemap XML body string

  • min_priority (Float) (defaults to: DEFAULT_MIN_PRIORITY)

    minimum priority score (0.0..1.0)

  • max_age_days (Integer) (defaults to: DEFAULT_MAX_AGE_DAYS)

    maximum age in days for entries

Returns:

  • (Result)

    result with entries and/or sub_sitemap_urls



35
36
37
# File 'lib/html2rss/auto_source/discovery/sitemap.rb', line 35

def call(xml_content, min_priority: DEFAULT_MIN_PRIORITY, max_age_days: DEFAULT_MAX_AGE_DAYS)
  new(xml_content, min_priority:, max_age_days:).call
end

Instance Method Details

#callResult

Returns:



52
53
54
55
56
57
58
59
60
61
# File 'lib/html2rss/auto_source/discovery/sitemap.rb', line 52

def call
  document = Nokogiri::XML(xml_content)
  return Result.new(entries: [], sub_sitemap_urls: []) if invalid_xml?(document)

  if sitemapindex?(document)
    Result.new(entries: [], sub_sitemap_urls: extract_sub_sitemap_urls(document))
  else
    Result.new(entries: extract_entries(document), sub_sitemap_urls: [])
  end
end