どのページが閲覧されたかを知る(3)
アクセスログには、HTMLファイルに関する情報だけではなく、画像ファイル、スタイルファイル、javascriptファイル、その他ファイルなどへのアクセス情報も記述されています。 ページビューを調べるときには、画像ファイルなどに関する閲覧情報はあまり必要ではありません。 ここでは、必要な閲覧情報だけを抜き出してページビュー値を取得する方法を説明したいと思います。
HTMLファイルだけに注目する
ここでは、HTMLファイルとindexだけに注目する方法を説明したいと思います。 URL部分の最後が「.html」で終わるものはHTMLファイルを表しています。 また、index.htmlは省略してURLを「/」で終わらせる事も出来ます。 ここでは、これら二つの条件を満たすURLの時だけページビュー値を増加させます。
以下に、perlスクリプトのサンプルを示します。 前述した例との違い部分は強調してある部分です。
#!/usr/bin/perl
# (注意)/usr/bin/perlの部分は必要に応じて変更してください。
# (注意)"access_log.txt"は解析するアクセスログのファイル名に
# 変更してください。
open(LOGFILE, "access_log.txt") || die $!;
# 一行ずつアクセスログファイルを読みます。
while (<LOGFILE>) {
# perlのパターンマッチを行っています。
# $1,$2,...$9にマッチした結果が入ります。
/^(.*) (.*) (.*) \[(.*)\] "(.*)" (.*) (.*) "(.*)" "(.*)"/;
# HTTP STATUSが200でないものは除外します
# 200はOK(成功)を示します
$httpstatus = $6;
if ($httpstatus != 200) {
# 以後の処理は行わず、もう一度while文の最初に行きます
next;
}
# パターンマッチの結果を変数に代入しています。
$httprequest = $5;
# スペースで区切ります
@cols = split(" ", $httprequest);
# とりあえず、今回のサンプルではGETだけ気にします
# cgiに関して調べたいときなどには必要に応じてPOSTなどにも対応して下さい
if ($cols[0] eq "GET") {
# 2つ目のデータにリクエストされたURLが入っています
$url = $cols[1];
if ($url =~ /\.html$/ || $url =~ /\/$/) {
# URLがHTMLファイルやindexの場合だけ連想配列の値を増やします
$urlcount{$url}++;
}
}
}
close(FILE);
# 連想配列に覚えさせたページビュー数を表示します
# $keyには、URLが入っています
# $valueには、ページビュー数が入っています
while (($key, $value) = each(%urlcount)) {
print "$value\t$key\n";
}
exit;
ここでは、HTMLとindexだけに注目しましたが、PHPやCGIや画像ファイルなどに注目したい場合もあると思います。 また、HTMLの拡張子が「.html」ではなく「.htm」である場合もあると思います。 そのようなときには、必要に応じてif文の中に条件を追加してください。