■WWW::Mechanize::AutoPager を wedata 対応にするパッチ
http://perl-mongers.org/2008/06/autopagerize-twitter-using-wedata.html をみていて、とりあえず WWW::Mechanize::AutoPager の側が古い情報をみているのは実にケシカランとおもったので、パッチをつくってみましたがどうでしょうか。
互換性はなくてもいいかなーとおもったのですが、ブラジルの方角から全力で DIS られそうなので、content_type をみてふりわけるようにしてみました。
=== Makefile.PL ================================================================== --- Makefile.PL (revision 15698) +++ Makefile.PL (local) @@ -5,6 +5,7 @@ requires 'HTML::AutoPagerize'; requires 'WWW::Mechanize'; requires 'WWW::Mechanize::DecodedContent'; +requires 'JSON' => 2.09; build_requires 'Test::More'; use_test_base; === lib/WWW/Mechanize/AutoPager.pm ================================================================== --- lib/WWW/Mechanize/AutoPager.pm (revision 15698) +++ lib/WWW/Mechanize/AutoPager.pm (local) @@ -7,6 +7,7 @@ use HTML::AutoPagerize; use Scalar::Util qw( weaken ); use WWW::Mechanize::DecodedContent; +use JSON; sub WWW::Mechanize::autopager { my $mech = shift; @@ -36,14 +37,20 @@ sub load_siteinfo { my $self = shift; - my $url = shift || "http://swdyh.infogami.com/autopagerize"; + my $url = shift || "http://wedata.net/databases/AutoPagerize/items.json"; - $self->{mech}->get($url); + my $res = $self->{mech}->get($url); - if (my $html = $self->{mech}->content) { - while ($html =~ m!<textarea class="autopagerize_data".*?>\s*(.*?)\s*</textarea>!gs) { - my $site = $self->parse_siteinfo($1); - $self->{autopager}->add_site(%$site); + if (my $content = $self->{mech}->content) { + if ($res->content_type =~ m{text/html}) { # backward compatibility + while ($content =~ m!<textarea class="autopagerize_data".*?>\s*(.*?)\s*</textarea>!gs) { + my $site = $self->parse_siteinfo($1); + $self->{autopager}->add_site(%$site); + } + } else { + for my $row ( @{ from_json( $content ) } ) { + $self->{autopager}->add_site(%{ $row->{data} }); + } } } }
トラックバック - http://d.hatena.ne.jp/tokuhirom/20080605/1212683828


