2009/07/30 からのアクセス回数 8436
自分のブログページに対し、どのようなことを知りたいと思ってアクセスしてきて いるのかを調べるために、 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();
この記事は、
皆様のご意見、ご希望をお待ちしております。