|
#!/usr/bin/env perl |
|
|
|
use strict; |
|
use warnings; |
|
use WWW::Mechanize; |
|
use DateTime::Format::HTTP; |
|
use SSBCSV; |
|
use Config::Pit; |
|
use Encode; |
|
use Data::Dumper; |
|
|
|
my $url = "http://book.akahoshitakuya.com"; |
|
|
|
my $config = pit_get('book.akahoshitakuya.com', require => { |
|
"username" => 'your email', |
|
"password" => 'your password', |
|
}); |
|
|
|
my $user = $config->{username}; |
|
my $pass = $config->{password}; |
|
|
|
|
|
my %state_hash = ( |
|
read => sub { |
|
return (url_regex => qr{^/add\.php\?}, n => 1); |
|
}, # add() |
|
reading => sub { |
|
return (url_regex => qr{^/add\.php\?.*type=now}); |
|
}, # type=now add_now() type=del_now del_now() |
|
stack => sub { |
|
return (url_regex => qr{^/add\.php\?.*type=tun}); |
|
}, # type=tun add_tun() type=del_tun del_tun() |
|
wish => sub { |
|
return (url_regex => qr{^/add\.php\?.*type=pre}); |
|
}, # type=pre add_pre() |
|
# type=re readd() |
|
); |
|
|
|
my $mech = WWW::Mechanize->new(); |
|
$mech->get($url . "/login"); |
|
|
|
$mech->form_number(2); |
|
$mech->submit_form( |
|
fields => { |
|
mail => $user, |
|
password => $pass, |
|
}); |
|
|
|
my $ssb = SSBCSV->new("stocks.csv"); |
|
my $res = $ssb->get; |
|
|
|
#my $i = 0; |
|
foreach my $book (reverse @{$res}){ |
|
# last if ($i > 1); |
|
$mech->get($url . "/b/" . $book->{isbn}); |
|
|
|
print("title : ", encode('utf8', $mech->title), "\n"); |
|
|
|
my @links = $mech->find_all_links( |
|
url_regex => qr{^/add\.php\?.*type=re}, |
|
); |
|
print("re link count : ", scalar(@links), "\n"); |
|
next if (@links > 0); |
|
|
|
print("state : ", $book->{state}, "\n"); |
|
my @links2 = $mech->find_all_links( |
|
$state_hash{$book->{state}}->(), |
|
); |
|
print("matched actions count : ", scalar(@links2), "\n"); |
|
next unless (@links2 > 0); |
|
|
|
print("update.\n"); |
|
$mech->follow_link( |
|
$state_hash{$book->{state}}->(), |
|
); |
|
if($book->{state} eq 'read'){ |
|
my $dt = DateTime::Format::HTTP->parse_datetime($book->{date}); |
|
my $year = $dt->year; |
|
my $month = sprintf("%02d", $dt->month); |
|
my $day = sprintf("%02d", $dt->day); |
|
$mech->form_number(3); |
|
$mech->select('read_date_y', $year); |
|
$mech->select('read_date_m', $month); |
|
$mech->select('read_date_d', $day); |
|
$mech->submit; |
|
} |
|
sleep(1); |
|
|
|
# $i += 1; |
|
} |