前回までで、RSS は一通り対応したことになります。最近は、RSS に対抗する(?)ものとして Atom が徐々に勢力範囲を拡大中です。
世の中の主要な RSS リーダも Atom 対応を謳うことが趨勢のようですので、
このコラムで製作中の RSS リーダも Atom に対応してみます。とりあえず、対応する版は Atom 0.3 とします
(0.1 や 0.2 は、もはや obsolete と考えていいと思います。
また、Atom はかつて echo と呼ばれていましたが、その辺の話題は省略します)。
一般的に Atom 0.3 の xml ファイルは、以下のような形式をしています
(注意: Atom 0.3 は rdf ではありませんがダブリン・コアを取り入れたバリエーションもあります)。
また、Atom 0.3 は RSS 1.0 と同様、日時は ISO8601 形式です。
(実際には、もっといろんなバリエーションが可能なのですが、ここでは簡単のために最も一般的な例を示しています。)
<?xml version="1.0" encoding="utf-8"?>
<title>feed の対象となる Web ページの</title>
<link rel="alternate" type="text/html" href="feed の対象となる Web ページのURL" />
<id>feed の対象となる Web ページのユニークな識別子</id>
<link rel="service.post" type="application/x.atom+xml" href="" title="feed の対象となる Web ページへ記事を投稿するための Atom API エンドポイント URL" />
<modified>feed の</modified>
<tagline>feed の対象となる Web ページの</tagline>
<generator url="feed 生成ツールに関する URL" version="feed 生成ツールの版数">feed 生成ツールの名前</generator>
<info type="application/xhtml+xml">
<div xmlns="http://www.w3.org/1999/xhtml">This is an Atom formatted XML site feed. It is intended to be viewed in a Newsreader or syndicated to another site. </div>
</info>
<entry>
<title>feed 生成対象のの記事の</title>
<link rel="alternate" type="text/html" href="feed 生成対象の最初の記事の " />
<link rel="service.edit" type="application/x.atom+xml" href="feed 生成対象の最初の記事の編集・再投稿用の Atom API エンドポイント URL" title="feed 生成対象の最初の記事の題名" />
<id>feed 生成対象の最初の記事のユニークな識別子</id>
<issued>feed 生成対象の最初の記事の</issued>
<modified>feed 生成対象の最初の記事の</modified>
<created>feed 生成対象の最初の記事の</created>
<summary>feed 生成対象の最初の記事の</summary>
<author>
<name>feed 生成対象の最初の記事の</name>
</author>
<dc:subject>feed 生成対象の最初の記事の・その1</dc:subject>
……………………………………………………
<dc:subject>feed 生成対象の最初の記事の・そのm</dc:subject>
</entry>
<entry>
<title>feed 生成対象のの記事の題名</title>
<link rel="alternate" type="text/html" href="feed 生成対象の2番目の記事の URL" />
<link rel="service.edit" type="application/x.atom+xml" href="feed 生成対象の2番目の記事の編集・再投稿用の Atom API エンドポイント URL" title="feed 生成対象の2番目の記事の題名" />
<id>feed 生成対象の2番目の記事のユニークな識別子</id>
<issued>feed 生成対象の2番目の記事の投稿日時(現地時間)</issued>
<modified>feed 生成対象の2番目の記事の最終更新日時(協定世界時)</modified>
<created>feed 生成対象の2番目の記事の投稿日時(協定世界時間)</created>
<summary>feed 生成対象の2番目の記事の概要</summary>
<author>
<name>feed 生成対象の2番目の記事の投稿者</name>
</author>
<dc:subject>feed 生成対象の2番目の記事のカテゴリ・その1</dc:subject>
……………………………………………………
<dc:subject>feed 生成対象の2番目の記事のカテゴリ・そのm</dc:subject>
</entry>
・・・・・・・・・・・・(略)・・・・・・・・・・・・
<entry>
<title>feed 生成対象のの記事の題名</title>
<link rel="alternate" type="text/html" href="feed 生成対象のn番目の記事の URL" />
<link rel="service.edit" type="application/x.atom+xml" href="feed 生成対象のn番目の記事の編集・再投稿用の Atom API エンドポイント URL" title="feed 生成対象のn番目の記事の題名" />
<id>feed 生成対象のn番目の記事のユニークな識別子</id>
<issued>feed 生成対象のn番目の記事の投稿日時(現地時間)</issued>
<modified>feed 生成対象のn番目の記事の最終更新日時(協定世界時)</modified>
<created>feed 生成対象のn番目の記事の投稿日時(協定世界時間)</created>
<summary>feed 生成対象のn番目の記事の概要</summary>
<author>
<name>feed 生成対象のn番目の記事の投稿者</name>
</author>
<dc:subject>feed 生成対象のn番目の記事のカテゴリ・その1</dc:subject>
……………………………………………………
<dc:subject>feed 生成対象のn番目の記事のカテゴリ・そのm</dc:subject>
</entry>
</feed>
「資料室」の方にも書きましたが、
Atom は feed を行なうためだけのものではなく、blog/CMS ツールの管理用 API (Atom API)
をも包含しています。すなわち、Atom API を使って、記事の投稿、編集などを行なうことができますが、
そのときに使用する URL のことを、
Atom API エンドポイント URL(もしくは、単にエンドポイント URL)といいます。
記事を投稿・編集するときは、この URL に対して、
規定のプロトコルでパケットを投げる(HTTP GET/POST/PUT/DELETE メソッドを使い分ける)ことになります。
Atom API および、その親戚筋(とはちょっと違うかもしれませんが)の XML-RPC API については、
現在連載中の「RSS リーダ編」以降に詳しく解説する予定です。お楽しみに。
話題を元に戻します。
入力ファイルに
<feed version="0.3" xmlns="http://purl.org/atom/ns#">
または
<feed version="0.3" xmlns="http://purl.org/atom/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/">
という文字列のいずれかが含まれていたら、Atom 0.3 用のリーダで処理すれば OK です。
ここでは、簡単のため、
<feed version="0.3"
という文字列と "Atom" という文字列を同時に含む行があれば、Atom 0.3 として処理することにします。
上記の方針に基づき、Atom 0.3 のリーダー readRSS_0_3() を作ると、以下のようになります。
続きを読む...