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使ったら、サイズが半分になった(苦笑)まぁ力業もほどほどにと言うことで…