Class: Html2rss::AutoSource::Scraper::Sitemap
- Inherits:
-
Object
- Object
- Html2rss::AutoSource::Scraper::Sitemap
- Includes:
- Enumerable
- Defined in:
- lib/html2rss/auto_source/scraper/sitemap.rb
Overview
Scrapes articles from XML sitemaps explicitly linked in HTML or discovered via standard sitemap paths.
Constant Summary collapse
- SITEMAP_LINK_SELECTOR =
Selector for sitemap link tags in HTML head
'link[rel="sitemap"][href]'- MAX_SUB_SITEMAPS =
Maximum number of sub-sitemaps to fetch when fanning out through a sitemapindex.
3
Class Method Summary collapse
-
.articles?(parsed_body) ⇒ Boolean
Whether the page links to a sitemap or is a sitemap.
-
.options_key ⇒ Symbol
Scraper config key.
-
.request_slots(_opts = {}) ⇒ Integer
Returns the number of request slots needed for sitemap discovery and fan-out.
Instance Method Summary collapse
-
#each {|article| ... } ⇒ Enumerator, void
Yields article hashes from the sitemap.
-
#initialize(parsed_body, url:, request_session: nil, **opts) ⇒ Sitemap
constructor
A new instance of Sitemap.
Constructor Details
#initialize(parsed_body, url:, request_session: nil, **opts) ⇒ Sitemap
Returns a new instance of Sitemap.
47 48 49 50 51 52 53 |
# File 'lib/html2rss/auto_source/scraper/sitemap.rb', line 47 def initialize(parsed_body, url:, request_session: nil, **opts) @parsed_body = parsed_body @url = Html2rss::Url.from_absolute(url) @request_session = request_session @min_priority = opts.fetch(:min_priority, Discovery::Sitemap::DEFAULT_MIN_PRIORITY) @max_age_days = opts.fetch(:max_age_days, Discovery::Sitemap::DEFAULT_MAX_AGE_DAYS) end |
Class Method Details
.articles?(parsed_body) ⇒ Boolean
Returns whether the page links to a sitemap or is a sitemap.
34 35 36 37 38 39 |
# File 'lib/html2rss/auto_source/scraper/sitemap.rb', line 34 def self.articles?(parsed_body) return false unless parsed_body !parsed_body.at_css(SITEMAP_LINK_SELECTOR).nil? || !parsed_body.at_xpath('//*[local-name()="urlset" or local-name()="sitemapindex"]').nil? end |
.options_key ⇒ Symbol
Returns scraper config key.
20 |
# File 'lib/html2rss/auto_source/scraper/sitemap.rb', line 20 def self. = :sitemap |
.request_slots(_opts = {}) ⇒ Integer
Returns the number of request slots needed for sitemap discovery and fan-out.
27 28 29 |
# File 'lib/html2rss/auto_source/scraper/sitemap.rb', line 27 def self.request_slots(_opts = {}) 1 + MAX_SUB_SITEMAPS end |
Instance Method Details
#each {|article| ... } ⇒ Enumerator, void
Yields article hashes from the sitemap.
60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/html2rss/auto_source/scraper/sitemap.rb', line 60 def each return enum_for(:each) unless block_given? entries = fetch_and_parse_entries return if entries.empty? entries.each do |entry| article_hash = article_from_entry(entry) yield article_hash if article_hash end end |