RSSについて

この文書は2004年頃に書かれたもので、かなりの部分が時代遅れな記述となっています。更にいくらか誤解や嘘も含まれますが、もう修正できません。

Index

RSSとは?

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 TypePHP-Nukee107PukiWikiなどRSSと親和性が高く、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リーダーをいくつか紹介したいと思います。それぞれの細かい使い方までには触れません。

SharpReader
いわゆるメーラーのようなインターフェイスを備えた、スタンダードなRSSリーダーです。特筆すべきは、Shift_JISやEUC-JPなどのRSSファイルもなにげなく閲覧できる点でしょう。プラグインで独自の機能を拡張することも可能で、底知れぬ可能性を秘めています。難点は、.Net Frameworkを利用しているので、起動が遅いことくらいでしょう。
FeedDemon
機能的に、上記SharpReaderと双璧を成す完成度の高いRSSリーダーです。こちらも、Shift_JISやEUC-JPなどのRSSファイルが閲覧できます。特に外部ライブラリが必須というわけではないので、起動は速く、快適です。現在(2003/09/20)はBeta段階で、フリー・ソフトウェアとして提供されています。
Amphetadesk
サーバーとして動作するタイプのRSSリーダーです。Perlで組まれているので、多彩なプラットフォームで動作するのは大きな利点だと思います。サーバーとして動作するので、自宅のマシンで作動させ、外出先から閲覧などということも可能です。閲覧にはウェブ・ブラウザを利用することも、RSSファイルに既述されているURLを参照する時などシームレスに利用できるのも良いと思います。
Info Aggregator
登録したRSSファイルの新着記事を保存してくれるサービスです。閲覧にはIMAPを利用して行います。RSSファイルの収集・新着記事チェックなどはサービスの方でやってくれるので、好きな時に好きな場所でIMAP対応メーラーなどから普通のメールをチェックするように閲覧できるのが最大の利点でしょう。
Bloglines
登録したRSSファイルの新着記事を保存してくれるサービスです。こちらは閲覧にはウェブ・ブラウザを利用して行います。Info Aggregatorと同じく、RSSファイルの収集・新着記事チェックなどはサービスの方でやってくれるので、好きな時に好きな場所で閲覧することが出来、必要なのはウェブ・ブラウザのみという敷居の低さは素晴らしいです。新着記事を通知してくれるアプリケーション(現在はWindows版のみ)の提供を開始したり、なかなか動きが激しいです。僕のアカウントを公開していますので、実際にどんな感じかは触ってみてください。ログインして使用する場合には、未読の記事を優先的に表示してくれるなどの機能が追加されます。

もちろん、他にも数多くRSSリーダーはあります。海外製のものはhebig.org/blog: RSS Feed Reader / News Aggregators Directoryを参照すると良いでしょう。日本製のものもNewsGlueglucosejBV。などいくつかあります。クライアントで動作するタイプのソフトウェアについて、RSS Aggregatorリストとしてまとめたりもしたので、こちらも参考にどうぞ。

RSSを配信してみる

The Web KANZAKIRSS生成スクリプトのサンプルで全ては事足りるような気がします。このページにも書かれているように、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の配信例

このサイトでは、個人的な理由でRSSファイルが提供していると良いなと思ったサイトのヘッドラインを、Yahoo! Pipesを使用して自前で生成しています。増えてきたので、Syndicationsとして、別のページに一覧を掲載しています。

RSS関連のPerlスクリプト

Convert RSS to HTML

インターネット上で公開されているRSSファイル、またはローカルに保存してあるRSSファイルを、HTMLファイルに変換するスクリプト。XML::RSSがわかればサルでも書けそうな。

Convert RSS to TXT

インターネット上で公開されているRSSファイル、またはローカルに保存してあるRSSファイルを、テキストファイルに変換するスクリプト。Convert RSS to HTMLをべたテキストで出力するようにしただけです。

RSS Generator

指定したウェブページからRSS 1.0形式のRSSファイルを生成するPerlスクリプト。どんなウェブページからでも可能というわけではありませんが、大概のウェブページからは生成できると思います。

2003/07/20 1.0

RSS Headline Grabber

インターネット上で公開されているRSSファイルから、指定したスキンファイルに従って整形された文書を作成するPerlスクリプト。半分以上、Naotoさんが作ってます。

2003/08/10 1.2
2003/03/23 1.1
2003/03/14 1.0.1
2003/03/12 1.0

RSS Headline Mailer

インターネット上で公開されているRSSファイルから、前回チェック時以降に追加された記事をメールで送信するスクリプトです。

2003/10/02 1.0.2
2003/10/02 1.0.1
2003/09/28 1.0

RSS Headline Mailer [sendmail版]

上記、RSS Headline MailerをNet::SMTPではなくsendmailを利用してメールを送信するように変更したものです。中味はほとんど一緒。Naotoさんが作ってくれました(作らせたわけではありません、多分)。

RSS Headline Mailer Each

インターネット上で公開されているRSSファイルから、前回チェック時以降に追加された記事をメールで送信するスクリプトです。RSS Headline Mailerと違い、新着記事ごとに一通メールが来ます。

2003/10/29 1.0

参考資料