RSSフィードのオートディスカバリー(Auto Discovery)を探す方針
Auto Discoveryはheadタグ内にlinkタグで指定されますが、すべてのlinkタグがオートディスカバリーとは限らないため、linkタグの中から適切なタグを見つける必要があります。
<link rel="alternate" type="application/rss+xml" title="F.Ko-Jiの「一秒後は未来」 RSSフィード" href="http://feeds.feedburner.jp/blog-fkoji" />
↑ オートディスカバリーの例
linkタグを見つけるためだけにHTMLのパーサーを使うのはめんどくさいので、マッチングを何度か利用することにします。おおまかな流れは以下の通り。
- 与えられたHTMLから link タグをマッチングですべて抜き出します。
- それぞれのlinkタグについて以下の処理をおこないます。
- rel=”alternate” 属性があるか確認します。
- type属性を探します。
- type属性の値が以下の5つのいずれかであることを確認します。
- application/rss+xml
- application/atom+xml
- application/rdf+xml
- application/xml
- text/xml
- href属性を探します。
- href属性の値を絶対URLに変換します。
- 変換後のURLが不正なURLでないことを確認します。(URL表現的にとか、プライベートアドレスでないかとか)
- URLを取得できたものの中にapplication/rss+xm、application/atom+xml、application/rdf+xmlのいずれかが含まれていれば、application/xml、text/xmlのものは無視します。なぜならサイトマップのオートディスカバリーである可能性があるためです。
という流れで大体うまくフィードのURLを取得することができます。忘れがちなのがURLを絶対URLに変換しないといけないとこでしょうか。はてなブックマークのAuto Discoveryが普通にスラッシュ始まりで指定されていたので気づきました。
最後のサイトマップの可能性は、細かいことですがたまにあるので念のため意識しておくといいです。
コメントを残す