2007年12月16日日曜日

RSS/AtomフィードのXMLの作り方メモ

とりあえず、必要最小限の要素だけを作る方法のメモ。


RSS1.0
シンプルなRSSの全体に、Dublin Coreモジュールのdateを加える。
各itemのdescriptionにはエスケープしたhtmlを入れられる。

<?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#"
 xmlns:dc="http://purl.org/dc/elements/1.1/"
 xml:lang="ja">

 <channel rdf:about="http://example.com/rss1.rdf">
  <title>RSS1.0 Test</title>
  <link>http://example.com</link>
  <description>RSS1.0のテスト</description>
  <items>
   <rdf:Seq>
    <rdf:li rdf:resource="http://example.com/page1"/>
    <rdf:li rdf:resource="http://example.com/page2"/>
   </rdf:Seq>
  </items>
 </channel>

 <item rdf:about="http://example.com/page1">
  <title>ページ1</title>
  <link>http://example.com/page1</link>
  <description>1つ目のページ</description>
  <dc:date>2007-01-01T00:00:00+09:00</dc:date>
 </item>

 <item rdf:about="http://example.com/page2">
  <title>ページ2</title>
  <link>http://example.com/page2</link>
  <description>2つ目のページ</description>
  <dc:date>2007-01-02T03:04:05+09:00</dc:date>
 </item>
</rdf:RDF>


RSS2.0
▽PHP4でRSS配信プログラム xmlファイルの作成からlastBuildDateを削除し、各itemにdescriptionを追加する。
(lastBuildDateはあったほうがよい?)
docs要素はなくてもいいが、せっかくなので付けておく?
他のフィードと違い、日付はRFC2822形式(例:Sun, 05 Nov 2006 16:53:33 +0900)。
フィード自体のURLを示す箇所が無い。
各itemのdescriptionにはエスケープしたhtmlを入れられる。
<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0">
 <channel>

  <title>RSS2.0 Test</title>
  <link>http://example.com</link>
  <description>RSS2.0のテスト</description>
  <language>ja</language>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>

  <item>
   <title>ページ1</title>
   <link>http://example.com/page1</link>
   <description>1つ目のページ</description>
   <pubDate>Mon, 01 Jan 2007 00:00:00 +0900</pubDate>
  </item>

  <item>
   <title>ページ2</title>
   <link>http://example.com/page2</link>
   <description>2つ目のページ</description>
   <pubDate>Tue, 02 Jan 2007 03:04:05 +0900</pubDate>
  </item>

 </channel>
</rss>


Atom0.3
2章 Atomフォーマット - The Atom Syndication Formatの"Atomフォーマットの構成"からフィード全体の日時(modefied)を削除し、各entryにsummaryを追加する。
xml:lang属性もfeed要素あたりに付けておく。
Atom1.0とは違い、フィード全体のidは必須ではない。
フィード自体のURLを示す箇所が無い。
各entryの2つの日時(issued、modefied)は必須。
各entryのidについてはAtom1.0と同様。
ベタなテキストでなくhtmlを入れたいなら、summaryの代わりにcontent要素を使う。
<?xml version="1.0" encoding="utf-8" ?>
<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="ja">

 <title>Atom feed 0.3 Test</title>
 <link rel="alternate" type="text/html" href="http://example.com"/>
 <author>
  <name>ぼく</name>
 </author>

 <entry>
  <title>ページ1</title>
  <link rel="alternate" type="text/html" href="http://example.com/page1"/>
  <id>http://example.com/page1</id>
  <modified>2007-01-02T00:00:00+09:00</modified>
  <issued>2007-01-01T00:00:00+09:00</issued>
  <summary>1つ目のページ</summary>
 </entry>

 <entry>
  <title>ページ2</title>
  <link rel="alternate" type="text/html" href="http://example.com/page2"/>
  <id>http://example.com/page2</id>
  <modified>2007-01-02T03:04:05+09:00</modified>
  <issued>2007-01-02T03:04:05+09:00</issued>
  <summary>2つ目のページ</summary>
 </entry>

</feed>



Atom1.0
簡単なAtomフィード文書を元にする。
xml:lang属性もfeed要素あたりに付けておく。
feedおよび各entryのid要素は"永久的で完全に一意的な識別子"なので、手軽に済ますならfeedやentryを一意に示すURLでよいと思う。
パーマリンクは一意と言えないという意見もある。それが理由かは分からないがAtomの基本的なフィードの例ではurlのtagスキームを、簡単なAtomフィード文書のサンプルではurnを使っている。)
feed全体のupdated日時が必須。
linkでrel属性を指定しないとrel="alternate"とみなされる。
summaryとcontentについてはAtom0.3と同様。
フィードリーダーによってはAtom1.0は対応していないので注意が必要。(他のフィードと併用するなど。)
<?xml version="1.0" encoding="utf-8" ?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">

 <title>Atom feed 1.0 Test</title>
 <link href="http://example.com"/>
 <link rel="self" href="http://example.com/atom1.xml"/>
 <author>
  <name>ぼく</name>
 </author>
 <updated>2007-12-12T14:20:37+09:00</updated>
 <id>http://example.com/atom1.xml</id>

 <entry>
  <title>ページ1</title>
  <link href="http://example.com/page1"/>
  <summary>1つ目のページ</summary>
  <updated>2007-01-01T00:00:00+09:00</updated>
  <id>http://example.com/page1</id>
 </entry>

 <entry>
  <title>ページ2</title>
  <link href="http://example.com/page2"/>
  <summary>2つ目のページ</summary>
  <updated>2007-01-02T03:04:05+09:00</updated>
  <id>http://example.com/page2</id>
 </entry>

</feed>



補足:日付のタイムゾーンについて
フィードリーダーによっては、タイムゾーンが正しく読めない? UTC (例:2005-11-16T02:27Z)で配信する?


関連記事: RSS/Atomフィードを生成したりSitemapを作成するPHPライブラリ


参考:
RSS1.0
 RSS(RDF Site Summary)によるサイト情報の要約と公開 (RSS1.0についての解説)
 RDF Site Summary (RSS) 1.0 (RSS1.0仕様書の和訳)
RSS2.0
 RSS 2.0 Notes (RSS2.0仕様書を元にした解説)
 RSS 2.0 Specification 日本語訳 - futomi's CGI Cafe (RSS2.0仕様書の和訳)
 ホームページ作成 / Yaskey Diary (RSS2.0のシンプルな例)
Atom0.3
 2章 Atomフォーマット - The Atom Syndication Format (Atom0.3仕様書の和訳)
Atom1.0
 Atom - RSS改訂の試み (Atom1.0についての解説)
 RFC 4287 The Atom Syndication Format 日本語訳 - futomi's CGI Cafe (Atom1.0仕様書の和訳)
 An overview of the Atom 1.0 Syndication Format (Atom1.0の解説)
その他
 Web標準の日時の形式 | Web::Blogoscope (日付形式について)
 RSS1.0とRSS2.0 - fox.tech - by fox_b (RSS仕様の分裂について)

0 件のコメント:

ブログ アーカイブ

tags