: O. Yuanying

RSS で画像が表示されない

と、あるブログのRSSに貼られている画像が Google Reader で表示されないので、 コメント欄で報告してみたのですが、 画像のパスを相対パスで指定しているので一部のRSSリーダーでは読み込めないのでは?との返事。

そもそもRSSに含める画像のパスは絶対パスの方が良いんじゃないか?とか思ったのですが、 その言葉は飲み込んで、ちゃんと表示できるRSSリーダーを探してみると。

相対パスで画像が指定されている

livedoor Readerでは、フィードに含まれる画像のURLが「http://」から始まる絶対パスであることを前提としています。 ですが、URLが相対パスで指定されている場合でも、画像が含まれる記事のURLを基準にしてURLの解決を試みます。 ただし、複雑な相対パスを指定をした場合や、 imgタグ以外で画像を貼り付けている場合などは、画像のURLを解決できない場合があり、画像が表示されません。

Livedoorリーダーすげー。

RSSに含まれてる記事のURLから画像のURLをちゃんと解決してるんだなあ。 試してみるとちゃんと表示されている。

RSSに含まれる画像のURLの解釈の仕方

けど、その後にもう一つ疑問が出てきた。

Google Readerで画像が表示されなくておかしいなあと思い、 その画像のURLを調べたところちゃんと絶対パスになってたんですよね。

詳しくはGeekなページのコメント欄で報告した通りなのですが、 本来は「http://www.geekpage.jp/blog/img/2008/0701-0.gif」と解釈してほしいと思われる画像のパスが、 Google Readerでは「http://www.geekpage.jp/img/2008/0701-0.gif」となっていた。

どうも Google Reader でもRSSに含まれる相対パスは絶対パスに変換し直してるようじゃないですか。

要するに、

RSSのURL
http://www.geekpage.jp/rss.php
RSS内の記事のURL
http://www.geekpage.jp/blog/?id=2008/7/1/1
記事内の相対パス
img/2008/0701-0.gif

で、あった場合、相対パスの解決を RSSのURL からの相対パスと見なして、

  • http://www.geekpage.jp/img/2008/0701-0.gif

とするか、

RSS内の記事のURLからの相対パスと見なして、

  • http://www.geekpage.jp/blog/img/2008/0701-0.gif

とするかの違いがあるみたい。

本来はどう解釈するのが正しいのかといところまで詳しく調べてないのですが、 RSS内に含まれる相対パスはそのRSSのURLからの相対パスと見なす方が正しい気がする。

ああ、けどhtmlにはベースURLを指定する base タグなるものがあったりもしたので、 RSSにも同じようなタグがあるのかもしらん。

ちなみに、いくつかのRSSリーダーを試してみたところ、

相対パスの解決を RSSのURL からの相対パスと見なす

  • Google Reader
  • Safari
  • Mail.app
  • Firefox 3

相対パスの解決を RSS内の記事のURLからの相対パスと見なす

  • Livedoor Reader

でした。