Nanashi-softプログラマ専用RSSを付けてみる


◇RSSを付けてみる ~自動生成~

書き方が分かったところで,手で書き替えていては大変
そこで,自動生成プログラムを書いてみます

○ファイル一覧取得

まずは,ファイル一覧を取得します

my $dir = '「コンテンツディレクトリ名」';
opendir IN, $dir;
while (my $file=readdir IN){
	if ($file =~ /.*\.htm/){
		push @files, $file;
	}
}
closedir IN;

RSSは新着情報なので,ファイルの新しい順の配列が必要なので,少し手を加えます

my $dir = '「コンテンツディレクトリ名」';
my %files;
opendir IN, $dir;
while (my $file=readdir IN){
	if ($file =~ /.*\.htm/){
		@f = stat($dir . $file);
		$files{$f[9]} = $file;
	}
}
closedir IN;

foreach(sort {$b <=> $a} keys %files){
	printf localtime($_) . ' ' . $files{$_} . "\n";
}

時間をキーとした配列を作成して,ソートしてみました
色々な方法があると思うけれど,とりあえずこの方法でやってみます

○RSSテキスト作成

上で作成した,%files配列からRSS形式を作成してみます

my $site_url = '「サイトURL」';
my $site_title = '「サイト名」';
my $s;
$s = '<?xml version="1.0" encoding="Shift_JIS"?>' . "\n";
$s .= '<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:syn="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/">' . "\n";
$s .= '<channel rdf:about="' . $site_url . '">' . "\n";
$s .= '<title>' . $site_title . '</title>' . "\n";
$s .= '<link>' . $site_url . '</link>' . "\n";
$s .= '<dc:language>ja</dc:language>' . "\n";
$s .= '<items>' . "\n";
$s .= ' <rdf:Seq>' . "\n";

my $cnt = 0;
foreach(sort {$b <=> $a} keys %files){
#	printf localtime($_) . ' ' . $files{$_} . "\n";
	$s .= '  <rdf:li rdf:resource="' . $site_url . $files{$_} . '"/>' . "\n";

	$cnt++;
	if ($cnt == 15){
		last;
	}
}

$s .= ' </rdf:Seq>' . "\n";
$s .= '</items>' . "\n";
$s .= '</channel>' . "\n";

my $cnt = 0;
foreach(sort {$b <=> $a} keys %files){
	$s .= '<item rdf:about="' . $site_url . $files{$_} . '">' . "\n";
	$s .= '<title>[' . localtime($_) . ']' . $files{$_} . '</title>' . "\n";
	$s .= '<link>' . $site_url . $files{$_} . '</link>' . "\n";
	$s .= '</item>' . "\n";

	$cnt++;
	if ($cnt == 15){
		last;
	}
}

$s .= '</rdf:RDF>' . "\n";

前に作成した雛形通りに上から順に付くっていってみました
色々と省略して,タイトルを更新時間とファイル名にしています

○RSSファイル出力

そして,普通にファイル出力する

my $rssfile = '「出力先ディレクトリ名」/index.rdf';
open (OUT, "> $rssfile");
print OUT $s;
close(OUT);



TOPプログラマ専用RSSを付けてみる

Melonbooks DL