old « ガリレオ | メイン | ローリング SUSHI » new

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

トラックバックURL

このエントリーのトラックバックURL:
https://blog.hp-improve.com/mt/mt-tb.cgi/430

コメントする