| WWW-Mechanize-AutoPager documentation | Contained in the WWW-Mechanize-AutoPager distribution. |
WWW::Mechanize::AutoPager - Automatic Pagination using AutoPagerize
use WWW::Mechanize::AutoPager;
my $mech = WWW::Mechanize->new;
# Load siteinfo from http://swdyh.infogami.com/autopagerize
$mech->autopager->load_siteinfo();
# Or, load manually
$mech->autopager->add_site(
url => 'http://.+\.tumblr\.com/',
nextLink => ...,
);
$mech->get('http://otsune.tumblr.com/');
if (my $link = $mech->next_link) {
$mech->get($link);
$mech->page_element; # HTML snippet
}
WWW::Mechanize::AutoPager is a plugin for WWW::Mechanize to do automatic pagination using AutoPagerize user script.
THIS MODULE IS CONSIDERED EXPERIMENTAL AND ITS API WILL BE LIKELY TO CHANGE
Tatsuhiko Miyagawa <miyagawa@bulknews.net>
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
| WWW-Mechanize-AutoPager documentation | Contained in the WWW-Mechanize-AutoPager distribution. |
package WWW::Mechanize::AutoPager; use strict; use 5.8.1; our $VERSION = '0.02'; use HTML::AutoPagerize; use Scalar::Util qw( weaken ); use WWW::Mechanize::DecodedContent; use JSON; sub WWW::Mechanize::autopager { my $mech = shift; $mech->{autopager} ||= WWW::Mechanize::AutoPager->new($mech); } sub WWW::Mechanize::next_link { my $mech = shift; $mech->{autopager}->next_link; } sub WWW::Mechanize::page_element { my $mech = shift; $mech->{autopager}->page_element; } sub new { my($class, $mech) = @_; my $self = bless { mech => $mech, autopager => HTML::AutoPagerize->new, }, $class; weaken($self->{mech}); # don't make it a circular reference $self; } sub load_siteinfo { my $self = shift; my $url = shift || "http://wedata.net/databases/AutoPagerize/items.json"; my $res = $self->{mech}->get($url); 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} }); } } } } sub add_site { my $self = shift; $self->{autopager}->add_site(@_); } sub parse_siteinfo { my($self, $config) = @_; my $site; while ($config =~ /^(\w+):\s+(.*?)\s*$/mg) { $site->{$1} = $2; } return $site; } sub next_link { my $self = shift; my $res = $self->{autopager}->handle($self->{mech}->uri, $self->{mech}->decoded_content) or return; return $res->{next_link}; } sub page_element { my $self = shift; my $res = $self->{autopager}->handle($self->{mech}->uri, $self->{mech}->decoded_content) or return; return $res->{page_element}; } 1; __END__