はてなダイアリーのアクセスログを読んで,t.coから日記のどこにアクセスしているかを知るツールhateref.rbを作成しました.コードはGist*1に置いています.
自分のブログの状況は,http://d.hatena.ne.jp/takehikom/files/hateref.txtより誰でも読めるようにしました.全部で431項目(431種類の「http://t.co/…」)があります.先頭5行は次のとおり.
http://t.co/00fsTiB1,http://d.hatena.ne.jp/takehikom/20120501/1335815960,2012-05-07 19:18:50 http://t.co/02qqx5IZ,http://d.hatena.ne.jp/takehikom/20111203/1322857322,2011-12-06 07:34:05 http://t.co/0595YYGP,http://d.hatena.ne.jp/takehikom/20130204/1359989997,2013-02-02 21:34:06 http://t.co/06dLCbgr,http://d.hatena.ne.jp/takehikom/20120729/1343487600,2012-07-28 01:35:41 http://t.co/08Pgk5Za,http://d.hatena.ne.jp/takehikom/touch/20130204/1359989997,2013-02-01 20:17:46
CSV (comma separated value)の形式で,各行はt.coのURL,当ブログのURL,最初の訪問日時からなります.
Rubyスクリプトに関して,今回は組み込みライブラリのCSVを使った事情で,Ruby 1.9以降の対応となります.
出力を得るには,このRubyスクリプトのほか,はてなダイアリーのアクセスログ(CSV形式)も必要になります.CSVファイルはgzipで圧縮していてもかまいません.
今回は,この「.csv.gz」対応で,少し時間を取られました.というのも,gzip圧縮されたファイルを開いて読み出すには,
command_pre = (/\.gz$/ =~ filename) ? "|zcat " : "" open(command_pre + filename) do |f_in| ... end
とすればいいのですが(実際,hateref.rbにもそのように書いています),CSV.openでは,パイプを含むような文字列を,第1引数に与えると,うまく動作しませんでした.これですが,Kernel#openで開いてから,中身をreadメソッドで読み出し,それをCSV.newの引数に与えることで解決を図りました.
ついでにいくつかファイルをアップロードしました.
- http://d.hatena.ne.jp/takehikom/files/takehikom_title.txt: 当ブログの記事URL (2,876項目)
- http://d.hatena.ne.jp/takehikom/files/takehikoMultiply_title.txt: サブアカのブログの記事URL (88項目)
- http://d.hatena.ne.jp/takehikom/files/OoM.pptx: 「5×3」「OoM」カテゴリーの記事のため作成したいくつかの画像のオリジナル.CC BY-SA 2.1 JPにしています.