Read It Later からはてブに登録する
多くの iPhone アプリでは、あとで読む系は Read It Later (以下 RIL) が多いので、RIL に流しているが、通常ははてブを使っているため、RIL に登録した URL をはてブに集約したい。というか、仕事から現実逃避したいので、コード書きたい。
というわけで、以下のようなスクリプトを作り、cron で回して、昨日以降に RIL に登録した URL を自動的にはてブに登録するようにしたった。なお、RIL の API にアクセスするため、API Key を取得する必要がある。
#!/usr/bin/perl # Read It Later に昨日以降登録されたものを # Hatena Bookmark に登録する use 5.010; use strict; use warnings; use utf8; use Data::Dumper; use JSON; use DateTime; use DateTime::TimeZone; use LWP::Simple; use LWP::UserAgent; use WebService::Hatena::Bookmark::Lite; my $ril_url = 'https://readitlaterlist.com/v2/get?username=%s&password=%s&apikey=%s&since=%s'; my $ril_user = 'user'; my $ril_pass = 'password'; my $ril_key = 'apikey'; my $hatena_user = 'user'; my $hatena_pass = 'password'; my $tz = DateTime::TimeZone->new(name => 'Asia/Tokyo'); # 昨日のエポック秒 my $yesterday = DateTime->today(time_zone => $tz)->subtract(days => 1); my $ril_since = $yesterday->epoch(); # RIL から JSON を取得する my $ril = sprintf($ril_url, $ril_user, $ril_pass, $ril_key, $ril_since); my $json = get($ril); # こんな JSON が返ってくる #my $json = '{"status":1,"list":{"74006":{"item_id":"74006","title":"Google","url":"http:\/\/www.google.co.jp\/","time_updated":"1325814579","time_added":"1325814579","state":"0"}},"since":1325737324,"complete":0}'; my $data = decode_json($json); my $list = $data->{list}; my $bookmark = WebService::Hatena::Bookmark::Lite->new( username => $hatena_user, password => $hatena_pass, ); # time_added でソート for my $key ( sort { $list->{$a}{time_added} <=> $list->{$b}{time_added} } keys %$list ) { my $url = $list->{$key}{url}; $url = expand_uri($url) if $url =~ m|^http://t\.co/|; # t.co は展開する # 登録された日時をコメントにする my $dt = DateTime->from_epoch( epoch => $list->{$key}{time_added}, time_zone => $tz, ); my $comment = $dt->strftime('%Y-%m-%d %H:%M:%S'); $bookmark->add( url => $url, comment => $comment ); say $comment; say $url; } # 短縮 URL を展開する sub expand_uri { my $uri = shift; my $ua = LWP::UserAgent->new; my $res = $ua->head($uri); return $res->request->uri; }