webalizer を win32 で 日本語 で

webalizer を日本語化ってサイトは、PC-UNIX 向けには多く存在するのだけど、 win32 で日本語化して使ってる人っていないの? けっこうがんばって検索してみたのだけど 見つかりませんでした。 なので仕方なく自分で build してみた結果を報告してみたり。(2002/10/17)
「google 検索文字列の UTF-8 エンコードに対抗する」追加しました。(2002/12/01)
「google 検索文字列の UTF-8 エンコードに対抗する」変更しました。(2003/10/04)

やり方はいいから、モノをよこせ

以下の方法でビルドしたモノです webalizer.zip
http://www.mrunix.net/webalizer/ にある win32 用バイナリを拾ってきて溶かして webalizer.exe を上記のと入れ替えたら 日本語で 使えると思います。

やりかた

cygwin を入れる

いろんな所に説明サイトがあるんで、それに従ってください。 開発環境は必須です。

IJG JPEG を入れる

バージョン 6b 以降の IJG JPEG が必要。(次の手順の GD を入れるために必要) ftp://ftp.uu.net/graphics/jpeg/ あたりから jpegsrc.v6b.tar.gz を拾ってきて溶かして ./configure ; make ; make install でOK。

GD を入れる

http://www.boutell.com/gd/ あたりから .tar.gz を拾ってきて溶かして make すれば出来上がり。make install するまえに Makefile 中の

sh ./install-item 755 pngtogd $(INSTALL_BIN)/pngtogd
sh ./install-item 755 pngtogd2 $(INSTALL_BIN)/pngtogd2
sh ./install-item 755 gdtopng $(INSTALL_BIN)/gdtopng
sh ./install-item 755 gd2topng $(INSTALL_BIN)/gd2topng
sh ./install-item 755 gd2copypal $(INSTALL_BIN)/gd2copypal
sh ./install-item 755 gdparttopng $(INSTALL_BIN)/gdparttopng
sh ./install-item 755 webpng $(INSTALL_BIN)/webpng

というところを以下のように変更

sh ./install-item 755 pngtogd.exe $(INSTALL_BIN)/pngtogd.exe
sh ./install-item 755 pngtogd2.exe $(INSTALL_BIN)/pngtogd2.exe
sh ./install-item 755 gdtopng.exe $(INSTALL_BIN)/gdtopng.exe
sh ./install-item 755 gd2topng.exe $(INSTALL_BIN)/gd2topng.exe
sh ./install-item 755 gd2copypal.exe $(INSTALL_BIN)/gd2copypal.exe
sh ./install-item 755 gdparttopng.exe $(INSTALL_BIN)/gdparttopng.exe
sh ./install-item 755 webpng.exe $(INSTALL_BIN)/webpng.exe

という感じで .exe をつけてあげて、make install で OK。
( この作業時は gd-1.8.4.tar.gz を使用しました )

webalizer を入れる

http://www.mrunix.net/webalizer/ あたりから .tar.gz を拾ってきて溶かして ./configure --with-language=japanese ; make ; make install でオシマイ。
( この作業時は webalizer-2.01-10-src.tgz を使用しました )

google 検索文字列の UTF-8 エンコードに対抗する

検索文字列ランキングが日本語に対応し切れてなくて、そのままではきちんと日本語で表示されません。 webalizer 内部に手を入れるのは面倒なので、ログを webalizer に渡す前に 適当なフィルタで日本語(EUC-JP)にしてあげます。

ちょうど ActivePerl 5.8 から、文字コード周りを操作するモノ (Encode.pm) が出てきたので、それを使います。 まず ActivePerl 5.8 を入れてから、PPM で install Encode すると Encode.pm 一式が導入されます。

この Encode.pm を使って、%E3%82%BD%E3%83%BC… みたいなのに対応します。 また、URL に直接日本語を入れちゃって \x8c\x9f\x8d\xf5… みたいなのも、どうにかします。 思いつきで作ったコードが以下のような感じです。エラー処理とか全然やってません。

#!/usr/bin/perl
use Encode;

while(<>){
   $s = $_;
   if(/UTF-8/){
     $s =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/egi;
     $s = encode('euc-jp',decode('utf8',$s));
   }elsif($s =~ s/\\x([0-9a-fA-F]{2})/pack("C",hex($1))/egi){
     $s = encode('euc-jp',decode('shiftjis',$s));
   }
   print $s;
}

↑より↓の方が良いかも。 まだ Encode.pm の自動判別が弱いような気がします。 Encode.pm のかわりに Jcode.pm の準備が必要

#!/usr/bin/perl
use Jcode;

while(<>){
   $_ =~ s/(%|\\x)([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($2))/eg;
   Jcode::convert(\$_,euc);
   print $_;
}

こんな感じのスクリプトで

$ cat access.log | perl urlfilter.pl | webalizer

といった感じで、ログ中の url encode された文字列を decode (euc-jp) してから webalizer に渡します。

Moriya / moriya@s1.xrea.com