# RSS 1.0を生成するスクリプト(Perl 5.8以降専用)。 # 平成18年10月 9日 さいたま・しらぎくさいと # (c)2006 Marguerite Site, Saitama, Japan. # www.marguerite.jp # # ※このスクリプトのご利用には、Perl 5.8以降が必要です。 # ※このスクリプト自身は、必ずシフトJISコードで保存したうえでご利用下さい。 $descOfSite='コンテンツ全体の説明。'; $titleOfSite='コンテンツの題名。'; $base_uri='コンテンツの収録ディレクトリへのURI'; $home_uri="コンテンツのトップページへのURI"; $stylesheets=qq|\n|; $rss_relPath="rss.xml"; #RSSのファイル名。 $original_encoding='shift_jis'; #元のHTML文書の文字コード。 $MAX_ITEMS=16; #RSSでの最大項目数。 #以下は特に指定が無い箇所以外は弄らないで下さい。 ################################################ $base_uri=~s|/\Z||; if (($original_encoding=lc($original_encoding)) eq 'utf-8') { $original_encoding='utf8'; } if ($original_encoding ne 'shift_jis' || $output_encoding ne 'shift_jis') { use Encode; } @descT=(); @dateT=(); @titleT=(); @uriT=(); $item_ctr=0; $cdir=''; proc(); $OS=''; $ITEMS=''; $i=-1; while (++$i<$item_ctr) { my ($sec,$min,$hour,$date,$month,$year)=localtime($dateT[$i]); my $j=sprintf("%04d-%02d-%02dT%02d:%02d:%02d",$year+1900,$month+1,$date,$hour,$min,$sec).'+09:00'; $OS.=< $titleT[$i] $uriT[$i] $descT[$i] $j ED $ITEMS.=qq|\t\t\t\n|; } $OS=< $stylesheets $titleOfSite $home_uri $descOfSite ja $ITEMS $OS ED print "===== Completed!!\n"; print "\n"; $OS=decode("shift_jis",$OS); $OS=encode('utf8',$OS); open (F,">$rss_relPath"); binmode (F); print F $OS; close (F); exit(); #データを集める処理。 sub proc { local *DIR; local *F; local *FF; opendir (DIR,"."); my ($i,$j,$n,$k,$l); my @d=readdir(DIR); foreach $n (@d) { if (!$n) { next; } if ($n=~/\A[\-\w]+\Z/) { chdir("./$n"); $cdir.="/$n"; &proc(); chdir("../"); $cdir=~s/\/$n\Z//; next; } $x="$cdir/$n"; ############################################ #RSSへの収録から外したいファイルがある場合は、 #除外する条件に併せて設定して下さい。 # $nはファイル名。 # $xはこのスクリプトからの相対パス。 # $cdirはこのスクリプトからディレクトリへの相対パス。 next if !($x=~/\.s?html?\Z/); #.html限定。 #next if $n eq 'test.html'; #これは例です。 #除外する条件はここまで。 ############################################ next if !open (FF,$n); my $date=(stat(FF))[9]; next if $date<1; $j=''; while ($i=) { $j.=$i; } close(FF); if ($original_encoding ne 'shift_jis') { $j=decode($original_encoding,$j); $j=encode("shift_jis",$j); } if ($j=~m!0) { $date=$1; } print "$date $x\n"; my $desc=''; my $title=''; next if !($j=~/]*>(.*?)<\/title[^>]*>/); $title=$1; if ($j=~/]*?)name="description"([^>]*?)>/ && ($k=$1.$2)=~/content="([^"]*)/) { $desc=$1; } else { $j=~s/\A.*?
]*>//s; while ($j=~s|<([\w:\-]+)[^>]*?class="forAural(?:-2)?"[^>]*>.*?||s) {} $j=~s|

.*?

||s; $j=~s|<[^>]*>||g; $j=~s|\s+| |g; $j=~s|"|"|g; $j=~s|<|<|g; $j=~s|>|>|g; $j=substr($j,0,160); $j=~s!\A((?:[\x80-\x9f\xe0-\xff].|[\x00-\x7f])*)!!; $desc="$1..."; } $title=~s|"|"|g; $title=~s|<|<|g; $title=~s|>|>|g; $title=~s| | |g; $desc=~s|"|"|g; $desc=~s|<|<|g; $desc=~s|>|>|g; $desc=~s| | |g; my $uri="$base_uri$x"; $i=-1; while (++$i<$item_ctr) { last if $dateT[$i]<=$date; } $j=$item_ctr+1; while (--$j>=$i) { $dateT[$j+1]=$dateT[$j]; $titleT[$j+1]=$titleT[$j]; $descT[$j+1]=$descT[$j]; $uriT[$j+1]=$uriT[$j]; } $dateT[$i]=$date; $titleT[$i]=$title; $descT[$i]=$desc; $uriT[$i]=$uri; if (++$item_ctr>=$MAX_ITEMS) { $item_ctr=$MAX_ITEMS; $#dateT= $#titleT= $#descT= $#uriT=$MAX_ITEMS-1; } } return; }