スクリプト


URLデコード

暫定版。
URLデコードした状態で解析すると、どうもURL長いよ警告が出ているらしく
Wikiなどの長いURLの解析をスキップしている様子。
そこで、UTF-8以外の検索文字列を(今のところキメ打ちで)
UTF-8に直した上でURLエンコードし、再度WebalizerにURLデコードさせる。
ついでにごにょごにょと。

#!/usr/local/bin/php

<?php

$infile  = fopen('/tmp/access_log',"r");
$outfile = fopen('/tmp/access_log.tmp',"w");

//検索文字列(Webalizer定義)
//Shift_JISで化けた文字用にチルダ入れる
$query= '/(query|q|keyword|p|MT|search|qr|text)=([\w\d%+\-\.\~]*)/';
//リファラ
$ref  = '/\[.*?\] ".*?" [0-9]*? [0-9]*? "(.*?)"/';
//クエリ内ハッシュ
$hash = '/[\?&](q=.*#)/';
//Googleキャッシュ
$cache = '/[\?&]q=(cache:[\w\d\-]{12}:.*?\+)/';

if( $infile ) {
    while( !feof( $infile ) ) {
        $line = fgets( $infile );
        if ( !empty($line) ) {
            //GoogleSuggest機能?のハッシュ文字対策
            if( preg_match($hash, $line, $hash_matches) != 0 ) {
                $line = str_replace($hash_matches[1], '', $line);
            }
            //Googleキャッシュの検索文字列
           if( preg_match($cache, $line, $cache_matches) != 0) {
               $line = str_replace($cache_matches[1], '', $line);
            }
            //EzWebのSJISのURLエンコードをUTF-8のURLエンコードに変換
            if( strpos($line, '//ezsch.ezweb.ne.jp/search/') !== FALSE ) {
                preg_match($ref, $line, $ref_matches);
                preg_match($query, $ref_matches[1], $matches);
                $q_str = urlencode( mb_convert_encoding( urldecode( $matches[2] ), "utf-8", "auto"));
                $line = str_replace($matches[2], $q_str, $line);
            }
            //InputEncodeがUTF-8以外のURLエンコード文字列をUTF-8のURLエンコードに変換
            //Googleのケータイ用とLunascapeとgoo用。他にあれば追加
            if( stripos($line, 'IE=Shift_JIS' ) !== FALSE ||
                stripos($line, 'IE=SJIS' )      !== FALSE ||
                stripos($line, 'IE=EUC-JP' )    !== FALSE  ) {
                preg_match($ref, $line, $ref_matches);
                preg_match( $query, $ref_matches[1], $matches );
                $q_str = urlencode( mb_convert_encoding( urldecode( $matches[2] ), "utf-8", "auto"));
                $line = str_replace($matches[2], $q_str, $line);
            }
//            fwrite($outfile, mb_convert_encoding( urldecode( $line ), "utf-8", "auto"));
//            print ( mb_convert_encoding( urldecode( $line ), "utf-8", "auto" ));
            //「%」が二重にエンコードされてる謎を直す
            $line = preg_replace('/%25([0-9A-F]{2})/', "%$1", $line);
            //全角空白を半角(+)に直す
            $line = str_replace('%E3%80%80', '+', $line);
//            print $line;
            fwrite($outfile, $line);
        }
    }
}

?>

GeoIP DB更新

毎月初に更新されるので対応

#!/bin/bash

cd /tmp
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
if [ $? == '0' ]; then
gunzip GeoIP.dat.gz
fi
mv -f GeoIP.dat /usr/local/share/GeoIP/

crontabに登録

0 0 3 * * sh /usr/local/src/GeoIPDBUpdate.sh
マージン取って毎月3日に更新してみる

URLデコード(旧)

暫定版
URLエンコードされている検索文字列を
GoogleCacheでの検索文字列も拾って
UTF-8に変換する
変換したあとにwebalizerで解析する

#!/usr/local/bin/php

<?php

$infile = fopen('/tmp/access_log',"r");
$outfile = fopen('/tmp/access_log.tmp',"w");
if( $infile ) {
    while( !feof( $infile ) ) {
        $line = fgets( $infile );
        if ( !empty($line) ) {
            if( strpos($line,'search?q=cache:') ) {
                $line = preg_replace('/cache:.+?\+/','',$line);
            };
            fwrite($outfile, mb_convert_encoding( urldecode( $line ), "utf-8",  "auto"));
//            print ( mb_convert_encoding( urldecode( $line ), "utf-8", "auto"  ));
        }
    }
}

?>

トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2011-10-03 (月) 09:49:39 (2395d)