キーワードグラフサービス - XXXannex
この辺りからパラメーターを調べて、名前リストから言及数データをダウンロードするためのスクリプトを生成する。
日付の計算
日付のパラメーターを指定するに当たっては、こんな感じのスクリプトを作成する。
use strict; use warnings; use Date::Calc qw(:all); # specify YYYYMMDD or YYYY-MM-DD format as an argument my $ymd = shift || join('', Today()); $ymd =~ /(\d{4}).?(\d{2}).?(\d{2})/; my ($year, $month, $day) = ($1, $2, $3); print "$ymd - Day of year : " . (Day_of_Year($year, $month, $day) - 1) . "\n";
$ perl doy.pl 2008-12-31 2008-12-31 - Day of year : 365
はてな仕様なので、「1月1日からの日数-1」を返す。つまり、日付 - x が1月1日になるようなx。
ファイル名の規約
例えば、こんな感じのデータを取ってくる場合を考えます。
画像から開始日+レンジを取ってくるのがスマートだと思いますが、なかなか難しいので*1ファイル名に情報を埋め込むことにします。つまり
%b9%e2%b3%c0%ba%cc%cd%db_2008-12-25_400.png
といった具合にファイル名を指定して
/(.+)_(\d{4})-(\d{2})-(\d{2})_(\d+)/
といった具合にマッチングすれば、名前+日付+レンジの情報を取り出すことができるという寸法ですね。
$ echo %b9%e2%b3%c0%ba%cc%cd%db_2008-12-25_400.png | perl -nle 'print "$1,$2,$3,$4" if /(.+)_(\d{4})-(\d{2})-(\d{2})_(\d+)/' %b9%e2%b3%c0%ba%cc%cd%db,2008,12,25
ダウンロード
上の事情をふまえて、こんな感じのスクリプトでダウンロードリストを作ってみる。
use strict; use warnings; use Encode; use URI::Escape; # $end must be YYYY-MM-DD # e.g. http://d.hatena.ne.jp/keywordstats/%b9%e2%b3%c0%ba%cc%cd%db?mode=graph&type=refcount&date=2008-12-25&range=400 my $end = shift; my $range = shift; die('specify $end and $range!') if(!$end or !$range); my $enc_htn = 'euc-jp'; my $enc_wiki = 'utf8'; while(<>){ tr/\x0A\x0D//d; Encode::_utf8_off($_); my $escaped_name = URI::Escape::uri_escape(encode($enc_htn, decode($enc_wiki, $_))); print "wget -O ${escaped_name}_${end}_${range}.png 'http://d.hatena.ne.jp/keywordstats/$escaped_name?mode=graph&type=refcount&date=$end&range=$range'; sleep 1;\n"; }
$ perl make_dlscript.pl 2008-12-31 365 < names.txt > list.sh
ダウンロード後
存在しないキーワードの統計グラフを取ってこようとすると、404が返される。なので実際にデータを取ってくることはないんだけど、0バイトのファイルができてしまうのでこの辺を消しておく。
$ find ./ -size 0 -type f | xargs rm
まあ、簡単に。
$ ls | wc -l 1006
それでもまだ多いなあ・・・。
*1:というか、面倒なので