#!/usr/bin/perl
# nlday.cgi ver.0.4a(指定日の検索キーワードを見るスクリプト)2004年3月24日版
# 配布場所:http://homepage3.nifty.com/cinema1987/
#NMZ.slogのパス
$logfile = "./NMZ.slog";
#namazu.cgiのURL
$namazu = "http://foo.bar.ne.jp/~hoge/namazu/namazu.cgi";
#このスクリプトの名前
$script = "nlday.cgi";
#------設定終了----------------------------------------------------------------------------
open (LOG, "$logfile") || &error("NMZ.slogがありません。");
@lines = ;
close(LOG);
&decode;
$myear = $FORM{'myear'};
$mmonth = $FORM{'mmonth'};
$mday = $FORM{'mday'};
$length = length $myear;
$count = 0;
if(($myear eq "") || ($mmonth eq "") || ($mday eq "")){
($year, $month, $day) = (localtime(time-24*60*60))[5,4,3];
$year = $year + 1900;
}else{
if(($myear =~ /\D/) || ($mmonth =~ /\D/) ||($mday =~ /\D/)){
&error("半角数字を入力してください。");
}elsif(($myear < 1997) || ($length < 4)){
&error("年指定に誤りがあります。");
}
$year = $myear;
$month = $mmonth;
if($month > 12 || $month < 1){
&error("月指定に誤りがあります。");}
$month = $month -1;
$day = $mday;
&leap;
if(($month == 3 || $month == 5 || $month == 8 || $month == 10) && ($day > 30)){
&error("日指定に誤りがあります。");}
elsif(($month == 0 || $month == 2 || $month == 4 || $month == 6 ||
$month == 7 || $month == 9 || $month == 11) && ($day > 31)){
&error("日指定に誤りがあります。");}
elsif($month == 1 && $day > $month_days){
&error("日指定に誤りがあります。");}
}
@month_en = (Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec);
$mymonth = $month_en[$month];
$month = $month + 1;
if($day==1 || $day == 2 || $day==3 ||$day==4 || $day==5 || $day==6 || $day==7 || $day==8 || $day==9){
$day = " " . $day;}
@yesterday = ($mymonth, $day);
#月日でgrepする
@word = grep/@yesterday/,@lines;
print "Content-type: text/html\n\n";
print <<"EOF";
検索キーワードと検索回数
$year年$month月$day日の検索キーワード
検索キーワードを見たい日の年月日を入力してください。
2002年1月1日なら2002と1と1です。
EOL
sub decode {
if ($ENV{'REQUEST_METHOD'} eq "POST"){
if ($ENV{'CONTENT_LENGTH'} > 100) {
&error ("フォーム入力文字列のサイズが大きすぎます。");
}
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
} else {
$buffer = $ENV{QUERY_STRING};
}
@pairs = split(/&/,$buffer);
foreach (@pairs) {
($name, $value) = split(/=/, $_);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/</g; #htmlタグを禁止する
$value =~ s/>/>/g; #htmlタグを禁止する
$value =~ s/\r//g; #改行コードの\rを消去
$FORM{$name} = $value;
}
}
sub logcount{
foreach $data (@word) {
chomp($data);
($key,$hit,$ip,$date) = split(/\t/,$data);
undef $hit; undef $ip;
%key_date = ($date,$key);
#$dateを別の配列に入れる
@date = ($date);
#@dateを$yearでgrepする
@date = grep/$year/,@date;
#念のためにもう一度、月日でgrep
@date = grep/@yesterday/,@date;
#検索回数を数える
foreach $date2 (@date){
$count++;
#$date2を元にハッシュを作成
%key_date = ($date2,$key);
#ハッシュからキーワードを取り出す
($date2, $key2) = each %key_date;
}
if($key2 ne ""){
print " ";
print "$key2";
print "\n";}
}
print "\n";
print "\n";
print "\n";
print "\n";
print "検索回数:$count回\n";
}
#うるう年計算サブルーチン
sub leap {
$lyear = $year;
if(($lyear % 4 ) == 0 && ($lyear % 100) != 0 || ($lyear % 400) == 0)
{$month_days = 29;
}else{
$month_days = 28;
}
}
sub error {
print "Content-type: text/html\n\n";
print <<"EOF";
エラー
$_[0]
EOF
exit;
}