最近やってること – RRS配信してないページのRSSを勝手に作る

きっかけは、RSSどうこうと言うことよりも、むしろ、ちらっと目にしたWeb::Scraperのお話。
miyagawaさん謹製のモジュールでCPANに上がってるらしい。

Web::Scraper – Web Scraping Toolkit inspired by Scrapi – search.cpan.org
Web::Scraper – naoyaのはてなダイアリー
Web::Scraperが便利すぎて困るの巻 (CodeZine編集部ブログ)


やれることは、ざっくり言うと、
タグやclass名、IDなんかに紐づけて要素を引っ張ってこれる、ということみたい。

つまりは、これさえあれば、最近の、
classやidがきっちり指定されたhtmlからなら、
欲しいデータを楽に取得できると言うことなのだけど、
んーあいにく僕の主戦場はPHP。


もちろん、Web::Scraper組み込んで書いたPerlプログラムを走らせておいて、
RSSの配信の部分だけPHPで実装するか、
ないしはPHPなんかやめて、RSSも静的なXMLファイルにすればいいじゃない、
そんな感じが多分常識的な判断なのだと思うけども、

いや、なんか、HTTPリクエストも含めて何か書いてみたかったんです。はい。

車輪の再発明になるのはよく分かってるけどさ。


とはいえ、ScraperをPHPに持ってきたいワケじゃないし、
そもそも同じ名前のライブラリがPHPにもあるっぽいし(Docs for page Scraper.php)、
まぁいる部分だけ書いてみて、上手くなかったら他のプログラムを参考にしようかっていう。


で、元々、水曜どうでしょうのオフィシャルサイトに、
HTTPリクエストを送って更新を取得するとかやってたんだけど、
どう見てもそのプログラムがやっつけくさい。

さくらインターネットは標準でPHP5がインストールされてないんで、
オブジェクトを使うには、PHP4式で書いてあげなくてはならなくて、
その辺が結構めんどいのだけど(ローカル領域にPHP5入れちゃうっていう手もあるけどね)、
なんとか。

http://www.nobodyplace.com/rss/htb/suidou.php

と言うわけで、一応、HEADリクエストを送って、
更新してたらGETで持ってきて、ログとして書き出す(ないしはMySQLに突っ込む)、
RSSはログを読み出してSmartyで用意したテンプレに流し込む、みたいな感じ。


問題点としては、HTMLを取得してきた後の加工がサイト毎に違って、
その辺の効率化がもう少し上手く出来れば、
つまり、Web::Scraperみたいに美しくできれば、
もうちょっと幸せなんだけどなぁ…うーむ。


と言うわけで、一応形にはなったけど、
まーソースはアレなので内緒ってことで。

さて、ライブラリ探すか。
多分、既に色々便利なのありそうな予感。
PEAR HTTPとか)



あと、

色々試してみて思ったけど、ヘッダーで、
LastModifiedを返してくれるページってなんかほとんどないそんなに多くないね。
面倒なのかなー



追記

素直に、PEAR HTTP_Client使ったら、サイズが半分になった(苦笑)

まぁ力業もほどほどにと言うことで…