Feedjira/解析
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
&tag(Feedjira/解析);
*目次 [#if9db217]
#contents
*関連ページ [#d7cf3a70]
*参考情報 [#f57d2dc0]
*処理の流れ [#ce746af8]
- 通常以下のメソッドの呼び出しによってfeedが取得できる。
feed = Feedjira::Feed.fetch_and_parse(feed_url)
-メソッドはfeedjira/feed.rbに存在。
#pre{{
def fetch_and_parse(url)
response = connection(url).get
unless response.success?
raise FetchFailure, "Fetch failed - #{response....
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
}}
-parseはFeedクラスのクラスメソッドで以下のような内容とな...
#pre{{
def parse(xml, &block)
parser = determine_feed_parser_for_xml(xml)
raise NoParserAvailable, 'No valid parser for XML...
parse_with parser, xml, &block
end
}}
-実際のparserはURLの取得先によって切り替わる。パーサーの...
#pre{{
# @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
}}
-rssの場合は、parser/rss.rbがそれ。
#pre{{
# 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, wit...
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
}}
-ParserにSAXMachineとFeedUtilitiesがincludeされていること...
-parseの戻り値は自身のクラスFeedjira::Parser::RSSとなる。
*ポイント [#k74d9d20]
**last_modifiedはどこで設定される [#yf4e67f0]
-fetch_and_parse内部のfeed = parse response.bodyの呼び出...
-@last_modifiedはSAX Machineではなくて、FeedUtilitiesで定...
#pre{{
def last_modified
puts "hereherehere"
@last_modified ||= begin
published = entries.reject { |e| e.published.nil? }
entry = published.sort_by { |e| e.published if e....
entry ? entry.published : nil
end
end
}}
-すなわち@last_modifiedがnilの場合、フィードに含まれるエ...
終了行:
&tag(Feedjira/解析);
*目次 [#if9db217]
#contents
*関連ページ [#d7cf3a70]
*参考情報 [#f57d2dc0]
*処理の流れ [#ce746af8]
- 通常以下のメソッドの呼び出しによってfeedが取得できる。
feed = Feedjira::Feed.fetch_and_parse(feed_url)
-メソッドはfeedjira/feed.rbに存在。
#pre{{
def fetch_and_parse(url)
response = connection(url).get
unless response.success?
raise FetchFailure, "Fetch failed - #{response....
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
}}
-parseはFeedクラスのクラスメソッドで以下のような内容とな...
#pre{{
def parse(xml, &block)
parser = determine_feed_parser_for_xml(xml)
raise NoParserAvailable, 'No valid parser for XML...
parse_with parser, xml, &block
end
}}
-実際のparserはURLの取得先によって切り替わる。パーサーの...
#pre{{
# @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
}}
-rssの場合は、parser/rss.rbがそれ。
#pre{{
# 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, wit...
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
}}
-ParserにSAXMachineとFeedUtilitiesがincludeされていること...
-parseの戻り値は自身のクラスFeedjira::Parser::RSSとなる。
*ポイント [#k74d9d20]
**last_modifiedはどこで設定される [#yf4e67f0]
-fetch_and_parse内部のfeed = parse response.bodyの呼び出...
-@last_modifiedはSAX Machineではなくて、FeedUtilitiesで定...
#pre{{
def last_modified
puts "hereherehere"
@last_modified ||= begin
published = entries.reject { |e| e.published.nil? }
entry = published.sort_by { |e| e.published if e....
entry ? entry.published : nil
end
end
}}
-すなわち@last_modifiedがnilの場合、フィードに含まれるエ...
ページ名: