2009/07/30 からのアクセス回数 8536
自分のブログページに対し、どのようなことを知りたいと思ってアクセスしてきて いるのかを調べるために、 apacheのアクセスログの内、Googleの検索経由でアクセスされたものを抽出します。
アクセスログから、
を取り出すことにします。
この解析は面倒だと思っていたら、以下のURLで正規表現を使って簡単に切り出せることが分かりました。 http://www.groovy-number.com/java/sample/AccessLog.html
切り出した、フォールドからブログのタイトルと検索文字列を取り出します。
ことを考慮して、以下のように処理しました。
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();
この記事は、
皆様のご意見、ご希望をお待ちしております。