#!/usr/bin/perl local(@logList, %query, $sY, $sM, $sD, $nM, $nD, $mode); local($backPageYM, $nextPageYM, $backPageText, $nextPageText); local(@dayAry, @ttlAry, @cmtAry, @docAry); &initialize(); &printHTML(); exit; # ■初期設定 # sub initialize { #引数取得 my $queries; if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $queries, $ENV{'CONTENT_LENGTH'}); } else { $queries = $ENV{'QUERY_STRING'}; } #引数有(日付のみ指定) my $ymd; if ($queries =~ /^[0-9][0-9][0-1][0-9]([0-3][0-9])?$/) { $ymd = $queries; #引数有 } elsif ($queries ne '') { my @pairs = split(/[&;]/, $queries); foreach (@pairs) { my($key, $val) = split(/=/); $key =~ s/\s//g; $query{$key} = $val; } $ymd = $query{'date'}; } # ログリストを取得 # open(FILE, "./list.dat"); @logList = ; chomp(@logList); close(FILE); #ログディレクトリのファイルリストを取得 # opendir(LOGDIR, "$logDir"); # @logList = readdir(LOGDIR); # closedir(LOGDIR); # shift(@logList); shift(@logList); # . と .. を削除 # @logList = sort(@logList); #ファイル名のソート # 日付取得 # if ($ymd ne '') { $sY = substr($ymd, 0, 2); $sM = substr($ymd, 2, 2); $sD = substr($ymd, 4, 2); } else { #日付の指定がない時は現在の年月 my @nowTime = localtime(); $sY = substr($nowTime[5], 1); $sM = $nowTime[4] +1; $sD = ''; } unless (-e "./log/$sY$sM.xhtml") { #ログファイルがない(引数が違う)時は最新のもの $sY = substr($logList[$#logList], 0, 2); $sM = substr($logList[$#logList], 2, 2); $sD = ''; } $nM = int($sM); if ($sD ne '') { $mode = "single"; #notice.used $nD = int($sD); } # ログ読込 # open(FILE, "./log/$sY$sM.xhtml"); my @log = ; chomp @log; close(FILE); for ($i = 0; $i < @log; $i++) { #各要素を配列に格納 ($dayAry[$i], $ttlAry[$i], $cmtAry[$i], $docAry[$i]) = split('<>', $log[$i]); } # 前後の年月を取得(ページスライド用) # my $i = 0; for (; $i < @logList; $i++) { if ($logList[$i] eq "$sY$sM") { #ログリストから一致する年月を検索 $backPageYM = substr($logList[$i -1], 0, 4); $backPageText = "20". substr($backPageYM, 0, 2). "年". int(substr($backPageYM, 2, 2)). "月"; $nextPageYM = substr($logList[$i +1], 0, 4); $nextPageText = "20". substr($nextPageYM, 0, 2). "年". int(substr($nextPageYM, 2, 2)). "月"; last; } } } # ■printHTML # sub printHTML { # # my $linkHTML = ''; if ($backPageYM ne '') { $linkHTML .= "\n"; $linkHTML .= "\n"; } if ($nextPageYM ne '') { $linkHTML .= "\n"; $linkHTML .= "\n"; } my $dateText = "20$sY年$nM月". ($sD ne '' ? "$nD日" : ''); # print <<"hereDocument"; Content-type: text/html パチョ奮闘記$dateText/siteCTS $linkHTML hereDocument # # ページヘッダ # my $pageSlideHTML = &getPageSlideHTML(); #ページスライドとバックナンバー\n". "\t\t\t\n". "\t\t\n". "\t\n". "\n"; } print "\n". "\n". "
\n". "\n\n\n\n"; # &0 記事書き出し # #logFileRead() #($dayAry[$i], $ttlAry[$i], $cmtAry[$i], $docAry[$i]) = split('<>', $log[$i]); my $i = 0; my $singleModeFlag = 0; #1日表示でヒット記事があったか for (; $i < $#dayAry; $i++) { if ($docAry[$i] ne '') { if ("$sD" ne '' && "$sD" ne $dayAry[$i]) { #引数に日があり、その日の記事も存在するか next; } else { $singleModeFlag = 1; } my $sd = $dayAry[$i]; my $nd = int($sd); $docAry[$i] =~ s/<\/p>

/<\/p>\n\n\t\t

/g; $docAry[$i] =~ s//\n\t\t/g; # print <<"hereDocument";

$ttlAry[$i]

20$sY.$nM.$nd

$docAry[$i]
URI of this article.
(一括表示モード)http://cts.velvet.jp/?psn$sY$sM#d$sd
(1日表示モード)http://cts.velvet.jp/?psn$sY$sM$sd 

hereDocument # } } #for.end if (!$singleModeFlag) { print "

20$sY年$nM月$nD日の記事はありません。
\n"; print "この月の記事を全部表示する

\n\n\n\n"; } # ページフッタ # $pageSlideHTML =~ s/-->/ | ▲<\/tt> pagetop<\/a>/; $pageSlideHTML =~ s/ accesskey="."//g; # print <<"hereDocument";
hereDocument # } # ■ページスライド作成 # sub getPageSlideHTML { my $s = ''; if ("$sY$sM" ne '0102') { $s .= "\n\t\t\t<< 最初 [F]"; } if ($backPageYM) { $s .= "\n\t\t\t|\n\t\t\t<[B]"; } $s .= "\n\t\t\t"; if ($nextPageYM) { $s .= "\n\t\t\t|\n\t\t\t> [N]"; } if ("$sY$sM" ne $logList[$#logList]) { $s .= "\n\t\t\t|\n\t\t\t最新 >> [L]"; } # バックナンバー\n\t\t\t\t\n"; my @bnFileList = reverse(@logList); #新しい順に並べ替え my $startFlag = 0; my ($beforeY, $y, $m); foreach (@bnFileList) { $y = substr($_, 0, 2); $m = substr($_, 2, 2); if ($y ne $beforeY && $startFlag) { #前のループの年と違う時(初回は強制スキップ) $s .= "\t\t\t\t\n"; } else { $startFlag = 1; } if ($y ne $beforeY) { #前のループの年と違う時 $s .= "\t\t\t\t\n"; } $s .= "\t\t\t\t\t\n"; $beforeY = $y; #このループの年 } $s .= "\t\t\t\t\n\t\t\t"; return $s; } sub test { print "Content-type: text/html\n\n$_[0]"; exit;} sub err { print "Content-type: text/html\n\n$_[0]"; exit;}