AccessLog | サンプルソース | |
---|---|---|
Webサーバーが残すログを正規表現で解析して、検索エンジンGoogleのクローラーであるGooglebotからのアクセスを抽出します。Googleがきちんと『愛のJava256本ノック』を収集してるかチェックしてやる! |
AccessLog.java |
/** * 愛のJava256本ノック for Java 5.0 * Javaサンプルソース ver0.2C "AccessLog" * AccessLog.java 「正規表現を使いアクセスログからGooglebotのアクセスを検出する」 * * 2005/09/23 制作:安永ノリカズ * * 【コンパイル&実行方法】 * >javac AccessLog.java * >java AccessLog * 【キーワード】 * 正規表現(regular expression), Googlebot, クローラー(crawler), * HTTPステータスコード(status code) * * 【試してみよう】 * Googlebot以外のロボットのアクセスを検出する。 * 外部リンク(www.groovy-number.com以外)から参照されたアクセスを検出する。 */ import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.lang.String; import java.lang.System; import java.util.regex.Matcher; import java.util.regex.Pattern; public class AccessLog { public static void main(String[] A00) { String L00 = "access_log.txt"; try { BufferedReader L01 = new BufferedReader(new FileReader(L00)); Pattern L02 = Pattern.compile(".+ .+ .+ \\[(.+)\\] \"(.+)\" .+ .+ \".+\" \"(.+)\""); String L03; while( (L03 = L01.readLine()) != null ) { Matcher L04 = L02.matcher(L03); if (L04.matches()) { if (L04.group(3).contains("Googlebot")) { System.out.println("time = " + L04.group(1)); System.out.println("http = " + L04.group(2)); System.out.println("agent = " + L04.group(3)); System.out.println(); } } else { System.out.println("解析できない行がありました:" + L03); } } L01.close(); } catch(IOException L05) { System.out.println(L00 + "を読み込み中に例外が発生しました。"); } } } /* ■ クラスの外でちょっと一言 ■ Webサーバーのアクセスログには、いつ、どのような形でページがアクセスされ たのか、その記録が残っています。誰かがページを閲覧した場合以外にも、検索 エンジンが行うページの自動収集の記録などもログに残ります。 Googleはページの収集にGooglebotというクローラー(ロボットやスパイダーと も呼ばれる)を使用しており、アクセスログにおいては、ブラウザーの名前が残 る部分に"Googlebot"という文字を含んだ名前を残します。今回はそのデータの みを抽出してみました。 このサンプルを読み解く前に、付属のaccess_log.txtを開いて、アクセスログが どんなものかを確認しておいてください。ログの形式はスペース区切りで、「ホ スト名 識別情報 認証ユーザー 日時 リクエスト ステータス 送信バイト数 参 照元 ブラウザー名」となってます。 正規表現の中にに"()"がありますが、これはパターンをマッチさせた後、その部 分を抜き出すためのものです。例えば、Matcherのgroup(3)というメソッドは「3 番目の()」つまりブラウザー名を取得することになります。 */