この文書は2004年頃に書かれたもので、かなりの部分が時代遅れな記述となっています。更にいくらか誤解や嘘も含まれますが、もう修正できません。
RSSとはRich Site Summaryの頭文字をとって略された名称で、実体はXMLです。Resource Description Framework (RDF)に基づいたRSS 1.0では、RDF Site Summaryの頭文字をとったものとされています。また、RSS 0.9系の後継として、RSS 1.0とは別に開発されたRSS 2.0では、Really Simple Syndicationの頭文字をとったものとされています。
サイトの見出しやリンク、要約などを定型に従って記述でき、ウェブサイトのコンテンツ一覧や、ヘッドラインなどに利用されています。
XML形式なため、プログラムなどからも柔軟に扱うことが出来るので、一種のデータベースとしても活用でき、過去のドキュメントの内容をRSS形式で保存し、それを検索して必要な情報だけを抜き出すなどということも可能でしょう。
Movable TypeやPHP-Nuke、e107、PukiWikiなどRSSと親和性が高く、RSSを出力する機能を持つ(または出力するようなアドイン・プラグインが提供されている)ものが広まってはいますが、大規模なウェブサイト(新聞社やテレビ局などの公式ウェブサイト)でRSSを配信しているところは少なく(日本国内に限れば皆無)、現状では普及しているとは言えないと思います。
が、大規模なウェブサイトからRSSを捻出して公開しているサイトもありますし、手間を惜しまなければ、それなりに自分でRSSを捻出することも可能です。それをうまく利用することさえできれば、柔軟な自分専用情報集積ドキュメントを作成することも出来るでしょう。
このドキュメントがRSSを利用してみたいと思った人々に少し役に立つことを願って。
前述のように、XMLなので、Internet Explorerなどでそのまま閲覧できます。が、そのままではあまりにも見づらいですし、それ以前に一度に一つのRSSしか閲覧できません。そこで、RSSを読み込んでHTMLなりプレーンテキストなりに変換してやると良いでしょう。
ここで読み込むために何を使うかという問題になるわけですが、XMLはプログラムから扱いやすいものなので、何を利用しても構わないと思います。その上で、導入が比較的たやすく、RSSを利用する上で便利なものが提供されているということで、PerlでRSSを読み込む方法を紹介します。
現在、主流であると思われるPerl 5.6では、標準モジュールとしてXML::Parserモジュールが含まれています。が、汎用的にXMLを扱うものなので、RSSを扱うにはかなりオーバースペックです。そこで、RSSに特化されたクラス、XML::RSSモジュールを導入しましょう。これは内部でXML::Parserモジュールを利用しており、非常に簡単な構文でRSSを利用できます。まず、これを利用して、SlashdotのRSS 1.0ファイルから標準出力に更新情報のタイトル一覧を抜き出してみましょう。
#!/usr/local/bin/perl
use strict;
use LWP::Simple;
use XML::RSS;
my $content = get('http://slashdot.org/slashdot.rdf');
my $rss = new XML::RSS;
eval {
$rss->parse($content);
};
for my $item (@{$rss->{'items'}}) {
print "$item->{title}\n";
}
exit;
これだけです。XML::RSSモジュールによって、RSSの中味にオブジェクト指向的にアプローチできるので、非常に簡単にRSSの中味を出力できることがわかると思います。ざっと説明すると、まず、7行目でslashdot.rdfをLWP::Simpleのgetを使い取得します。そして、9行目でRSSの中味を格納するオブジェクトを作成し、11行目で取得済みのRSSをXML::RSSのparseを使ってパースし、あらかじめ作成しておいたオブジェクトに格納します。最後に15行目でRSSの各itemごとのtitleを抜き出し、出力しています。非常に単純な構造で、注意することはかならずevalを使って例外を受け取ってやることです。理由は、XML::RSSが内部で使っているXML::Parserは、パースに失敗すると例外を投げてスクリプトの動作を停止させるためです。かなり厳密に判定するので、well-formed XML documentでないRSS(&が実体参照になっていないなど)をパースすると、確実にスクリプトが停止します。valid XML documentであることが必要であるかかどうかはよくわかりません。その他は特筆することもない簡単なスクリプトですね。いかにXML::RSSが簡便であるかということが良くわかります。
この簡単なスクリプトをベースに、引数にRSSのURIまたはパスを渡し、そのRSSの内容を標準出力に出力するようにしたものが 、ここで公開しているPerlスクリプト、Convert RSS to TXTで、出力をわかりやすいようにHTMLで出力するようにしたものが、Convert RSS to HTMLです。これらのスクリプトを逐一説明するより、実際に動かしてみた方が理解は速いと思います。
これらをベースに更に柔軟に出力できるように、スキンファイルで出力フォーマットを定義できるようにしたものが、RSS Headline Grabberです。
前述のように、RSSはとても普及しているとは言えないため、非常に限られた範囲のウェブサイトのヘッドラインしか出力されていませんが、それでもRSSの有用性の一端はわかるのではないでしょうか? 仮に、これと同程度のものを手作業で作るとなると、膨大な労力を伴うものだとは容易に想像がつくでしょうし、手作業の過程で主観によって情報がフィルタリングされていくことでしょう。それは、別の意味で有用性が高いと言えるでしょうが、労力に見合うものとはとても思えません。
非常に簡単ですが、RSSを利用するにはこの程度のことしかありません。良くも悪くも提供する側次第です。自分の欲しい情報がRSSとして提供されていなければ、RSSはほとんど意味をなさない存在であるでしょうし、RSSがあまりその元となるウェブサイトの内容をきちんと反映していないものであるなら、RSSを利用しても意味をなさないでしょう。それでも、普及しているとは言えない現時点でも、RSSにはかなりの価値と有用性があると僕は思います。
ようやくというか、なるべくしてというかRSSを手軽に利用できるようにしてくれるソフトウェアやサービスが出揃ってきた感じがあります。まだまだ一般に認知度が高いとは思えませんが、そこそこ広まってきたような気がします。そこで、それなりに機能が揃っており、扱いやすそうなRSSリーダーをいくつか紹介したいと思います。それぞれの細かい使い方までには触れません。
もちろん、他にも数多くRSSリーダーはあります。海外製のものはhebig.org/blog: RSS Feed Reader / News Aggregators Directoryを参照すると良いでしょう。日本製のものもNewsGlue、glucoseやjBV。などいくつかあります。クライアントで動作するタイプのソフトウェアについて、RSS Aggregatorリストとしてまとめたりもしたので、こちらも参考にどうぞ。
The Web KANZAKIのRSS生成スクリプトのサンプルで全ては事足りるような気がします。このページにも書かれているように、XML::RSSを使用することによってエレガントなスクリプトになるとは思いますが、それほどのものでもないような気がしないでもないです。
CGIで動作させる場合は、
print "Content-Type: application/xml\n\n";
と、HTTPヘッダを付け加えてやればよいでしょう。application/xmlではなく、text/xmlの方が良いかもしれません。
また、Yuki::RSSというRSSを出力するモジュールもあります。多くのWikiクローンでは、これを利用してRSSを出力しているようです。XML::RSSとほぼ同じように使用でき、単体で動作するので、XML::RSSが使えないサーバーや、配布しているPerlによるCGIスクリプトにRSS出力を付けたい時などは重宝するでしょう。
このサイトでは、個人的な理由でRSSファイルが提供していると良いなと思ったサイトのヘッドラインを、Yahoo! Pipesを使用して自前で生成しています。増えてきたので、Syndicationsとして、別のページに一覧を掲載しています。
インターネット上で公開されているRSSファイル、またはローカルに保存してあるRSSファイルを、HTMLファイルに変換するスクリプト。XML::RSSがわかればサルでも書けそうな。
インターネット上で公開されているRSSファイル、またはローカルに保存してあるRSSファイルを、テキストファイルに変換するスクリプト。Convert RSS to HTMLをべたテキストで出力するようにしただけです。
指定したウェブページからRSS 1.0形式のRSSファイルを生成するPerlスクリプト。どんなウェブページからでも可能というわけではありませんが、大概のウェブページからは生成できると思います。
インターネット上で公開されているRSSファイルから、指定したスキンファイルに従って整形された文書を作成するPerlスクリプト。半分以上、Naotoさんが作ってます。
インターネット上で公開されているRSSファイルから、前回チェック時以降に追加された記事をメールで送信するスクリプトです。
上記、RSS Headline MailerをNet::SMTPではなくsendmailを利用してメールを送信するように変更したものです。中味はほとんど一緒。Naotoさんが作ってくれました(作らせたわけではありません、多分)。
インターネット上で公開されているRSSファイルから、前回チェック時以降に追加された記事をメールで送信するスクリプトです。RSS Headline Mailerと違い、新着記事ごとに一通メールが来ます。