#!/usr/bin/perl ######################################### # # web拍手解析CGI # # 作・だんでぃ # ######################################### # このCGIのファイル名 $base = "kaiseki.cgi"; #----------外部ファイル読み込み(サーバーによっては絶対パスで指定) require 'jcode.pl'; require 'clapinit.cgi'; #----------パラメータを取得 $pal = $ENV{'QUERY_STRING'}; ($pass,$logday) = split(/&/,$pal); #----------パラメータの日付が遠すぎないかチェック if ($logday > 13) {$logday = 0;} if ($logday eq '') {$logday = 0;} #----------ID、パスワード、解析公開認証 &passcheck; #---------ログの日付をチェック &logdate; #----------ログ作成日の日にち取得 $day = $logday; &dateload; #---------解析用データ抽出 & makelog; & makemes; #---------ログの最高値抽出 $logmax = 0; for ($i=0 ; $i<=23 ; $i++){ if ($logmax < $log[$i]){ $logmax = $log[$i]; } } #---------過去14日分のトータル抽出 @pasttotal = (0,0,0,0,0,0,0,0,0,0,0,0,0,0); ($pastdate,$pasttotal[0]) = split(/<>/,$logs[$#logs]); $pastmax = $pasttotal[0]; for ($i=1 ; $i<=13 ; $i++){ $day=$i; &dateload; for ($l=0 ; $l<=$#logs ; $l++){ ($pastdate,$pasttotal) = split(/<>/,$logs[$l]); if ($getdate eq $pastdate){ $pasttotal[$i]=$pasttotal; } } if ($pastmax < $pasttotal[$i]){$pastmax = $pasttotal[$i];} } $day = $logday; &dateload; #----------------------HTML表示 $title = "web拍手解析"; &header; print ''; print "
\n"; print "$tomon月$today日のweb拍手解析

\n"; #-----------解析結果表示 print "\n"; print "\n"; print "\n"; for ($i=0 ; $i<=23 ; $i++){ print '\n"; print '\n\n"; if ($logmax){ $graph = $log[$i] / $logmax * 400; print ""; } else { print ""; } print "\n"; } print ""; print ""; print ""; print "
時間
数値
グラフ

',"$i時

',"$log[$i]

合計

$logtotal

 

\n"; #----------------------メッセージ表示 print "今日送られたメッセージ
\n"; print "\n"; for ($i=0 ; $i<=$#mes ; $i++){ ($mesday,$meshour,$message) = split(/<>/,$mes[$i]); print "\n"; print "\n\n"; $sousinmessage = "$sousinmessage\n$message"; } print "

$meshour時

$message

\n"; #---------------------過去2週間のグラフと別の日へのリンク print "過去14日間の解析
"; print "\n"; #---------------グラフ for ($i=0 ; $i<=13 ; $i++){ if ($pastmax){ $graph = $pasttotal[$i] / $pastmax * 200; print "\n"; } else { print "\n"; } } #--------------数値 print "\n"; for ($i=0 ; $i<=13 ; $i++){ print "\n" } #-------------日にちとリンク print "\n"; for ($i=0 ; $i<=13 ; $i++){ $day=$i; &dateload; print "\n"; } print "
$pasttotal[$i]
$tomon月$today日


\n"; #------------------著作権表示、公式サイトへのリンク(削除不可) print "
\n"; print 'web拍手CGI公式サイト


',"\n"; print "
"; print "\n"; exit; #---------ログ抽出 sub makelog{ #----------ログオープン &lockon; #====ロック開始 open(IN,"$logfile"); @logs = ; close(IN); &lockoff; #=================ロック終了 for ($i=0 ; $i <= $#logs ; $i++){ ($logdate,$logtotal,$log[0],$log[1],$log[2],$log[3],$log[4],$log[5],$log[6],$log[7],$log[8],$log[9],$log[10],$log[11],$log[12] ,$log[13],$log[14],$log[15],$log[16],$log[17],$log[18],$log[19],$log[20],$log[21],$log[22],$log[23]) = split(/<>/,$logs[$i]); if ($logdate eq $getdate) { return; } } $logdate = $getdate; @log = (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); $logtotal = 0; } #---------------メッセージ抽出 sub makemes{ &lockon; #====ロック開始 open(IN,"$mesfile"); #===========過去メッセージから読み込み @mesdata = ; close(IN); &lockoff; #=================ロック終了 for ($i=0 ; $i <= $#mesdata ; $i++){ ($mesday,$meshour,$message) = split(/<>/,$mesdata[$i]); if ($mesday eq $getdate) { @mes = (@mes,$mesdata[$i]); } } } #--------------パスワード認証 sub passcheck{ if ($passlock eq 0){ return; } if ($pass eq $password){ return; } $title = 'パスワード認証エラー'; &header; print "\n"; print "
\n"; print 'パスワードが違います

'; print '正しく解析を表示させるには、
解析CGIのURLの後に "?パスワード" を追加してください。
'; print '
例:パスワードが"0123"だった場合

'; print "http://〜〜〜/$base?0123"; print '

となります。'; print "
\n"; exit; } #-------------------ログの日付チェック sub logdate{ &lockon; #ロック開始 open(IN,"$logfile"); #===========ログファイルから読み込み @logdata = ; close(IN); #---------ログの分解 ($logdate,$logtotal,$log[0],$log[1],$log[2],$log[3],$log[4],$log[5],$log[6],$log[7],$log[8],$log[9],$log[10],$log[11],$log[12] ,$log[13],$log[14],$log[15],$log[16],$log[17],$log[18],$log[19],$log[20],$log[21],$log[22],$log[23]) = split( /<>/ , $logdata[$#logdata] ); #---------日付取得 $day = 0; &dateload; #---------日付チェック if ($getdate ne $logdate){ #---------日付変更時、ゼロログ追加、過去ログ削除 @log = (0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); $logtotal = 0; @logdata = (@logdata,"\n"); $data = "$getdate<>"; $data = "$data$logtotal<>"; for ($i=0 ; $i<=23 ; $i++){ $data = "$data$log[$i]<>"; } $logdata[$#logata] = "$data\n"; $day = 14; & dateload; $j = $#logdata; for ( $i=0 ; $i<=$j ; $i++ ){ ($logdate,$xxx) = split(/<>/,$logdata[0]); if ($logdate < $getdate){shift (@logdata);} } #---------日付変更時、過去ログメッセージ削除 open(IN,"$mesfile"); @mesdata = ; close(IN); $j = $#mesdata; for ( $i=0 ; $i<=$j ; $i++ ){ ($logdate,$xxx) = split(/<>/,$mesdata[0]); if ($logdate < $getdate){shift (@mesdata);} } open(OUT,">$mesfile"); print OUT @mesdata; close(OUT); } #---------保存用ログ作成 $day = 0; & dateload; $data = "$getdate<>"; $data = "$data$logtotal<>"; for ($i=0 ; $i<=23 ; $i++){ $data = "$data$log[$i]<>"; } $logdata[$#logata] = "$data\n"; #---------ログ上書き保存 open(OUT,">$logfile"); print OUT @logdata; close(OUT); &lockoff; #ロック終了 }