というわけで前回の続きでブクログとメディアマーカーにも突っ込んだ. 基本的にフローは変わってなくて,WWW::Mechanizeで実際にアクセスしながら 微調整しただけ.かんたんですね.Socialtunesにも入れようと思ったのですが, ぺたをつけるのがJavaScriptだったので断念しました.
bukulog.pl
細かいことはソース見て下さい.状態が特に設定できないので,欲しい本は 登録せずに持っている本だけ並べました.
use strict; use warnings; use WWW::Mechanize; use DateTime::Format::HTTP; use SSBCSV; my $url = "http://booklog.jp"; my $user = 'your username'; my $pass = 'your password'; my $mech = WWW::Mechanize->new(); $mech->get($url . "/login.php"); $mech->form_number(2); $mech->submit_form( fields => { account => $user, pw => $pass, }); my $ssb = SSBCSV->new("stocks.csv"); my $res = $ssb->get; foreach my $book(reverse @{$res}){ if($book->{state} ne 'wish'){ $mech->get($url . "/addbook.php"); $mech->form_number(2); $mech->submit_form( fields => { keywords => $book->{isbn}, }); $mech->follow_link( url_regex => qr{^\./addbook\.php\?}, ); 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->submit_form( fields => { e_year => $year, e_month => $month, e_day => $day, }); sleep(1); } }
mediamarker.pl
なんか,結構蹴られたので,いろいろ入ってますが気にせずに. ラジオボタンは選択せずとも,submitで送れるようです.
use strict; use warnings; use WWW::Mechanize; use DateTime::Format::HTTP; use SSBCSV; my $url = "http://mediamarker.net"; my $user = 'your name'; my $pass = 'your password'; my %state_hash = ( read => { own => 'owner', state => 'fin', }, reading => { own => 'owner', state => 'now', }, stack => { own => 'owner', state => 'yet', }, wish => { own => 'wish', state => 'no', },); my $mech = WWW::Mechanize->new(autocheck => 1); $mech->agent_alias('Mac Mozilla'); do { $mech->get($url . "/login"); } while(!$mech->success()); $mech->form_number(1); $mech->submit_form( fields => { uname => $user, pass => $pass, }); my $ssb = SSBCSV->new("stocks2.csv"); my $res = $ssb->get; foreach my $book(reverse @{$res}){ my $dt = DateTime::Format::HTTP->parse_datetime($book->{date}); my $year = $dt->year; my $month = $dt->month; my $day = $dt->day; do { $mech->get($url . "/u/" . $user . '/reg?cat=1&asin=' . $book->{isbn}); } while(!$mech->success()); if($mech->content =~ /この本・雑誌は登録済みです。/){sleep(15);next;} $mech->form_number(1); $mech->tick($state_hash{$book->{state}}->{own}, '1'); if($state_hash{$book->{state}}->{own} eq 'owner') {$mech->tick('buy_flag', '1');} $mech->select('buy_year', $year); $mech->select('buy_month', $month); $mech->select('buy_day', $day); $mech->select('fin_year', $year); $mech->select('fin_month', $month); $mech->select('fin_day', $day); $mech->select('regdate_year', $year); $mech->select('regdate_month', $month); $mech->select('regdate_day', $day); $mech->submit_form( fields => { read => $state_hash{$book->{state}}->{state}, regdate_sel => 'edit', }); sleep(15); }
というわけで
これで,現状の本についてはStackStockBooks,ブクログ,読書メーター, メディアマーカーと日付(はある程度ですが)・状態も含めて同期ができました. 続くステップは当然Plaggerです.
とりあえず登録サイトは「メディアマーカー」にしようと思います.理由は 一番いろいろ設定できるから.登録日の他に購入日や読了日,価格や欲しい本なども 登録できるので一番情報量が多いですね.
そして,これをレポジトリにして,他のサービスにはPlaggerで登録していきます. ただしメディアマーカーのRSSがしょぼしょぼなので,自分でスクレイピング した方が良さそうです.登録の部分は,今回WWW::Mechanizeで書いたのが ほぼそのまま使えるでしょう.StackStockBooksは今作ってますが,OpenIDなので どうなるかと思ったけど,ちゃんとOpenIDのサイトにリダイレクトしてくれたので 問題なく作れそうです.
この他,登録しておくべき蔵書管理サイトがあれば紹介してくださいませ. どんどんメカっていきますので.それMech!