#! ruby -Ks
#**********************************************************#
#
# ロリポウェブサーバ ログ解析
#
# 【2006/1/31 更新】
#
#**********************************************************#
#**********#
# 下準備 #
#**********#
require 'shellwords'
require 'cgi'
require 'kconv'
require 'lolipopaccesslog.rb'
# 結果出力用HTMLファイル名
NAME_HTML = 'result.html'
# リクエストファイル名ごとのアクセス数付き検索語句リストのHTMLを生成
def get_wordslist_per_file(files_and_searchwords)
html = "<p><b>検索語句</b></p>\n"
filename = ''
words = ''
cnt = 0
# リクエストファイル名でソート
files_and_searchwords = files_and_searchwords.sort { |a,b| a[0]<=>b[0] }
files_and_searchwords.each do |record|
if record[0] != filename # 新しいリクエストファイル名
if words != '' # 既に検索語句のカウントが始まっていれば
html += " #{cnt}: " + words + "<br>\n"
words = ''
cnt = 0
end
filename = record[0]
html += ' ' + record[0] + "<br>\n"
end
if record[1] != words # 新しい検索語句
if words != '' # 既に検索語句のカウントが始まっていれば
html += " #{cnt}: " + words + "<br>\n"
cnt = 0
end
words = record[1]
end
cnt += 1
end
if words != '' # 1度でも検索語句のカウントが行われていれば
html += " #{cnt}: " + words + "<br>\n"
end
html
end
# 結果出力用HTML
$html = "<html><body>\n<p><font size=+1><b>【【 ロリポウェブサーバ ログ解析結果 】】</b></font></p>\n"
ARGV.sort!
$html += "<p>#{ARGV[0]} 〜 #{ARGV.last}</p>\n" # 処理対象期間
#****************#
# ログ読み込み #
#****************#
log = LolipopAccessLog.new(ARGF.readlines())
#**************************#
# ユニークホスト数を取得 #
#**************************#
$html += "<p><b>【 ユニークホスト数 】</b>: #{log.count_uniqhost}</p>\n"
#************************#
# 検索エンジン関連統計 #
#************************#
$html += "<p><b>【 検索エンジン関連 】</b></p>\n"
# Google #
$html += "<p><b>[ Google ]</b> 総アクセス数: #{log.count_access_from_se(LolipopAccessLog::SE_GGL)}"
$html += " / ユニークホスト: #{log.count_uniqhost_from_se(LolipopAccessLog::SE_GGL)}</p>\n"
# レコードごとのリクエストファイル名と検索語句を抽出
files_and_searchwords = log.get_files_and_searchwords(LolipopAccessLog::SE_GGL)
# リクエストファイル名ごとのアクセス数付き検索語句リストのHTMLを生成
$html += get_wordslist_per_file(files_and_searchwords)
# Yahoo #
$html += "<p><b>[ Yahoo ]</b> 総アクセス数: #{log.count_access_from_se(LolipopAccessLog::SE_YAH)}"
$html += " / ユニークホスト: #{log.count_uniqhost_from_se(LolipopAccessLog::SE_YAH)}</p>\n"
# レコードごとのリクエストファイル名と検索語句を抽出
files_and_searchwords = log.get_files_and_searchwords(LolipopAccessLog::SE_YAH)
# リクエストファイル名ごとのアクセス数付き検索語句リストのHTMLを生成
$html += get_wordslist_per_file(files_and_searchwords)
# msn #
$html += "<p><b>[ msn ]</b> 総アクセス数: #{log.count_access_from_se(LolipopAccessLog::SE_MSN)}"
$html += " / ユニークホスト: #{log.count_uniqhost_from_se(LolipopAccessLog::SE_MSN)}</p>\n"
# レコードごとのリクエストファイル名と検索語句を抽出
files_and_searchwords = log.get_files_and_searchwords(LolipopAccessLog::SE_MSN)
# リクエストファイル名ごとのアクセス数付き検索語句リストのHTMLを生成
$html += get_wordslist_per_file(files_and_searchwords)
#****************************************************#
# HTMLデータを完成させて、保存して、ブラウザで開く #
#****************************************************#
$html += "</body></html>"
File.open(NAME_HTML,"w") do |f|
f.puts($html)
end
exec("start #{NAME_HTML}")
exit
|