日記の月別更新回数を求めて、グラフ化してみた
はてなダイアリーで日記を書くようになって2年くらいたつのですが、月別の更新回数をグラフ化してみたら、自分のブログ更新意欲の波みたいなものが分かるんじゃないかと思ってやってみたのが、上のグラフです。
グラフを見てみるに、比較的夏が多くて冬が少ないですね。僕は冬が苦手で夏が好きなので、それと関係があるのかもしれません。まあ昨年の6月以降、更新が 0 回の月がないのはよいことだ。
で、月別の更新回数(エントリ日数)は、はてなダイアリーの archive ページ(例えば2006年10月だったら http://d.hatena.ne.jp/s_kanda/archive/200610 )を、 Perl のプログラムで取得して解析することで求めてみました。下がそのプログラムです。
#!/usr/bin/perl use strict; use warnings; use LWP::UserAgent; my $ua = LWP::UserAgent->new; $ua->agent('PerlSample/0.1'); $ua->timeout(5); my $addres = "http://d.hatena.ne.jp/s_kanda/archive/"; my @yyyymm = qw/ 200410 200411 200412 200501 200502 200503 200504 200505 200506 200507 200508 200509 200510 200511 200512 200601 200602 200603 200604 200605 200606 200607 200608 200609 200610 /; foreach my $ym (@yyyymm) { print "$ym,"; my $url = $addres.$ym; my $response = $ua->get($url); if ($response->is_success) { $_ = $response->content; my $cnt = s/<ul>/<ul>/gi; $cnt--; print "$cnt,ok\n"; } else { print "0,err\n"; } }
取得した html ソース中にある <ul> タグの数を数えて 1 引いたものが、その月のエントリ日数と一致することが分かったので、それだけの処理をしています。
インターネットから指定したページを取得するところ( LWP::UserAgent モジュール)のプログラムは、
「 まるごとPerl! Vol.1 」
という本で、id:mizuno_takaaki さんが書かれている記事「PerlでWeb APIを使いたおす」の冒頭にちょろっと出てくるサンプルプログラムをそのまま使わせていただきました。(なので、 agent('PerlSample/0.1') のところの意味は分かっていないです。。)
年月のリストを作るところは手抜きしました。
プログラムを実行すると、
$ chmod u+x updcnt.pl $ ./updcnt.pl 200410,12,ok 200411,25,ok 200412,12,ok 200501,1,ok 200502,0,ok 200503,0,ok 200504,0,ok 200505,0,ok 200506,8,ok 200507,9,ok (以下略)
のように結果が得られます。 200506 以降のデータを Windows のメモ帳にコピペして保存し、csv ファイルとして Excel にインポートしてグラフ化したのが上のグラフというわけです。
グラフが出来たことよりも、Perl を使ってこうやれば出来るんじゃないかと思ったことを実現できたことが嬉しい。