Tag: Feedjira/解析
feed = Feedjira::Feed.fetch_and_parse(feed_url)
def fetch_and_parse(url) response = connection(url).get unless response.success? raise FetchFailure, "Fetch failed - #{response.status}" end feed = parse response.body #レスポンスを解析 feed.feed_url = url feed.etag = response.headers['etag'].to_s.delete '"' feed.last_modified = parse_last_modified(response) feed end
def parse(xml, &block) parser = determine_feed_parser_for_xml(xml) raise NoParserAvailable, 'No valid parser for XML.' unless parser parse_with parser, xml, &block end
# @private def default_parsers [ Feedjira::Parser::RSSFeedBurner, Feedjira::Parser::GoogleDocsAtom, Feedjira::Parser::AtomYoutube, Feedjira::Parser::AtomFeedBurner, Feedjira::Parser::Atom, Feedjira::Parser::ITunesRSS, Feedjira::Parser::RSS ] end end
# rubocop:disable Style/DocumentationMethod module Feedjira module Parser # Parser for dealing with RSS feeds. # Source: https://cyber.harvard.edu/rss/rss.html class RSS include SAXMachine include FeedUtilities element :description element :image, class: RSSImage element :language element :lastBuildDate, as: :last_built element :link, as: :url element :rss, as: :version, value: :version element :title element :ttl elements :"atom:link", as: :hubs, value: :href, with: { rel: 'hub' } elements :item, as: :entries, class: RSSEntry attr_accessor :feed_url def self.able_to_parse?(xml) (/\<rss|\<rdf/ =~ xml) && !(/feedburner/ =~ xml) end end end end
def last_modified puts "hereherehere" @last_modified ||= begin published = entries.reject { |e| e.published.nil? } entry = published.sort_by { |e| e.published if e.published }.last entry ? entry.published : nil end end