#!/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";