日記
TrackBack Ping URL?__mode=rss対応 from holic.org (20:18)Edit

コメント欄に書こうと思ったけれども、長くなりそうだったんでこっちに書きます。

TrackBackの?__mode=rssで返されるXMLメッセージはRSSと言っていますけれども、実際にはRSS風の表現というだけのものです。で、それをRSS 1.0に準拠させるというのは、TrackBackの仕様からは逸脱するけれども、標準的なリッチな情報を返すようにするという選択になります(=Bulknewsの現在の実装)。しかしその選択はTrackBackとの互換性を放棄するという意味も持ちます。

Responseノードが必要かどうかというのも同様の問題で、TrackBackの仕様に準拠するのならば、その実用性はどうであれResponseノードは必須になります。TrackBackの仕様に準じて?__mode=rssで返されるXMLをparseする場合は、Responseノードを意識してXMLを解釈するコードを書くことになるので、Responseノードが存在しないXMLはうまくparse出来ないのが普通でしょう。

ただし、Responseノードに意味がないと多くの人が考え、それを省いて標準的なRSSを返すような実装を行う例が増えてきた場合は、それをparseするコードを書く場合に、Responseノードの有無をチェックして、ある場合もない場合も妥当に処理を行うようなコードを書く人が出てくるかもしれません。しかし現時点では、TrackBackの仕様に準じた実装を行うのが主流でしょう。

結局のところは、mashさんが何を目的として?__mode=rss機能を実装しようと思ったのかが問題となります。

TrackBack互換の機能を実装することによって、TrackBack用アプリケーションからの呼び出しにB2が正しく応答するようにしたいのならば、たとえRSS 1.0を返したいと思ったとしても、TrackBackの仕様に準じた(RSSもどき)実装を行わないと意味がありません。呼び出しインターフェースがTrackBack互換でも、そこで返される内容がTrackBack互換でないのならば、TrackBack用アプリケーションが正しく解釈できる保証はないからです。

現在のBulknewsの実装のように、TrackBack互換というよりはRSS互換を目的とするのならば、今度はResponseノードが逆に邪魔になってきます。Responseノードがあることで、汎用のRSS Readerはうまく解釈できなくなってしまうでしょう。

というわけで、TrackBack用アプリケーションにB2を対応させたいというのならば、RSS 1.0対応は捨ててTrackBackの仕様に完全に準拠した方がいいでしょう。そうでないのならば、BulknewsのようにTrackBackとの互換性は無視して、正しいRSS 1.0を返す(=汎用的なRSS Readerで読めるようにする)方がまだ対応するアプリケーションが多くなると思います。

あと、現在の実装における細かい問題をついでに書いておきます。

  • 各アイテムが使っている名前空間が宣言されていない(rdf:とか)
  • ?__mode=rssに限らず、全体としてstripslashesがされていない場合がある(シングルクォーテーションが不必要なところでエスケープされている)
  • XML中の各要素が正しくエスケープ(htmlspecialchars)されていない(ので内容によってはエラーが出る)

以上の問題は、http://holic.org:8080/b2tbrss.php?p=18で返されるメッセージ(のソース)を見ると分かると思います。

とまるで一般論のようにいろいろ書きましたが、その陰には、TrackBack Tracerが簡単に解釈できるようなTrackBack完全互換のメッセージを返してもらえるようになるとありがたいなーという個人的な要望が隠されているわけです。あんまり隠れていないかな?(笑)

Published At2003-03-22 00:00Updated At2003-03-22 00:00