RSS フィードを処理する

RubyRSS フィードを処理したいです。

open-uri でこの日記のフィードを取得して rss/1.0 で parse するというのをしてみます。

#!/usr/local/bin/ruby

require 'open-uri'
require 'rss/1.0'

content = Kernel.open('http://d.hatena.ne.jp/rubyo/rss')
rss = RSS::Parser::parse(content.read)

puts rss.channel.link

rss.items.each do |item|
  puts item.link
end

実行してみます。

$ ruby rss.rb
http://d.hatena.ne.jp/rubyo/
http://d.hatena.ne.jp/rubyo/20060402#1143960117
http://d.hatena.ne.jp/rubyo/20060402#1143959638
http://d.hatena.ne.jp/rubyo/20060402#1143959222
http://d.hatena.ne.jp/rubyo/20060402#1143957895
http://d.hatena.ne.jp/rubyo/20060402#1143957874
  • parse して帰ってきたオブジェクトのクラスは rss.class で見てみたところ RSS::RDF クラス(?) のようです。
  • フィードの channel 要素には rss.channel でアクセスします。
  • 各アイテムは rss.items で Array で返ってくるようなので、この Array に each でアクセスします。
  • ここでは処理していませんが、parse に失敗場合は RSS::InvalidRSSError が throw されるのでこれをキャッチしてやれば例外処理が可能のようです。

まだ分かっていないことがいくつかあります。

  • 対象の RSS のバージョンが分からないときはどうするのか分かりません。PerlXML::RSSXML::Feed のようなユニバーサルなパーサーはあるのでしょうか。
  • RSS-Autodiscovery を行うライブラリはあるのでしょうか。
  • 取得した RSS から title などを出力すると UTF-8 になります。ターミナルは EUC-JP なのですが、UTF-8EUC-JP に ruby で変換する方法がまだ分かりません。