analogの検索文字列デコード

現在やっている仕事では、アクセスログ解析にanalogを利用しています。


サーバーにインストールしてapacheのログを解析し、レポートを出力するアレです。
かなり複雑なカスタマイズもできて良いのですが、
どうにもお客さんに不評なのが、検索語レポートなんですよね。
コレ、日本語についてはURLエンコードされた結果を集計するので
フツーの人が見ても何がナンやら分かりません。
手動でデコードフォームに放り込んで・・・なんてこと、ちょっとスマートではないです。


で、なんとかならんのか、と思って調べてみると・・・
やっぱりありますねぇ。
ネットってほんと、大体のことはどこかに記述がある。
問題はそれを調べきれるか、その時間があるか、ってことだけど。


それは置いておいて。


http://www.inwonder.net/~dayan/pukiwiki/index.php?analog%B4%D8%CF%A2
Graffiti様の「analogurldecode ベータ版その2」が使えそうです。
Perl5とJcode.pmがインストールされていれば利用できます。
Jcode.pmのインストールについてはぐぐって下さい。


で、こちらのスクリプトはファイルを指定して標準出力に吐き出すタイプですね。
おそらくウェブへの出力にもCGIとして使えるのでしょうが、
この辺の仕組み、いまだによく理解していなかったりします・・・orz
で、ちょっと書き換えて、GETの引数で渡されたファイル名の中身を出力するように変更しました。


## 頭のところ
use CGI;

## $data=join('',<>); のところ
$cgi = new CGI;
$fname = $cgi->param('f');
if(-f $fname){
open IN , "<$fname";
$data = join('', );
close IN;
} else {
print "file $fname can not find.\n";
exit;
}
## 一番下 foreach(@xml) の上
print "Content-type: text/html\n\n";


これを logview.cgiで保存。
アップロードして権限設定したのち、logview.cgi?f=xxxx0801.html で呼ぶと、
そのhtmlを読み込んで、検索文字列をデコードして出力してくれます。


コレで解決ヤッホイ!と思ったのですが、別サーバーに導入してみると動かない・・・
error.logには
unknown encoding at (eval 1) line 135
と記録されてる・・・なにやらヨクワカランが、エンコードの周辺がおかしいらしい。


しかたがないので、またぐぐるさんにお任せ。
するとやっぱり在った!すばらしいです。
こういう、つまづきやメモ書き、tipsなどを書いて公開されている方には、本当に頭が下がります。
確実にその1エントリを必要とする人は居ます!がんばってください!


http://ameblo.jp/flyby/
すとぶろ様の2008-02-26の記事ですね。
> 実行時に「unknown encoding at (eval 1) line 135」のエラーが出る場合
というのが在ります。


この記事を参考に修正して・・・完成!


しかし、あれだね。
導入の手間、カスタマイズの手間、集計時のリソース、管理の手間、便利さ、とか考えると、
GoogleAnalytics導入すんのが一番いいような気がしてくるね。
考えたら負けだね。
でも次のプロジェクトからは真剣に考えたいと思います。
携帯対応してないのがネックなんですよね、GoogleAnalyticsは。
最近は対応したのかな。以前評価して以来触ってないんだけど。


また調べてみよ。