- 追加された行はこの色です。
- 削除された行はこの色です。
[[FrontPage]]
2009/07/30 からのアクセス回数 &counter;
#contents
** アクセスログ解析 [#m77c65e1]
自分のブログページに対し、どのようなことを知りたいと思ってアクセスしてきて
いるのかを調べるために、
apacheのアクセスログの内、Googleの検索経由でアクセスされたものを抽出します。
*** アクセスログのフィールド切り [#ma171ef7]
アクセスログから、
- アクセス時刻
- アクセスページのURL
- Googleの検索文字列
を取り出すことにします。
この解析は面倒だと思っていたら、以下のURLで正規表現を使って簡単に切り出せることが分かりました。
http://www.groovy-number.com/java/sample/AccessLog.html
切り出した、フォールドからブログのタイトルと検索文字列を取り出します。
- ブログはPukiWikiを使っているので、必ずindex.phpがGETコマンドに入っている
- Googleの検索文字列は、q=の後に続く
ことを考慮して、以下のように処理しました。
#pre{{
PrintWriter writer = new PrintWriter(new OutputStreamWriter(System.out));
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(INPUT_FILE)));
Pattern pattern = Pattern.compile(".+ .+ .+ \\[(.+) \\+0900\\] \"([^\"]+)\" .+ .+ \"([^\"]+)\" \"[^\"]+\"");
String line = null;
while ((line = reader.readLine()) != null) {
Matcher matcher = pattern.matcher(line);
if (matcher.matches()) {
String time = matcher.group(1);
String url = URLDecoder.decode(matcher.group(2), "UTF-8");
String google = matcher.group(3);
String query=null;
StringTokenizer token = new StringTokenizer(google, "?&");
while (token.hasMoreTokens()) {
String str = token.nextToken();
if (str.indexOf("q=") == 0) {
query = URLDecoder.decode(str, "UTF-8");
query = query.replaceFirst("q=", "");
}
}
url = url.replaceFirst("GET .*\\/index.php\\?", "");
url = url.replaceFirst(" HTTP\\/1..", "");
url = url.replaceFirst("plugin=smartdoc&page=", "");
writer.printf("%s,", time);
writer.printf("\"%s\",", url);
if (query != null)
writer.printf("\"%s\"", query);
writer.println();
}
else {
System.out.println("解析できない行がありました:" + line);
}
}
reader.close();
writer.close();
}}
** コメント [#ndc7f3ba]
この記事は、
#vote(おもしろかった,そうでもない,わかりずらい)
皆様のご意見、ご希望をお待ちしております。
#comment_kcaptcha