#!/usr/bin/perl
#
#navi.cgi
#アンケートナビゲーター
require './jcodeLE.pl';
require './prei.cgi';
require './getres.cgi';
$| = 1;
&winit;&noaxschk;
&ginit;
&init;&decode;&jikan;
if (($make ne 'on') && ($delete ne 'on')){
$page = 0 if ($page < 0);
$page2 = $page*$lmax;
&html;
}else{
$page = 0;$page2 = 0;
&html;
}
exit;
##################################################
sub init{
$limax = 50; #1ページあたりのタイトル表示数
$getmax = 10; #取得する箱の数
$thiscgi = 'navi.cgi';
$title = 'アンケートナビゲーター';
$display = 4; #箱の最大表示数
@targetsites =
('バトルアンケート','バトルアンケート2000',
'アンケートボード','何アン','何アン2',
'生首自動アンケート飛来','亜流:総合','いかがアンケート');
$targeturl{'バトルアンケート'} = 'http://www.mediawars.ne.jp/~tm67s/cgi-bin/an/list.cgi';
$targeturl{'バトルアンケート2000'} = 'http://www.mediawars.ne.jp/~tm67s/cgi-bin/new/list.cgi';
$targeturl{'ねこアン'} = 'http://cgi.linkclub.or.jp/~babara/vote/list.cgi';
$targeturl{'こねこアン'} = 'http://cgi.linkclub.or.jp/~babara/koneko/list.cgi';
$targeturl{'アンケートボード'} = 'http://cgi.members.interq.or.jp/www1/q-mail/ank/list.cgi';
$targeturl{'何アン'} = 'http://www4.vc-net.ne.jp/~internet/cgi-bin/nanian/list.cgi';
$targeturl{'何アン2'} = 'http://www4.vc-net.ne.jp/~internet/cgi-bin/nanian2/list.cgi';
$targeturl{'アンケート野郎'} = 'http://person1.rocketbeach.com/~bokura/list.cgi';
$targeturl{'生首自動アンケート飛来'} = 'http://namakubi.virtualave.net/cgi-bin/enquete/list.cgi';
$targeturl{'亜流:総合'} = 'http://www.jks.is.tsukuba.ac.jp/~akaho/board/list.cgi';
$targeturl{'いかがアンケート'} = 'http://www.jks.is.tsukuba.ac.jp/~akaho/board/ikaga/list.cgi';
#現在の時刻を覚えておく
($now_sec,$now_min,$now_hour,$now_day,$now_month,$now_year,$_,$_,$_) = localtime(time);
$now_month++;
#月毎の日数データ
$monthdays[1] = 31;
$monthdays[2] = 28; #閏年はコードで対応
$monthdays[3] = 31;
$monthdays[4] = 30;
$monthdays[5] = 31;
$monthdays[6] = 30;
$monthdays[7] = 31;
$monthdays[8] = 31;
$monthdays[9] = 30;
$monthdays[10] = 31;
$monthdays[11] = 30;
$monthdays[12] = 31;
}#init END
##################################################
sub html {
my($bbslink);
$bbslink = "[$bbsname]" if($bbscgi);
print "Content-type: text/html\n\n";
print <<"_HTML_";
$title
$metacode
$bodys
$title
[インデックス]
$bbslink
参照回数(1/19〜):$acou
_HTML_
&listing;#普通のリスト作成
print <<"_HTML_";
$original
_HTML_
}#html END
##################################################
sub listing{
my($site,$url,$boxes,$boxmes,$boxdate,$blue,$bl);
print <<"_HTML_";
- ${date}現在のアンケートサイト状況
- 調査に成功すれば、それぞれの最終更新時刻と最近の箱が\表\示されます。
- 先頭の◇をクリックすると新しくブラウザが開くかも。
_HTML_
print "\n";
foreach $site (@targetsites) {
$url = $targeturl{$site};
next if($url eq '');
($boxes,$boxdate,$blue) = &get_boxlist($url);
print "- \n";
print "◇\n";
$boxmes = '';
if($boxes > 0){
if($boxes < $getmax){
$boxmes = "$boxes箱";
}else{
$boxmes = "$boxes箱以上";
}
}
if(($boxmes ne '') && $blue){
print "$site $boxmes $boxdate
\n";
}else{
print "$site $boxmes $boxdate
\n";
}
print " \n";
$bl = @boxlines-1;
if($bl >= 0){
print "- \n";
$bl = $display-1 if($bl > $display-1);
foreach $i (0 .. $bl){
print "$boxlines[$i]";
}
print "
\n";
}
}
print "
\n";
}#listing END
##################################################
sub decode {
my($brnum,$cou_file);
if ($ENV{'REQUEST_METHOD'} eq "POST"){
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
}else{
$buffer = $ENV{'QUERY_STRING'};
}
&decodearg($buffer);
$page = $FORM{'page'};$page = int($page);
$make = $FORM{'make'};
$root = $FORM{'root'};$delete = $FORM{'delete'};
$hotlist = $FORM{'h'};$hotlist = '0' if($hotlist eq '');
$rev = $FORM{'r'};$rev = 'on' if($rev eq '');
$lmax = $FORM{'lm'};$lmax = $limax if($lmax < 1);$lmax = int($lmax);
$eraseword = $FORM{'eraseword'};
$cou_file = "./$coudir/navicnt.dat";
#カウンタ制御
if(!$detail){
if(open(DB,"+<$cou_file")){
$acou = 1 + ;
}else{
open(DB,"+>>$cou_file"); #無ければ新しく作る
$acou = 1;
}
$acou = 0 if($acou > 999999);
seek(DB,0,0); print DB "$acou\n";
close(DB);
}
}#decode END
##################################################
#箱リストを取得する
#引数はURL(例えば "http://www.jks.is.tsukuba.ac.jp/~akaho/board/list.cgi")
sub get_boxlist {
my($host,$path,$line,$count,$lns,$boxdate,$blue,$url2,$i,$j,$bl,$room,$logcgi,$ln);
($url) = @_;
#URLからホスト名とパスを取り出す
if($url =~ /http:\/\/([^\/]+)\/(.+)/){
$host = $1;
$path = $2;
}else{
return;
}
$url2 = $1 if($url =~ /(http:\/\/.+)\/[^\/]+/);
$path = "$path?lm=$getmax&h=0&r=off&s=new"; #新規発言順を指定
@boxlines = (); #接続に失敗した時のため初期化
if(make_connection($host,80)){
$boxdate = "Connect failed.";
return (0,$boxdate,0);
}
if(get_html($host,$path,$url,'')){
$boxdate = "Not found or Forbidden.";
return (0,$boxdate,0);
}
$lns = @htmllines-1;
$boxes = 0;
foreach $count (0 .. $lns){ #箱へのリンクがある行を取り出す
$line = $htmllines[$count];
if($line =~ /.*/){
$count += 2;
push(@boxlines,$htmllines[$count]);
$boxes++;
}
}
if($boxes > 0){
$line = $boxlines[0]; #最新の箱(一番上)の更新時刻を取得
# $blue = ($line =~ /FONT\sCOLOR="blue"/g);
if($line =~ //){
$line =~ /(\d+\/\d+\s\d+時\d+分)/;
$boxdate = $1;
}else{
$boxdate = "Can't find date.";
}
}else{
$boxdate = "Room not found.";
}
$blue = &dateisblue($boxdate);
$bl = @boxlines-1;
foreach $i (0 .. $bl){ #箱のリンクを絶対URLに書き換える
$boxlines[$i] =~ //;
$logcgi = $1;
$room = $2;
if($room ne ''){
$boxlines[$i] =~ s/\"\.\/(\w+.cgi\?room=\d+)\"/\"$url2\/$logcgi.cgi\?room=$room\"/i;
$boxlines[$i] =~ s/.*<\/FONT>/<\/A>/i;
$_ = $boxlines[$i];
$j = s/の数を数える
$_ = $boxlines[$i];
$j -= s/<\/FONT//ig; #の数を数えて引く
$boxlines[$i] =~ s/[\r\n]//g;
for(; $j>0; $j--){ #が足りない分足す
$boxlines[$i] = "$boxlines[$i]";
}
$boxlines[$i] = "$boxlines[$i]\n";
}
}
return ($boxes,$boxdate,$blue);
}#get_otherlist END
##################################################
#更新日時が一日以内か?(一年以上前だと判断できない)
sub dateisblue {
my($datestr,$month,$mday,$hour,$min,$d,@monthdays);
($datestr) = @_;
if($datestr =~ /(\d+)\/(\d+)\s(\d+)時(\d+)分/){
$month = int($1);
$mday = int($2);
$hour = int($3);
$min = int($4);
}else{
return 0;
}
#同じ月の場合
if($month==$now_month){
return 1 if($mday == $now_day);
if($now_day - $mday == 1){
return 1 if($hour>$now_hour);
return 1 if($hour==$now_hour && $min>$now_min);
}
}
if($now_day == 1){
#月の変わり目にまたがる場合
if(($now_month-$month == 1) || ($month==12 && $nowmonth==1)){
if($monthdays[$month] <= $mday){ #不等号なのは閏年のため
return 1 if($hour>=$now_hour || $min>$now_min);
}
}
}
return 0;
}#dateisblue END
##################################################
__END__