#!/Perl/bin/MSWin32-x86-object/jperl.exe
use LWP::Simple;
use Net::FTP;
require 'cgi-lib.pl';
&ReadParse(*in);
# Setup your configuration.
$ftpsite = '';
$ftpaccount = '';
$ftppassword = '';
$yourdir = '/yourdir';
$outfile = 'renewal_index.html';
$url = "http://yourhost/yourhome/";
$syear = 2001;
$docroot = $ENV{'DOCROOT'};
$memodir = "memo";
# カテゴリキー文字列と個別HTMLファイルとの対応
%page = (
"cw" => "cygwin.html",
"awk" => "awk.html",
"awking" => "awking.html",
"perl" => "perl.html",
"python" => "python.html",
"tcl" => "tcltk.html",
"ruby" => "ruby.html",
"scheme" => "scheme.html",
"ps" => "ps2linux.html",
"an" => "an.html",
);
# 日記サイトから取得すべき今年度の日記ファイル名を配列に格納する。
if($in{'year'}){
$pyear = $in{'year'};
$pmon = 13;
$outfile = "renewal_index_${pyear}.html";
}else{
push(@rnfiles, "renewal.html");
$pyear = (localtime)[5] + 1900;# 現在の年
$pmon = (localtime)[4] + 1;# 現在の月
}
for($i=1;$i<$pmon;$i++){
push(@rnfiles, sprintf("renewal_%1.4d_%1.2d.html",$pyear,$i));
}
# CGI出力
print "Content-type: text/html\n\n";
print "\n
\n";
print "\n\n";
foreach (@rnfiles){
print "$_
\n";
$htmlfile = $url.$_;
@content = split(/\n+/, (get $htmlfile));
foreach $line (@content){
if($line =~ /^(\d+)\/(\d+)\/(\d+) *\(*\w*\.*\)*/i){
if(length($1) == 1){
$mon = "0".$1;
}else{
$mon = $1;
}
if(length($2) == 1){
$day = "0".$2;
}else{
$day = $2;
}
$date = "$mon/$day/$3";
print "${date}:
\n";
}
while($line =~ /([^<]*)(?:]+>)*([^<]*)(?:<\/A>)*([^<]*)<\/A>/gi){
$anchor{"$1:$date:$_\#$1_$2"} = $3.$4.$5;print "",$3.$4.$5, "
\n";
}
}
}
# 更新日記インデックスHTMLファイル出力
open(OUT, "> $outfile");
print OUT <
更新日記インデックス
更新日記インデックス ${pyear}年版
HERE1
# メモのカテゴリのASCII文字列をキーに日本語文字列を連想配列の値として取得
# メモ格納ディレクトリにある categorized.txt から読み込む
$blevel = 0;
print OUT "\n";
if(open(IN, "<$docroot/$memodir/categorized.txt")){
while(){
chomp;
if(/^(\t*)([^\t].*)$/){
$level = length $1;
($catstr, $category) = split(/\t/,$2);
$categories{$catstr} = $category;
if($blevel > $level){
$diff = $blevel - $level;
if($diff >= 1){
for($i = 1;$i<=$diff;$i++){
$ts = "\t" x ($blevel - $i + 1);
print OUT "$ts
\n";
}
}
}elsif($blevel < $level){
$diff = $level - $blevel;
if($diff >= 1){
for($i = 1;$i<=$diff;$i++){
$ts = "\t" x ($blevel + $i);
print OUT "$ts\n";
$blevel--;
}
print OUT "\n";
# 過去のインデックスファイルへのリンク
for($j=$syear;$j<=$pyear - 1;$j++){
print OUT "更新日記インデックス${j}年版
\n";
}
print OUT "
\n";
# カテゴリ別時系列記事リンク出力
foreach $key (sort keys(%anchor)){
($ca, $date, $anc) = split(/:/, $key);
if($cca ne $ca){
if($count > 0){
print OUT "
\n";
}
if($page{$ca}){
print OUT "\n\n";
}else{
print OUT "\n\n";
}
$cca = $ca;
$count++;
}
print OUT "- ", $anchor{$key}, "&\#32&\#32(", $date, ")\n";
}
# 更新日記インデックスHTMLファイル出力終了
print OUT <
HERE2
close(OUT);
# 更新日記インデックスファイルのFTP転送とCGI出力終了
$ftp = Net::FTP->new($ftpsite);
print "$ftpsiteに接続しました。
\n";
$ftp->login($ftpaccount, $ftppassword);
print "loginしました。
\n";
$ftp->cwd($yourdir);
print "$yourdirディレクトリに移動しました。
\n";
$ftp->ascii();
print "asciiモードにします。
\n";
$ftp->put($outfile, $outfile);
print "$outfileを転送しました。
\n";
$ftp->quit();
print "FTPを終了しました。
\n";
print "\n