名称mttrackback - トラックバック技術仕様書
著者Benjamin and Mena Trott, movabletype.org
バージョン1.1
概要この文書は web サイト間のピアツーピア通信/通知のためのフレームワークであるトラックバックについて解説したものです。トラックバックの中心となっているアイディアはトラックバック ping です。トラックバック ping は「リソース A は リソース B に関連/リンクしています」という内容を通知するリクエストです。トラックバックの「リソース」とはトラックバック Ping URLであり、これはいわゆる URI のことです。 トラックバック を使うことで複数のサイトが、お互い関連するリソースに関する通信が可能になります。ウェブロガー A さんが何かおもしろいこと(あるいはB さんに関連していること、またはショッキングなこと)を書いたので、そのことをウェブロガー B さんに伝えたいとします。A さんはトラックバック ping を B さんへ送ります。これによって、次の2つの内容が実現されます。
(サーバへ)トラックバック Ping を送信するトラックバックは REST アーキテクチャを採用しており、リクエストは普通のHTTP プロトコルを使っておこなわれます。トラックバック ping の送信は、クライアントからサーバへ HTTP リクエストを送ることで実現されます。サーバからの応答は簡単な XML の形式で返ってきます(詳細は後述)。 トラックバックシステムにおいて、トラックバック ping を受信するための URL はトラックバック Ping URL と呼ばれます。トラックバック Ping URL は http://www.foo.com/mt-tb.cgi/5 のような形式で、この例の場合最後の ping の送信は、クライアントがトラックバック Ping URL に対し、HTTP POST
リクエストを送信することで実現されます。コンテンツのコンテントタイプは必ず POST http://www.foo.com/mt-tb.cgi/5 Content-Type: application/x-www-form-urlencoded title=Foo+Bar&url=http://www.bar.com/&excerpt=My+Excerpt&blog_name=Foo 注意: 古いバージョンのトラックバック仕様書では、トラックバック ping を HTTP GET リクエストとして送信するようになっていました。GET による ping 送信は廃止で、 Movable Type 2003年1月以降のバージョンではサポートされません。 指定可能なパラメータは次の通りです。
Movable Type の実装においては、上記のうち url だけが入力必須項目になっています。title が設定されていない場合、url の値が title として使われます。 上記リクエストに対するレスポンスは、アプリケーションレベルでエラー検知ができるように簡単な XML 形式で返されます(HTTP レベルのエラーは数値で返されます。たとえば、トラックバック URL に指定されたコンテンツが存在しないときは、 トラックバック ping の送信に成功すると、サーバから次のようなレスポンスが返ります。 <?xml version="1.0" encoding="iso-8859-1"?> <response> <error>0</error> </response> 失敗した場合は次のようなレスポンスになります。 <?xml version="1.0" encoding="iso-8859-1"?> <response> <error>1</error> <message>The error message</message> </response> アプリケーションには今後、新たな送信の項目が追加されていくかもしれませんが、レスポンスの XML 構造は変わりません。
(サーバから)トラックバック Ping の一覧を受信する特定のトラックバック Ping URL に対する ping の一覧をサーバから受信するには、(サーバ側の)トラックバック Ping URL の後に ?__mode=rss という query string を付けて、HTTP GET リクエストを送信します。なお、(前項で述べた)トラックバック Ping の GET から POST への変更猶予期間が済んだら、単にトラックバック Ping URL に GET リクエストを送るだけで ping のリストを受信できるという簡単な仕様に変更されるかもしれません。 GET リクエストは次のようになります。 GET http://192.168.1.103/mt/mt-tb.cgi/3?__mode=rss このリクエストに対するレスポンスは、エラーの場合前述の内容と同じになります。成功の場合、トラックバック ping のリストが 例: <?xml version="1.0" encoding="iso-8859-1"?> <response> <error>0</error> <rss version="0.91"><channel> <title>TrackBack Test</title> <link>http://this.is/the/trackback/item/link/</link> <description>Description of the TrackBack item</description> <language>en-us</language> <item> <title>TrackBack Demo</title> <link>http://this.is/the/permalink/</link> <description>Excerpt</description> </item> </channel> </rss></response>
トラックバック Ping URL の自動検知サーバ側のトラックバック Ping URL をクライアントに自動的に検知させるには、トラックバック クライアントが特定の URL、あるいは ウェブログエントリに対応する トラックバック Ping URL を知るための方法が何か必要です。これを実現するためには、サーバの実装にあたり、生成するページごとに RDF を埋め込むようにする必要があります。RDF はエントリごとのトラックバック Ping URL の自動検知を可能にするためのメタデータです。 RDF は次のような形式になります。 <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"> <rdf:Description rdf:about="http://www.foo.com/archive.html#foo" dc:identifier="http://www.foo.com/archive.html#foo" dc:title="Foo Bar" trackback:ping="http://www.foo.com/tb.cgi/5" /> </rdf:RDF> 注意: XHTML へ RDF を埋め込むと、現状のバリデータではエラーになってしまうため、バリデータでチェックしたいときは、RDF 部分をコメント記号で囲むようにしてください。 <!-- <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" ... </rdf:RDF> --> 完全な解決方法とはいえませんが、応急処置にはなります。 dc: 要素は Dublin Core 標準に準拠した要素です。trackback:ping 要素は http://madskills.com/public/xml/rss/module/trackback/ の TrackBack Module for RSS 1.0/2.0 に準拠しています。 . (対象となるエントリの web ページ) URL my_url を与えられたクライアントは(トラックバック Ping を送信する前に)次のステップに従って動作します。
トラックバック Ping URL がわかったところでトラックバック ping の送信(トラックバック Pingの送信 参照)が可能になります。 自動検知コードの実装例は例の項に掲載しています。
例
トラックバックの実装例自分でトラックバックを実装しようという開発者に全体像を把握してもらうため、Movable Type に依存しない、スタンドアロン版のトラックバック実装をリリースしています。このシステムは HTTP リクエスト経由で ping を受信し、その内容をファイルシステム上に保存、そして特定のトラックバックアイテムに対する ping のリストを RSS 形式で返します。また、このシステムは必要であれば、スタティックな RSS ファイルを生成するようになっています。このソフトウェアは充分実用になるはずです。たとえばサイトのサイドバーに最新15個の ping リストを表示することも、これを使えば可能です。 トラックバックのスタンドアローン実装は http://www.movabletype.org/downloads/tb-standalone.tar.gz からダウンロードできます。 このソフトウェアは Artistic License の下で公開しています。Artistic License については http://www.perl.com/language/misc/Artistic.html で解説されています。 インストール方法と使い方については http://www.movabletype.org/docs/tb-standalone.html をご覧ください。
トラックバック URL 自動検知の実装例use LWP::UserAgent; sub discover_tb { my $url = shift; my $ua = LWP::UserAgent->new; $ua->agent('TrackBack/1.0'); $ua->parse_head(0); $ua->timeout(15); my $req = HTTP::Request->new(GET => $url); my $res = $ua->request($req); return unless $res->is_success; my $c = $res->content; (my $url_no_anchor = $url) =~ s/#.*$//; my $item; while ($c =~ m!(<rdf:RDF.*?</rdf:RDF>)!sg) { my $rdf = $1; my($perm_url) = $rdf =~ m!dc:identifier="([^"]+)"!; next unless $perm_url eq $url || $perm_url eq $url_no_anchor; if ($rdf =~ m!trackback:ping="([^"]+)"!) { return $1; } elsif ($rdf =~ m!about="([^"]+)"!) { return $1; } } } この Perl コードではサブルーチン discover_tb を定義しています。URL を与えられると、それに対応するトラックバック Ping URL を探します。見つかればトラックバック Ping URL を返し、見つからなければ、
変更履歴
1.1 (October 10, 2002)
1.0 (August 28, 2002)最初のリリース。
謝辞Paul Prescod さんをはじめ、トラックバックを REST アーキテクチャに沿った形にするのを助けてくれたみなさんに感謝します。 Copyright © 2001, 2002 Ben Trott and Mena Trott. All Rights Reserved. Japanese translation 2003 Yasushi Iwata 最終更新 2005-05-23 21:58:40 |
TrackBack Technical Specification の日本語訳。 |
© 2005-2011, Yasushi Iwata