#!/usr/local/bin/perl # アクセスログを読み込んでリファラに含まれる検索語句を抽出しSJISに変換する。 use Jcode; $data = './log.csv'; $| = 1; print qq(Content-type: text/html\n\n); print qq(\n); print qq(\n); print qq(\n); print qq(\n); print qq(日記ページアクセスリンク\n); print qq(\n); print qq(\n); open DATA, "$data"; while () { # 除外処理(内部移動は無視) next unless /http/; next if /www7.big.or.jp\/~oct\//; next if /www7.big.or.jp\/%7Eoct\//; next if /chat.cgi/; ($day,$hour,$url) = split /,/; print qq($day 日
) if $day ne $day_last; $day_last = $day; # アンテナ経由で開かれたページからのリンクの場合 if ($url =~ /^http:\/\/.*?\?[0-9]+$/) { print qq($url
\n); # 検索サイトからの場合 } elsif ($url =~ /^(http:\/\/.*?)\?(.*)/) { $url2 = $1; $query_ori = $2; $url2 =~ s/^(http:\/\/[^\/]*)\/.*$/$1/; # 検索語句の抽出 $query = &search_word_detect($url2, $query_ori); # 検索サイトを判別できなかった場合 if ($query eq '') { # 文字コードをSJISに $url3 = $url; $url3 =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $code = getcode($url3); $url3 = Jcode::convert($url3, "sjis", $code); # 出力 $url =~ s/&/&/g; $url3 =~ s/&/&/g; print qq($url3
\n); # 検索サイトを判別できた場合 } else { # 文字コードをSJISに $query =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $code = getcode($query); $query = Jcode::convert($query, "sjis", $code); $query =~ s/\+/ /g; # 出力 $url =~ s/&/&/g; print qq(検索キーワード:$query ($url2)
\n); } # 普通のリンクの場合 } else { print qq($url
\n); } } print qq(\n); exit; # 検索サイト別Query抽出関数 sub search_word_detect { my $url = $_[0]; my $query = $_[1]; # fresheyeの場合 if ($url =~ /fresheye\./) { if ($query =~ /kw=(.*?)(&|$)/) { $query = $1; } # infoseekの場合 } elsif ($url =~ /infoseek\./) { # 絞り込み検索をした場合 if ($query =~ /oq=(.*?)&.*qt=(.*?)(&|$)/) { $query = $1 . ' ' . $2; } elsif ($query =~ /qt=(.*?)(&|$)/) { $query = $1; } # $url =~ s/Titles$//; # exciteの場合 } elsif ($url =~ /excite\./) { if ($query =~ /FI_1=(.*?)(&|$)/) { $query = $1; } elsif ($query =~ /search=(.*?)(&|$)/) { $query = $1; } elsif ($query =~ /s=(.*?)(&|$)/) { $query = $1; } # lycosの場合 } elsif ($url =~ /lycos\./) { if ($query =~ /query=(.*?)(&|$)/) { $query = $1; } elsif ($query =~ /q=(.*?)(&|$)/) { $query = $1; } # yahoo内googleの場合 } elsif ($url =~ /google\.yahoo/) { if ($query =~ /p=(.*?)(&|$)/) { $query = $1; } # googleの場合 } elsif ($url =~ /google\./) { if ($query =~ /as_q=(.*?)(&|$)/) { $query = $1 if $1; } if ($query =~ /as_epq=(.*?)(&|$)/) { $query = $1 if $1; } if ($query =~ /q=(.*?)(&|$)/) { $query = $1 if $1; } # gooの場合 } elsif ($url =~ /goo\./) { if ($query =~ /MT=(.*?)(&|$)/) { $query = $1; } # これどこよ? } elsif ($url =~ /para\./) { if ($query =~ /QueryString=(.*?)(&|$)/i) { $query = $1; } elsif ($query =~ /OLDQUERYDISPLAY=(.*?)(&|$)/) { $query = $1; $query =~ s/%25/%/g; } # MSNの場合 } elsif ($url =~ /msn\./) { if ($query =~ /q=(.*?)(&|$)/i) { $query = $1; } # biglobeの場合 } elsif ($url =~ /biglobe\./) { if ($query =~ /q=(.*?)(&|$)/i) { $query = $1; } # NIFTYの場合 } elsif ($url =~ /nifty\./) { if ($query =~ /TEXT=(.*?)(&|$)/i) { $query = $1; } # althewebの場合 } elsif ($url =~ /alltheweb\./) { if ($query =~ /q=(.*?)(&|$)/i) { $query = $1; } # Dionの場合 } elsif ($url =~ /dion\./) { if ($query =~ /QueryString=(.*?)(&|$)/i) { $query = $1; } # altavistaの場合 } elsif ($url =~ /altavista\./) { if ($query =~ /q=(.*?)(&|$)/i) { $query = $1; } # ODNの場合 } elsif ($url =~ /odn\./) { if ($query =~ /QueryString=(.*?)(&|$)/i) { $query = $1; } # 未登録検索サイトの場合 } else { $query = ''; } return $query; }