40.Linuxのコマンドから行うURLエンコード、URLデコード
この記事のノリがかなり好きなので記録しておく。
が、そんなことのために書いているわけではない。ログを解析ソフトで解析するとき、サーチエンジンで検索したワードをリファラから抽出するのだが、Webalizer みたいに歴史ある解析ソフトを使うと文字化けしてしまう。
そこで、よく行われるのが Perl の Jcode モジュールを使う方法。実案件でもお世話になったことがある。
Webalizerで検索語の文字化けを解消
自分が使う場合は、引数からファイル名を取るのではなく、標準入力に突っ込むのが好きかも。
ただ、この方法だと Jcode を導入しなければならない。借り物のサーバだと面倒だったりする。そもそも convert.pl 的なものを置くのが面倒。ってのは言い過ぎだな。でも、面倒は面倒。
で、標準的なコマンドの組み合わせでできないかと探していたら出てきたのが最初に書いたページ。これをヒントに、URL エンコードされたアクセスログを、Webalizer が動作している EUC-JP に変換できないかと考えたのです。
というわけで、convert.pl の代わりに
tr %= =% | nkf -emQ | tr =% %=
をしてみた。うん、なかなかいい感じ。でも、よく考えたら nkf で変換した結果として = や % が出てくると入れ替わっちゃうんだよね。うーん、実案件で使えるレベルではないな。
とまぁ、よく考えればやる前にわかる残念な事実に気づきつつ、それぞれを Webalizer で処理してみた。うーん、どちらかというと nkf と tr で変換したほうが優秀だ。Perl と Jcode の方は短い文字列に弱いね。
で、結局どっちがいいんだって話なんだけど、まぁ、作れば?ってことで。たぶん Jcode よりも優秀な変換メソッドがあるんでしょう。
しかし作るのも面倒なのでモダンなログ解析ツールで処理してみた。使ったのは visitors というやつ。
Visitors – fast web log analyzer
クリックストリームを Graphviz でグラフ化するのが好き。
この visitors で処理してみたら、検索文字列の文字化けは全くないね。うん。変換の必要がない。素晴らしいことだ。処理対象は Google だけだけど。
とどのつまり、新しいソフトを使おうってことか。Webalizer はシンプルかつ高機能で好きなんだけど、時代に取り残されたのか・・・。