Apacheアクセスログと私(favicon.icoへのアクセスを捕まえてみる)

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度でまともに動いたよ.珍しい.

表示結果はこんな感じ

今度はページ内を遷移する様子を表示する部分を作ろうか.

日時: 2004年10月18日 | PC/Web > Ruby |

コメントを投稿

(空欄でもかまいません)

(メールアドレスは管理人に通知されますが,Web上には表示されません)

Powered by Movable Type