RubyのREXMLでRSSパーサー(解析)を作る為のメモ
2007年10月19日
Rubyに標準装備の'rss'ライブラリがいまいち使いにくい(使いこなせていない)ので、自分でRSS解析を作って見ることに。
以下メモ。
■RSS(ATOM)の種類を判別
$typeRss20 = /<rss(.*?)version="2.0"/
$typeRss10 = /<rdf:RDF/
$typeRss09 = /<rss(.*?)version="0.9(.?)"/
$typeAtom = /<feed /
0.9は0.91もあるからどちらでも捉えられるようにしてみた。
0.9系は0.91しかサンプルが無かったから上手くいくかは知らない。
■ドキュメント生成
open(RSSのURL) do |file|
text = file.read
end
doc = Document.new(text)
■XPathで特定要素を捕獲
・該当する最初の要素を取り出す
a = XPath.first(doc, XPath)
・該当する要素の全てに対して処理を行う
XPath.each(doc, XPath)do |i|
処理
end
■XPathの例
"//channel"
"//channel/item"
"title"
"link/@href" ←@属性
※Ruby1.8.6で属性を取得しようとすると取得できないバグあり。
参照:rubyを1.8.6に上げるとXPathが正しく動作しなくなる?
■RSS/ATOMの種類による要素名(タグ)の違い
めんどくさいので貼り付け。
$xpathTitle = "//title"
$xpathLinkRss = "//link"
$xpathLinkAtom = "//link/@href"
$xpathDateRss = "//lastBuildDate"
$xpathDateRss_2 = "//pubDate"
$xpathDateRss_3 = "//dc:date"
$xpathDateAtom = "//updated"
$xpathItemRss10 = "//item"
$xpathItemRss20 = "//channel/item"
$xpathItemRss09 = "//channel/item"
$xpathItemAtom = "//feed/entry"
$xpathItemTitle = "title"
$xpathItemLinkRss = "link"
$xpathItemLinkAtom = "link/@href"
$xpathItemDescriptionRss = "description"
$xpathItemDescriptionRss_2 = "<content:encoded>"
$xpathItemDescriptionAtom = "content"
$xpathItemDateRss10 = "dc:date"
$xpathItemDateRss20 = "pubDate"
$xpathItemDateRss20_2 = "dc:date"
$xpathItemDateRss09 = "pubDate"
$xpathItemDateAtom = "published"
参考:http://www.mdn.co.jp/webcre/Tips/Vol56/2/index.html
■メタタグを削除
何故か知らないけどメタタグ<meta…/>があると上手く解析出来なかったので削除しておく。
doc.elements.delete_all("//meta")
old « ガリレオ | メイン | ローリング SUSHI » new