ここ数日、開発者ブログの紹介エントリを良く見るようになってきました。例えば、@IT にも以下のような記事があります。
RSS Reader を使っている人は「OPML を提供してくれればいいのによー」と心から思っているに違いがないのですが、残念ながらこの記事にはそれがない。ぼくは専ら RSS Reader として Livedoor Reader を使っているのですが、この記事では 15 個のブログが紹介されているため、最悪で 15 回フィードを登録しなければなりません。これは避けたい。おもいっきし避けたい。
ちょうど、WebService::LDR というモジュールを作ってる途中で、既に購読はできるようになっているため、上記エントリをスクレイピングして Livedoor Reader で開発者ブログを購読するようにする、30 行くらいのスクリプトを作ってみました。スクレイピング部分は Web::Scraper を使うとあっという間ですね。もちろん、スクリプトを書くよりか手で 15 個登録した方が早かったことは言うまでもない。
use strict; use warnings; use WebService::LDR; use Config::Pit; use Web::Scraper; my $uri = URI->new("http://www.atmarkit.co.jp/fjava/column/andoh/andoh53.html"); my $result = scraper { process 'div.kwout > a', 'url[]' => '@href'; }->scrape($uri); my $conf = pit_get('LDR', require => { user => 'your livedoor_id on LivedoorReader', pass => 'your password on LivedoorReader' }); my $ldr = WebService::LDR->new( user => $conf->{user}, pass => $conf->{pass} )->login; foreach my $u (@{$result->{url}}) { my $result = $ldr->subscribe($u) or do { warn "cannot discover feed"; next; }; $result->isSuccess ? print "success: $u\n" : print "already subscribed: $u\n"; }
WebService::LDR の方は、まだ日次でインタフェースが大幅に変わるわ、使える API が増えていくわしている最中なので、github にも上げてません。
あーちなみに、実行するとこんなかんじになります。
$ perl -Ilib test.pl already subscribed: http://alpha.mixi.co.jp/blog/ already subscribed: http://engineer.dena.jp/ already subscribed: http://labs.gree.jp/blog/ cannot discover feed at test.pl line 25. success: http://mtl.recruit.co.jp/ success: http://blog.spicebox.jp/labs/ already subscribed: http://labs.unoh.net/ already subscribed: http://techlife.cookpad.com/ success: http://lab.cirius.co.jp/blog/ success: http://searchblog.yahoo.co.jp/ success: http://blogs.oracle.com/otnjp/ success: http://yuiblog.com/ success: http://blogs.msdn.com/b/ie/ cannot discover feed at test.pl line 25. success: http://ameblo.jp/cyberx-engineer/