RSSを作ってみた
2003-07-26
アンチポップ (2003-07-25)の Hatena RSS Machine の素晴らしさに感動して、ぜひこの日記でも RSS を発信したいと思い、手軽に RSS を作る方法はないものかと、あれこれ検索してみました。
で、ありました、ありました。意外と身近な (?) ところに。我らが神崎先生が、RSS 生成スクリプトのサンプルなるリソースを公開しておられるではないですか! 早速見てみたところ、ほとんどそのままの形でうちんくの最新の日記、latest.html に適用できることがわかりました。以下、うちんくの日記用に書き換えたperlスクリプトです。
$item_title = "h3"; #タイトルとリンクを抜き出す要素
$item_descr = "p"; #説明文を抜き出す要素
$host = "http://diary.noasobi.net/";
#ソースからタイトル、リンク、説明文を抽出
while(<>){
if(m|<${item_title}.*?><a href="(.*?)">(.*?)</a>|){
$link[++$items] = $1;
$items_list .= qq( <rdf:li rdf:resource="$host$1"/>\n);
$title[$items] = $2;
$isItem = 1;
}elsif(m|<${item_descr}.*?>(.*?)</${item_descr}>| and $isItem){
$str = $1;
$str =~ s/<.*?>//g; #不要なマークアップを削除
$descr[$items] = $str;
$isItem = 0; #説明文は1要素だけにしておく
}
}
#以下、RSSの構文に従って出力
print <<EOF;
<?xml version="1.0" encoding="utf-8" ?>
<rdf:RDF
xmlns="http://purl.org/rss/1.0/"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xml:lang="ja">
<channel rdf:about="http://diary.noasobi.net/rss.rdf">
<title>朝顔日記 最近の記事</title>
<link>http://diary.noasobi.net/</link>
<description>のりの日々のあれこれを綴った朝顔日記の最近の記事</description>
<image rdf:resource="http://diary.noasobi.net/img/asagao-p.png"/>
<items>
<rdf:Seq>
$items_list
</rdf:Seq>
</items>
</channel>
EOF
for $i (1..$#link){
print <<EOF;
<item rdf:about="$host$link[$i]">
<title>$title[$i]</title>
<link>$host$link[$i]</link>
<description>$descr[$i]</description>
</item>
EOF
}
print "</rdf:RDF>\n";
これを rss.pl と名付けて、こんな感じで、latest.html に適用させてみました。
Perl rss.pl latest.html > rss.rdf
見事に、rss.rdf が出力されました。しかし、ここで問題発生。(w
日記は、Shift-JIS で書いているので、当然出力される RSS も文字コードは Shift-JIS です。これをなんとか utf-8 に変換しなければなりません。どうせ perl で生成させているんだから、perl で変換すればよかろうと思ってググってみたら、perljp - 日本語 Perl ガイドなるページを発見。さっそく変換してみる。が、うまくいかない。何故に? と考えることしばし。うちの perl は 5.6 で、件のページに書いてあるのは、5.8 によるものでした。:p)
気を取り直して ActivePerl 5.8.0 に入れ替えます。入れ替え後はうまく変換されるようになりました。:-) rss.pl の吐き出すファイル名をとりあえず、rss.sjis として、以下を実行。
perl -Mencoding=shiftjis,STDOUT,utf8 -pe1 < rss.sjis > rss.rdf
これだと一時ファイルができて、邪魔くさいので、パイプ処理することにして、最終的にはバッチファイルにしてみました。以下が、実行するだけで latest.html から utf-8 な rss.rdf を吐き出すバッチファイルです。
@echo off
Perl c:\web\noasobi\diary\rss\rss.pl c:\web\noasobi\diary\latest.html | Perl -Mencoding=shiftjis,STDOUT,utf8 -pe1 > c:\web\noasobi\diary\rss.rdf
まぁ、日記を書く度に手動で実行しないといけないところがアレですが、そもそも、最新の日記と月別の日記を作るのに、コピペという原始的な方法をとっているわけで、まぁ、そこらあたりも含めて、一発であれこれするというのは今後の課題とします。:p)
「RSSを作ってみた」へコメントをつける
- この記事の永続的 URI ならびに トラックバック ping URI
- http://diary.noasobi.net/2003/07/diary_030726a.html