Pipesを使って RubyForgeのプロジェクトのリリースを RSSでウォッチする

2009/02/28

Categories: ruby

libxml-rubyのAPIの変更に気がつかずにはまったので、リリースをウォッチしようとRubyForgeのページを確認するも、フィードが見つからない(あったりして)。
RubyForge全体のnewsのフィードと、プロジェクトのnewsのフィードはあった。
だけどリリースとnewsは連動しているわけではないらしく投稿するかしないかは管理者次第のようだ。
RubyForge: LibXML: ニュース
RubyForge: LibXML: ファイルリスト
じゃあPipesでも使ってみるかと気軽に始めたのだけどかなり手間取った。

やりたいこと
最初のリリース一覧の抜出からしてなかなか意図した結果にならない。XPathでさくっと取り出してぇ、と試行錯誤。結局YQLで大枠を抜き出してOperators/Renameでちまちまとtitle要素/link要素にとり出すことに。

select  * from html
where
url="http://rubyforge.org/frs/?group_id=494"
and
xpath="/html/body/div[3]/table/tr/td[2]/table/tr[position()>=4 and td/p/strong/text()]"
得られたtrリストの直下の一番目のtdと二番目のtdを指定する方法でまた悩む。
item.td.0.p.strong.a.href  →link
item.td.0.p.strong.a.content →title
item.td.1.p.strong →日時
てな感じ。

リリースノートの内容は、<pre>の中身でざくっと指定できたのでLoop+Fetch Pageの結果をdescriptionにassign。

日時をフィードのpubDateにどう反映するのかがまたよくわからなくて、他の人のPipesを参考にLoop+Date Builderでitem.y:publishedにassignした。フィード出力の時点でpubDateに突っ込まれるようだ。

ようやく出来たのが↓のPipes。Livedoor Readerに食わせてウォッチ中。
http://pipes.yahoo.com/pipes/pipe.info?_id=78e1182d42024a179dfda9fc6f708550

面白いしすごく便利だけど、やりたいことをPipes流の発想に変換するのがなかなか大変。。。
YQLを使えばXPathでスクレイピング可能なのが救い。



>> Home