トップ> ブログCGI> 普通のWebサイトにRSSフィードを実装してみる
普通のWebサイトにRSSフィードを実装してみる
普通のWebサイトでもRSSを実装してみようということでインターフェースを中心にまとめています。
(目次)
1.RSSとは?
2.なにをどうするのか?その流れ
3.メリットは?
4.RSS1.0のテンプレートと実例
5.RSSフィードが更新されたことをRSSフィード収集サーバへ通知する
1.RSSとは?
RSSは、参考サイトにあるようにいろいろな規格が乱立しているようです。
今回は、その中でも一般的だと思われるRSS1.0を実装します。
最近では、ATOM0.3も併せて実装しているところもあります。
また、RSSの詳細な情報については、以下の参考サイトを参照してください。
(参考サイト)
ウィキペディア
歴史的な経緯、変遷やバージョンの説明等があります。
http://ja.wikipedia.org/wiki/RSS
神崎正英さんのページ
RSS/RDFの詳細な説明があります。
TOP
http://www.kanzaki.com/
RSS -- サイト情報の要約と公開
http://www.kanzaki.com/docs/sw/rss.html
宮川さんのぺ−ジ
http://blog.bulknews.net/cookbook/blosxom
webUpdates.ping
http://blog.bulknews.net/cookbook/blosxom/pings/ping_to_hatena.html
BLOG HACKの作者さんです。私もお世話になりました。
http://hacks.bloghackers.net/
nagashimaさんのページ
http://hail2u.net/
Userland
Weblogs.Comを運営し、Blog等の更新通知を受け付けます。
そのI/Fが公開されており、他のPing受付サーバでも
利用されています。
http://www.xmlrpc.com/weblogsCom
2.なにをどうするのか?その流れ
(1)サイト情報やRSSに掲載する記事のタイトルと概要を決める
項番4を参照。
(2)拡張子 .rdfが表示されるように.htaccessを作成する
.htaccessファイルの中身は、以下のような感じです。
SSIを動作させたくなければ、最後の行は不要です。
最低限、 AddType text/xml .rdfは必要です。
DirectoryIndex index.rdf
AddType text/xml .rdf
AddHandler server-parsed .rdf
(3)RSSフィードのファイル:index.rdfの置き場所を決める
他のサイトを見る限り
/rss/index.rdf
とか
/index.rdf
が多いようです。
(4)RSSフィードを作成する
項番4を参照。
(5)TOPページまたは各ページにRSSフィードの置き場所を記述する
<head>〜</head>の中に
<link rel="alternate" href="/rss/index.rdf"
type="application/rss+xml" title="RSS" />
を追加します。
例では、RSSの場所は /rss/index.rdfとしています。
これは、RSS-FEEDリーダがRSSの場所を見つけさせるため、
または、項番5のweblogUpdates.pingをサーバへ投げたときに
RSSの場所が分かるようにするため。
(だと思います。)
例えば、最近、公開されたブラウザのFirefoxやsafariは
htmlにこの記述があると、RSSのマークを表示するようになっています。
(6)pingサーバへ通知する
項番5を参照。
3.メリットは?
(1)RSSフィード
a.自サイトの更新情報が分かります。
b.RSSフィードリーダーで更新情報が読めるようになります。
c.RSSフィードを収集しているサーバに更新通知(uweblogUpdates.ping)を
送れば、更新情報の露出がおおいに増えます。
d.更新する意欲が多分、湧いてくるでしょう。
4.RSS1.0のテンプレートと実例
今回は、仮に以下のようなサイト情報、及び記事があるとします。
この例が、実際にどのようにRSSファイルに反映されるかを
対比出来るようようにします。
(1)サイト情報
a.サイトURL
http://www.hoge.abcd/
b.サイト名
RSSを研究するサイト
(2)記事
以下のように更新された記事が2ページあるとします。
a.記事1
i.記事名
RSSの形式
ii.記事の概要
RSSの形式を実例入りで説明します。
iii.記事のURL
http://www.hoge.abcd/1.html
b.記事2
i.記事名
RSS更新通知
ii.記事の概要
RSSが更新されたことを収集サーバへ通知します。
iii.記事のURL
http://www.hoge.abcd/2.html
(3)実例
<?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://www.hoge.abcd/">
<title>RSSを研究するサイト</title>
<link>http://www.hoge.abcd/</link>
<description>サイト概要説明です</description>
<dc:date>2005-09-29T15:33:45+0900</dc:date>
<dc:publisher>ほげほげです</dc:publisher>
<dc:language>ja-jp</dc:language>
<items>
<rdf:Seq>
<rdf:li rdf:resource="http://www.hoge.abcd/1.html" />
<rdf:li rdf:resource="http://www.hoge.abcd/2.html" />
</rdf:Seq>
</items>
</channel>
<item rdf:about="http://www.hoge.abcd/1.html">
<title>RSSの形式</title>
<link>http://www.hoge.abcd/1.html</link>
<description>RSSの形式を実例入りで説明します。</description>
<dc:date>2005-08-17T11:54:45+0900</dc:date>
<dc:creator>ほげほげの部下</dc:creator>
</item>
<item rdf:about="http://www.hoge.abcd/2.html">
<title>RSS更新通知</title>
<link>http://www.hoge.abcd/2.html</link>
<description>RSSが更新されたことを収集サーバへ通知します。
</description>
<dc:date>2005-08-27T04:04:25+0900</dc:date>
<dc:creator>ほげほげの部下</dc:creator>
</item>
</rdf:RDF>
5.RSSフィードが更新されたことをRSSフィード収集サーバへ通知する
HTTPヘッダーも加えて表記しています。
結局、XML-RPCを利用していようとも、HTTPプロトコル上で動作するので
XML-RPCモジュールを組み込むよりも、SOCKET通信したほうが早いでしょう。
別に、perlプログラムを公開します。
※レギュレーションは、上記のWeblogs.Comのページを参照ください。
(1)送信
POST /RPC2 HTTP/1.0
User-Agent: Radio UserLand/7.1b7 (WinNT)
Host: rpc.weblogs.com
Content-Type: text/xml
Content-length: 250
<?xml version="1.0"?>
<methodCall>
<methodName>weblogUpdates.ping</methodName>
<params>
<param>
<value>サイト名など</value>
</param>
<param>
<value>サイトのURL</value>
</param>
</params>
</methodCall>
(2)受信
受信は、flerrorの値がなにかで正常終了なのか?異常終了なのか判断します。
異常終了の場合は、messageの内容を参照すれば分かります。
HTTP/1.1 200 OK
Connection: close
Content-Length: 333
Content-Type: text/xml
Date: Sun, 30 Sep 2001 20:02:30 GMT
Server: UserLand Frontier/7.0.1-WinNT
<?xml version="1.0"?>
<methodResponse>
<params>
<param>
<value>
<struct>
<member>
<name>flerror</name>
<value>
<boolean>0</boolean>
</value>
</member>
<member>
<name>message</name>
<value>Thanks for the ping.</value>
</member>
</struct>
</value>
</param>
</params>
</methodResponse>

