#!/usr/bin/perl 

#
# 日本語版AWStats用検索キーワードデコードスクリプト
#				by Ryu Hiyoshi (ryu@mail.ryu.dyn.to)

use Jcode;

$CurrentCacheID = abcdefghijkl;		# googleのcache判定変数ダミー初期値.
$LastCacheID = mnopqrstuvwx;		# googleのcache判定変数ダミー初期値.
 
while(<STDIN>){
	# なぜかgoogleからのアクセスのRefererがよくIPになるので,
	# googleからのアクセスとして認識されるようにホスト名に変換する.
	# IPは, 管理人のサイトのログの実績より推測(^^;
	if (/216\.239\.[0-9]*?\.100/) {
		s/(^.*?\"[^\"]+)(\"[^\"]+)(\".*?216\.239\.[0-9]*?\.100)(.*$)/$1$2"\"http\:\/\/www\.google\.com$4/;
	}
	# googleのキャッシュからのアクセスを、本来に形に戻す.
	if (/http.*search\?q\=cache/){
		# 一連のcacheかどうかをまず判断する.
		/(cache\:)([^\:]+)(\:)/;
		$CurrentCacheID = $2;
		if ($CurrentCacheID ne $LastCacheID) {	# 新規の場合
			$LastCacheID = $2;
			s/cache.*?\+//;		# 普通のgoogleの引数に変換.
			& DecodeEncodedString;
			print;
			print "\n";
		} elsif ($CurrentCacheID eq $LastCacheID) {	# 継続の場合
			s/http.*?google.*?cache\:.*?\://;	# 普通のRefererに戻す.
 			s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("H2", $1)/eg;
			# dyn.toのワイルドカードによる不具合を補正する.
			# Ex. aiueo.ryu.dyn.to => www.ryu.dyn.to
			# 通常は不要のはず. 利用するならホスト名を変更.
			# 不要の場合は以下の2行をコメントアウトし, 
			# "print;""print "\n";"の2行を追加すればいいはず.
			/(^.*?\"[^\"]+)(\"[^\"]+)(\".*?ryu\.dyn\.to)([^\+]+)([^\"]+)(.*$)/;
			print $1, $2, "\"http://www.ryu.dyn.to", $4, $6, "\n";
			# ImageファイルのGETが、その本体となるhtmlのGETより
			# 先に来る場合があるのは御愛敬(^^;
		}
	} elsif (/ryu\.dyn\.to/) {
		# dyn.toのワイルドカードによる不具合を補正する.
		# Ex. aiueo.ryu.dyn.to => www.ryu.dyn.to
		# 通常は不要のはず. 利用するならホスト名を変更.
		# 不要の場合は, このelsif全体を無効にする.
		# よくわからなければ, このままにしておいても問題はない.
		s/http\:\/\/.*?ryu\.dyn\.to/http\:\/\/www\.ryu\.dyn\.to/g;
		print;
        } elsif (/http.*(biglobe|yahoo|goo\.ne\.jp|google|nifty|infoseek|msn|odn|lycos|excite\.co\.jp|naver\.co\.jp|fresheye\.com|tocc\.co\.jp|alltheweb\.com)/){
		& DecodeEncodedString;
 		print;
		print "\n";
 	} else {
 		print;
 	}
}

sub DecodeEncodedString {
	my $stringtodecode = @_;
		chomp;
		s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("H2", $1)/eg;
		Jcode::convert(\$_,euc);
		s/([\x80-\xff][\x80-\xff]|[\x00-\x7f])/($1 eq "\xa1\xa1") ? " " : $1/eg;
		s/\+\|\+/+/g;   #"+|+"を"+"に置換.
		s/\|/+/g;       #"|"がまだあったら"+"に置換.
		jcode(\$_)->tr('０-９', '0-9')->tr('Ａ-Ｚ','A-Z')->tr('ａ-ｚ','a-z')->h2z;
	return;
}
