大西ブログ

All your blog are belong to us

xpathからfeedをつくるサービスを作りました

先日の kyoto.pm ハッカソンで、時代錯誤な feed 生成ツールを作りました。
なんでもRSSとか類似サービスいろいろあるとは思いつつ、scrapeするコード書くの好きだし、kindle本セールのフィードが欲しかったので作ってみました。完全自動でフィードつくるより、xpath(もしくはCSSセレクタ)で指定できる方が好みのフィードが作れそうというのが理由です!

http://xpathfeed.com/

使い方は簡単です。任意のURLを入力します。

f:id:onishi:20130416214455p:plain

すると、iframe内にコンテンツが表示されます。

f:id:onishi:20130416214541p:plain

こっから、フィードにしたいアイテムを選びます。Yahooの「主なサービス」のフィードを作ろうと思ったら、マウスカーソルをフォーカスすると…

f:id:onishi:20130416214642p:plain

iframe内右上に xpath がサジェストされます(cho45の jautopagerize のコードをパクりました)。これを参考に、リストアイテム用の xpath を指定すると…

f:id:onishi:20130416214816p:plain
...
f:id:onishi:20130416214851p:plain

もう RSS feed が完成しました!

  • xpath だけじゃなくて CSSセレクタ でも指定できます
  • title, link, image, description をそれぞれ指定できます(だいたいはデフォルトのままでいい感じになります)

kindle セール本フィード

というわけで、kindleセール本のフィードも作ってみた!
こんな設定でこんなフィードができました。
テーブル内に、商品画像の行と、商品説明の行が別の tr であるので、tr[position() mod 3 = 2] みたいに特定の周期の tr だけを取得したり、こういった細かい指定も xpath ならではです。

技術的な説明

あたりを使ってます。ありふれた感じですね!
ソースは https://github.com/onishi/xpathfeed にありますのでご笑覧ください。
外部HTMLの取得後、HTTP::Response をしばらくキャッシュする以外は動的にフィードを作成しているため、ストレージ不要なサービスになっています。自分用に自宅サーバなどで簡単に立ち上げられると思います。メインのクラス XPathFeed.pm はウェブアプリ以外にも使える感じにしており、

use XPathFeed;

my $x = XPathFeed->new;
# URL を指定
$x->url($url);
# リスト構造のための xpath を指定
$x->xpath_list($xpath);
# フィード作成
print $x->feed;

みたいに使えます。
ウェブアプリは Amon2::Lite で app.psgi だけに書いてあるので

plackup app.psgi

で簡単に起動できます。Amon2::Lite 初めて触ったけど便利ですね!

まとめ

RSSリーダーブームにのっかって、フィードを簡単に生成するツールを作ってみました。どうぞご利用ください。

http://xpathfeed.com/