#!/usr/local/bin/perl
############################################################
#
# genrss.pl - Generate RSS feed file (format: RDF 1.0).
#
# 2006/02/17 Taro Nakano
#
# Usage: nkf -e index.html | genrss.pl > index.rdf
#
# The original script is available from Web KANZAKI
# (http://www.kanzaki.com/docs/sw/rss-generation.html).
#
############################################################
$item_title = "h2"; # タイトルとリンクを抜き出す要素
$item_descr = "p"; # 説明文を抜き出す要素
$host = "http://taro.haun.org/log/";
# ソースからタイトル、リンク、説明文を抽出
while (<>) {
if (m|
(.+)|) {
$htmltitle = $1; # HTML title
}
elsif (m|<${item_title}.*?>(.*?)|) {
$file = "$1$2.html";
$dayurl = "$file#$3";
$link[++$items] = $dayurl;
$items_list .= qq( \n);
$daytitle = $4;
$date[$items] = "$1-$2-$3T23:59:59+09:00";
$isItem = 1;
}
elsif (m|<${item_descr}[^<>]*>| and $isItem) {
$isItem2 = 1;
}
elsif (m|.*?| and $isItem and $isItem2) {
$str = $_; # 最初の段落の内容
$str =~ s/<.*?>//g; # 不要なマークアップを削除
chop $str;
# 段落の最初のフレーズを見出し代わりに抽出
# (JPerl 5.005_03-990822 は正規表現で [] 使うと動作がへんだな)
$leftofstr = $str;
$lten = $str;
$lmaru = $str;
if ($str =~ /(.+?、)/) {
$lten = $1;
}
if ($str =~ /(.+?。)/) {
$lmaru = $1;
}
$leftofstr = length($lten) < length($lmaru) ? $lten : $lmaru;
$daytitle = $daytitle . $leftofstr;
$title[$items] = $daytitle;
$descr[$items] = $str;
$isItem = 0; # 説明文は1要素だけにしておく
$isItem2 = 0;
}
}
# 以下、RSSの構文に従って出力
print <
$htmltitle
$host
$items_list
EOF
for $i (1..$#link) {
if ($i == 1) {
# 最新記事の dc:date はファイルのタイムスタンプにする
$mtime = (stat($file))[9];
# print "$mtime\n";
($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime($mtime);
$year += 1900;
$mon += 1;
$datestr = sprintf("%04d-%02d-%02dT%02d:%02d:%02d+09:00", $year, $mon, $mday, $hour, $min, $sec);
}
else {
$datestr = $date[$i]; # 最新以外の dc:date は適当
}
print <
$title[$i]
$host$link[$i]
$descr[$i]
$datestr
EOF
}
print "\n";