高見知英のかいはつにっし(β)

高見知英のアプリケーション開発日誌 のほか、地域活動などの活動報告ブログ。

RSSの文法メモ φ(.. )

 さて、こっちは、1.0と2.0があって、1.0と2.0は別物とのこと――。
1.0も2.0*1も、資料は見つかりましたが、一応実物も見とこうということでチェック。

 まず、1.0。1.0は割と単純で、XHTMLを書いてる人はお馴染み、XML宣言があり、
その後rdf:RDFタグ(エレメント)から始まります。
で、次の行からchannnelタグがあり、その小要素としてサイトの情報(titleタグ、linkタグなど)が載ってます。
(RSSリーダーの場合、itemsタグ内のリストは、無視しても何とかなるの…かな?)
以降はitemタグ、一つ一つのアイテムのようです。
itemタグのrdf:aboutアトリビュートに、そのページのURLが載っていて、
以下、小要素として、title, link, description, それから追加モジュールで良くあるのが、rc:dateタグ(他のタグは見たことないです)。
で、以下itemタグがいくつか続き、最後にrdf:RDFの閉じタグが来ておしまい。
資料によるとimageタグとか、textinputがあるらしいので、その間はtitleタグなどを見かけても反応しないように注意
(それからこれらのタグがあるときは、channelタグの子要素にimageタグなどが入るので、それも的確に無視しましょう)

 次に、RSS2.0。これは、同じくXML宣言*2から始まり、rssタグから始まります。
次から1.0とちょっと違って、全てがchannelタグの子要素になってます。
channelタグの直下(深さがchannelのすぐしたという意味)に、title, linkなどのタグが続き、
itemタグが現れます。そのなかみは1.0と同じでtitle, linkなど。
1.0との違いは、追加モジュール以外の――いわゆるルート名前空間にあるタグの種類が多いこと、
channelの直下には、languageタグ(HTMLのlang要素と同じ書式。まあ、無視しても大丈夫かな…)
copyrightタグ(サイトの作者のコピーライト)
pubDate(サイトの最終更新日)
generator(RSSを作成したソフトウェアバージョン)
など。まあ、RSS1.0/2.0のリーダーを作るのならみんな無視かも。省略可のタグみたいですし。
itemタグの直下には、pubDate(同上)や、comments(コメント投稿用リンク?)など、
追加モジュールにslash:commentsなんてのもあるようですね、これは、blogの場合、フィードバックの個数らしいです。これはいいかも。

 単純なRSSリーダーの場合、最初のタグ(rdf:RDFか、rssか)でRSSのバージョンを判断し、
以降は微妙な違いを吸収しつつ、チャンネルのタイトル、リンクなどの収集、各アイテムのタイトル、リンクなどの収集というところでいいのでしょう(あとは、無関係なところは読み込まない)。
最初の文字コード指定や、RSSバージョンの判断もあるので、最初の一行(または二行)は、whileループに入れない方が良さそうですねえ。
他にも、atomとかRSDなどといった仕様もあるようですが、よく分からないのでとりあえず無視^^;
まあ、プラグイン式にしておけば、そのうち誰かが作ってくれるでしょう・・・と。

*1:1.0のは、http://www.kanzaki.com/docs/sw/rss.html 2.0は、http://blogs.law.harvard.edu/tech/rss

*2:1.0のところで書き忘れてましたが、これはないこともあるようです。その場合は文字コードutf-8で決めうちしてしまっていいのかな?