INFOINFO
MAILMAIL

2007年 9月 9日(日)

* 検索キーワードの抽出    [  blog全般 | Linux | PHP  ]

 ってなわけで、ApacheのLogから検索キーワードを抽出するプログラムを書いてみたり。まぁ、キモの部分はこんな感じで。

<?php
    $pattern = '!^(.+) (.+) (.+) \[(.+)\] "([^ ]+) ([^ ]+) (.*)" (.+) (.+) "http://www\.google\.(?:com|co\.jp)/search\?(.+)" "(.+)"!';

    if ($fs = fopen($argv[1], "r")) {
        while (!feof($fs)) {
            $buffer = fgets($fs, 4096);
            if (preg_match($pattern, $buffer, $matches)) {
                $query = $matches[10];

                if (preg_match('/(?:&|\?)q=([^&]+)/', $query, $matches)) {
                    print mb_convert_encoding(urldecode($matches[1]), mb_internal_encoding(), "auto") . "\n";
                }
            }
        }
    }
?>

 ま、とくに難しいことはやってません。最後のキーワード抽出時にmb_internal_encoding()を使ってるんで、WindowsでもLinuxでもそのまま使えるはず。一応、Vine 4.1とWindows Vista上のPHP5では動作は確認してます。あ、上記のソースをhoge.phpとして格納してから、php hoge.php access_log のようにログを食わせてください。
(キーワードの抽出に失敗する場合があったので、2つ目のpreg_matchのパラメータを修正 - 9/10)

 んで、これをベースにgoogle以外のサイトに対応させるとかいろいろ手を加えて、access_logから1日に1度、データを抽出するようにして、そのデータを読み込んでWebページで表示させるようにしてみたり。まぁ、自分で眺めるだけなんで、とくにきれいに作る必要もないから、かなり手抜きだけど(笑)。ちなみに、画像でモザイクがかかってるのは、検索元のIPアドレスが表示されてるところ。
 しかし、c(カテゴリ一覧)とかm(月別)のページでヒットしてるのは使えないだろうなぁ(^^;)。早いとこ、除外されるといいんだけどねぇ。

Posted by “Lupin” on 2007/09/09 17:40:33
コメント
コメントはありません。
●コメント投稿
このエントリーにはコメント投稿できません。