わさっきhb

大学(教育研究)とか ,親馬鹿とか,和歌山とか,とか,とか.

hateref.rb: t.coからの参照先を集計する

はてなダイアリーアクセスログを読んで,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の引数に与えることで解決を図りました.
ついでにいくつかファイルをアップロードしました.

*1:Sign inを忘れてコミットしたら,URLに「anonymous」が入りました.もはや削除できそうにないし,自分の名前にする必要性もないし,このままにします.