favicon.icoについて調べていたが,ブラウザによる挙動の違いが定かには分からなかった.少なくとも,IE5系でお気に入りに入れた瞬間にログを残すことがあるらしいというのが分かったぐらい.他のブラウザだと,登録したブックマーク等から飛んだときにアクセスしようとする物もあるようだ.
しょうがないから,とりあえず,見に来たUAごとにカウントすることにした.errorlog_view()でエラー行をハッシュに保存したあとを以下のように変える.
#得られた行を並べ替えて表示
count_robot = Hash.new(0) # robots.txtを探しに来た回数を入れるハッシュ
count_fav = Hash.new(0) # /favicon.icoを探しに来た回数を入れるハッシュ
error.sort.each{|status, value|
print "<h3>" + status.to_s + " " + STATUS[status] +"</h3>\n"
print "<ol>\n"
error_line = error[status]
error_line.sort.each{|count, line|
#アクセスされたファイルによって処理を分ける
request = line.requestURI
case request
when %r|^/MSOffice/cltreq.asp|
when %r|^/_vti_bin/owssvr.dll|
# /MSOffice/cltreq.asp~ や /_vti_bin/owssvr.dll は無視
when "/robots.txt"
count_robot[line.user_agent] += 1
when "/favicon.ico"
count_fav[line.user_agent] += 1
else
print "<li><dl class=\"log\">\n"
print "<dt>Access URI</dt><dd>#{request}</dd>\n"
print "<dt>Datetime</dt><dd>#{line.year}年#{line.month}月#{line.day}日"
print "#{line.hour}時#{line.minute}分#{line.second}秒</dd>\n"
print "<dt>IP Address</dt><dd>#{line.ip}</dd>\n"
print "<dt>Referer</dt><dd>"
case line.referer
when "-"
print "(ダイレクトアクセス)</dd>\n"
else
print "<a href=\"#{line.referer}\">#{line.referer_unencode}</a></dd>\n"
end
print "<dt>User Agent</dt><dd>#{line.user_agent}</dd>\n"
print "</dl><hr>\n"
end
}
print "</ol>\n"
}
#ロボットのアクセス回数を表示
print "<h3>robots.txtへのアクセス</h3>\n"
print "<ul>\n"
count_robot.each{|crawler,count|
print "<li>#{count}回:#{crawler}</li>\n"
}
print "</ul>\n"
#お気に入りアイコンへのアクセス回数を表示
print "<h3>favicon.icoへのアクセス</h3>\n"
print "<ul>\n"
count_fav.each{|ua,count|
print "<li>#{count}回:#{ua}</li>\n"
}
print "</ul>\n"
#フッタ表示
footer_out()
うわ,びびった~.1度でまともに動いたよ.珍しい.
今度はページ内を遷移する様子を表示する部分を作ろうか.