From: Kouhei Sutou Date: 2007-03-17T20:07:25+09:00 Subject: [ruby-list:43270] [ANN] RSS Parser 0.1.7 須藤です。 RSS Parser 0.1.7をリリースしました。 http://raa.ruby-lang.org/project/rss/ 0.1.7での新機能は以下の通りです。 * Atomのサポート * RSS 2.0中のDublinCoreモジュールの正式サポート * 他のフィード形式に変換するための便利メソッドを追加 また0.1.7からruby 1.6.xのサポートを打ち切りました。 以下、長めの詳細です。 = Atomのサポート Atomをサポートとは以下のことを含みます。 * RSS::Parser.parseでAtomフィード文書を妥当性検証つきでパー スできる。 * RSS::Parser.parseでAtomエントリ文書を妥当性検証つきでパー スできる。 * RSS::Maker.makeでAtomフィード文書を生成できる。 * RSS::Maker.makeでAtomエントリ文書を生成できる。 残念ながら、AtomサポートによりRSS Makerの以下の参照系のAPIの 挙動が変わりました。以前はStringかnilを返していたのですが、オ ブジェクトを返すようになりました。 * maker.channel.title * maker.channel.description * maker.channel.copyright * item.title * item.link * item.description * item.rights ただ、0.1.6までのRSS Parser/RSS Makerの使いかたではこれらAPI は使われていないだろうと思うので、影響は少ないと考えています。 = RSS 2.0とDublinCoreモジュール 今までは非公式にサポートしていましたが、0.1.7からは何もしな くても使えるようになります。また、今までは以下のように各ファ イルを別々にrequireして使うことを推奨していましたが、 require 'rss/1.0' require 'rss/dublincore' 少し前のバージョンから require 'rss' というようにするだけでフル機能を使えるようになっています。 = フィード形式の変換 フィード形式とはRSS 1.0とかRSS 2.0とかAtomとかのことを指して いるつもりです。 0.1.7から他のフィード形式に変換するための便利メソッドを追加し ました。これを使うと以下のようにRSS 1.0をRSS 2.0に変換するこ とができます。 rss10 = RSS::Parser.parse(File.read("1.0.rdf")) rss20 = rss10.to_rss("2.0") RSS Parserはフィードの種類によらずRSS Parser.parseでパースで きますが、パースしたフィードの種類毎に別のオブジェクトを返す ため、パース結果を使うときに面倒なことがありました。 これに対する1つの解はフィードの結果によらない一般的なオブジェ クトを返すというもので、いくつかの既存のRSS/Atomパーサが採用 しています。しかし、この方式では一般的なオブジェクトの設計な どをかなり頑張らないとフィード特有の情報が抜け落ちてしまうか もしれません。既存のパーサはそこらへんはうまく妥協点を見出し ているようです。 RSS Parserが妥当性検証つきにこだわっていることからもわかると おり、私は上記の方法の中途半端な感じが嫌でした。そこで、「パー ス結果が使いにくい」に対する私の答えが「フィード形式の変換」 です。 ユーザは、パース結果を使用する前に、自分の好みのフィード形式 に変換します。以下の例では全てのフィードをRSS 1.0として扱いま す。 feeds = inputs.collect do |input| feed = RSS::Parser.parse(input) feed.to_rss("1.0") end ユーザが欲しい情報はそのフィード形式が持っている情報のみであ るといえます。つまり、フィード形式を変換するところを頑張れば、 ユーザが情報落ちを気にすることはなくなります。そこを頑張って いるのがRSS Makerです。 しかし、フィード形式により必要な情報が異なるため、完璧に変換 できないこともあります。そのため、以下のように変換後のフィー ドの内容をカスタマイズできます。例えば、以下の例は、変換元の フィードにタイトルが設定されていない場合にデフォルトのタイト ルを設定します。 feed.to_rss("1.0") |maker| maker.title.content ||= "Unknown" end 以前のRSS Parserはこのように利用されてることはほとんどなかっ たと思います。それが、私がRSS Makerの参照系のAPIはほとんど使 われていなかっただろうと予想している理由です。 最後に、RSS ParserがRubyの標準添付ライブラリに含まれているの に別リリースなのは以下の理由からです。 * APIに非互換性があるためruby 1.8.xには含めることができない 気がする * でも、いろいろ使ってテストしてみて欲しい * trunkで動くものはruby 1.8.xでは動かない