Web・ネットワークへ戻る | サンプル集目次へ戻る

実行結果
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
番目の()」つまりブラウザー名を取得することになります。
 */
↑ 先頭へ戻る

安永ノリカズのゲーム制作&Javaサンプル集 / Java初心者用サンプル集『愛のJava256本ノック』