0byt3m1n1
Path:
/
data
/
0
/
0
/
69
/
155
/
69155
/
user
/
70391
/
cgi-bin
/
movabletype
/
docs
/
[
Home
]
File: mttrackback.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>トラックバックの技術仕様</title> <link rel="stylesheet" href="doc-styles.css" type="text/css"/> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> </head> <body> <h3>トラックバックの技術仕様</h3> <p><a name="__index__"></a></p> <!-- INDEX BEGIN --> <ul> <li><a href="#name">名称</a></li> <li><a href="#authors">作者</a></li> <li><a href="#version">バージョン</a></li> <li><a href="#description">説明</a></li> <li><a href="#sending_a_trackback_ping">トラックバックpingの送信</a></li> <li><a href="#retrieving_trackback_pings">トラックバックpingの取得</a></li> <li><a href="#autodiscovery_of_trackback_ping_urls">トラックバックping先URLの自動検知</a></li> <li><a href="#examples">例</a></li> <ul> <li><a href="#sample_trackback_implementation">トラックバックの実装例</a></li> <li><a href="#sample_autodiscovery">自動検知の例</a></li> </ul> <li><a href="#changes">変更事項</a></li> <ul> <li><a href="#1.1_(october_10,_2002)">1.1 (2002年10月10日)</a></li> <li><a href="#1.0_(august_28,_2002)">1.0 (2002年8月28日)</a></li> </ul> <li><a href="#credits">謝辞</a></li> </ul> <!-- INDEX END --> <hr/> <p> </p> <h1><a name="name">名称</a></h1> <p>mttrackback - トラックバックの技術仕様</p> <p> </p> <hr/> <h1><a name="authors">作者</a></h1> <p>Benjamin、Mena Trott、movabletype.org</p> <p> </p> <hr/> <h1><a name="version">バージョン</a></h1> <p>1.1</p> <p> </p> <hr/> <h1><a name="description">説明</a></h1> <p>このドキュメントは、トラックバックを説明しています。トラックバックは、ウェブサイト間での一対一のコミュニケーションと通知を可能にするフレームワークです。 トラックバックのメカニズムは、<em>トラックバックping</em>という1つのリクエストが「リソースAはリソースBに関連またはリンクしている」と告げていることによります。 1つのトラックバック「リソース」は、標準のURIである<em>トラックバックping先URL</em>で表します。</p> <p>トラックバックを使うと、サイト間で関連したリソースについてコミュニケーションができます。 たとえば、ブロガー(ウェブログ作成者)AがブロガーBに、何か面白いことや関連することやショックなことを書いたと通知したい場合、AはBにトラックバックpingを送信します。 それによって、以下の2つが達成できます。</p> <ol> <li> ブロガーBは、自分のサイトにある特定の投稿を参照したすべてのサイトを自動的にリストでき、ブロガーBのサイトの読者は、ブロガーAの投稿を含むウェブ中の関連した投稿を読むことができます。 <p></p> <li> pingは、別のブロガーのエントリーとあなたのエントリーの間に、確かで明白なリンクを提供します。これは、外部のアクション(あなたのエントリーへのリンクを誰かがクリックすること)による、リンク元ログのような暗示的なリンクとは異なります。 <p></p></ol> <p> </p> <hr/> <h1><a name="sending_a_trackback_ping">トラックバックpingの送信</a></h1> <p>トラックバックはRESTモデルを使っています。RESTモデルでは、リクエストが標準のHTTP呼び出しによって作られます。 トラックバックpingを送信するため、クライアントはサーバーに標準のHTTPリクエストを送信し、簡単なXMLフォーマットで応答を受信します(詳細は後述参照)。</p> <p>トラックバック・システムでは、トラックバックpingを受信するURLのことをトラックバックping先URLといいます。 典型的なトラックバックping先URLは<em><a href="http://www.foo.com/mt-tb.cgi/5">http://www.foo.com/mt-tb.cgi/5</a></em>のようなフォーマットを取ります。このときの<code>5</code>はトラックバックのIDです。 サーバーの実装は、トラックバックping先URLのために適したフォーマットであれば、どんなフォーマットも採用できます。クライアントの実装は、特定のフォーマットに依存しないはずです。</p> <p>pingを送信するため、クライアントは、HTTP POSTリクエストをトラックバックping先URLに送ります。 リクエスト・コンテンツは、コンテンツ・タイプ<code>application/x-www-form-urlencoded</code>のものであるはずです。 たとえば、<em><a href="http://www.foo.com/mt-tb.cgi/5">http://www.foo.com/mt-tb.cgi/5</a></em>というURLへのpingリクエストは以下のようになります。</p> <pre> POST <a href="http://www.foo.com/mt-tb.cgi/5">http://www.foo.com/mt-tb.cgi/5</a> Content-Type: application/x-www-form-urlencoded title=Foo+Bar&url=<a href="http://www.bar.com/&excerpt=My+Excerpt&blog_name=Foo">http://www.bar.com/&excerpt=My+Excerpt&blog_name=Foo</a></pre> <p>注: 古いバージョンのトラックバック仕様では、pingがHTTPのGETリクエストを使って送られます。 この動作は軽視されています。GETリクエストのサポートは2003年1月に、Movable Typeの実装から削除されました。</p> <p>以下のパラメータが使用できます。</p> <ul> <li><strong><a name="item_title">title</a></strong><br/> </li> エントリーのタイトル。 <p></p> <li><strong><a name="item_excerpt">excerpt</a></strong><br/> </li> エントリーの概要。 Movable Typeでは、この文字列が256文字以上の場合は252文字に削られ、最後に「<code>...</code>」が付きます。 <p></p> <li><strong><a name="item_url">url</a></strong><br/> </li> エントリーのパーマリンク(permalink)。 ほかのどのパーマリンクとも同様に、これは、対象のエントリーをリンクするときに使われるので、HTMLページ上にある実際のエントリーのできるだけ近くに向いているはずです。 <p></p> <li><strong><a name="item_blog_name">blog_name</a></strong><br/> </li> エントリーが投稿されたウェブログの名前。 <p></p></ul> <p>Movable Typeでは、上記のパラメータのうち、<em>url</em>だけが必須です。 <em>title</em>がない場合は、<em>url</em>の値がタイトルとして送られます。</p> <p>上のクエリーに対しての応答は、アプリケーション・レベルのエラー検出を有効にする簡単なXMLフォーマットで記述されています。HTTPレベルのエラーは、たとえば、トラックバック先のURLがサーバー上に存在しない場合にping送信すると、<code>404</code>エラーが返されるなどの形を取ります。</p> <p>ping送信に成功すると、以下の応答が返ります。</p> <pre> <?xml version="1.0" encoding="iso-8859-1"?> <response> <error>0</error> </response></pre> <p>ping送信に失敗すると、以下の応答が返ります。</p> <pre> <?xml version="1.0" encoding="iso-8859-1"?> <response> <error>1</error> <message>The error message</message> </response></pre> <p>アプリケーションはもちろん、将来必要なときに備え、フィールドを追加できるようにしておくべきです。 ただし、応答のXML構造は将来も同じです。</p> <p> </p> <hr/> <h1><a name="retrieving_trackback_pings">トラックバックpingの取得</a></h1> <p>1つのトラックバックping先URLに送ったpingのリストを得るには、HTTPのGETリクエストを、クエリー文字列の<em>?__mode=rss</em>と共にトラックバックping先URLに送ります。 POSTからGETへの切り替えのための移行期間が終わった後、仕様の将来の更新では、GETリクエストをトラックバックping先URLに送るとpingのリストを返すように簡素化される可能性があります。</p> <p>GETリクエストの一例を以下に挙げます。</p> <pre> GET <a href="http://192.168.1.103/mt/mt-tb.cgi/3?__mode=rss">http://192.168.1.103/mt/mt-tb.cgi/3?__mode=rss</a></pre> <p>このリクエストへの応答は、このリクエストに対するエラーが同じフォーマットで返るか、<code><response></code>タグに挟まれたRSSマークアップに、そのトラックバック・アイテムのトラックバックpingが列挙されているかのいずれかです。</p> <p>以下に例を挙げます。</p> <pre> <?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></pre> <p><code><rss></code>と<code></rss></code>の間が実際のRSSデータです。残りの部分は単に応答に使うタグで、削除できます。</p> <p> </p> <hr/> <h1><a name="autodiscovery_of_trackback_ping_urls">トラックバックping先URLの自動検知</a></h1> <p>トラックバックのクライアントには、固有のURLやウェブログ・エントリーのトラックバックping先URLを決定する方法が必要です。 サーバーは、サーバーで生成されるページにRDFを埋め込んでいるはずです。RDFはエントリーについてのメタデータを表し、それによってクライアントはトラックバックping先URLを自動検知できるようになります。</p> <p>以下にRDFの一例を挙げます。</p> <pre> <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></pre> <p>注: 現在のバリデータがXHTML内に埋め込まれたRDFによって停止するという理由から、ページに検証動作を望む場合は、上記のRDFを、以下のようにHTMLコメント内に囲んでおくことも考慮してください。</p> <pre> <!-- <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"; ... </rdf:RDF> --></pre> <p>これは完璧なソリューションではありませんが、一時的な解決策になります。</p> <p>上記の<em>dc:</em>要素は標準のDublin Core要素です。<em>trackback:ping</em>は、以下のURLにあるRSS 1.0/2.0用のトラックバック・モジュールから来ます。 <em><a href="http://madskills.com/public/xml/rss/module/trackback/">http://madskills.com/public/xml/rss/module/trackback/</a></em>.</p> <p>URLが<em>my_url</em>の場合、クライアントは以下のステップに従うはずです。</p> <ol> <li> HTTP GETリクエストを送り、<em>my_url</em>にあるページ・コンテンツを取得します。 <p></p></li> <li> 埋め込まれたRDFのページ・コンテンツを走査します。 ページには、埋め込まれたRDFのインスタンスが複数ある可能性があります。クライアントは、<em>dc:identifier</em>が<em>my_url</em>に一致するブロックを拾い上げるはずです。 <p></p></li> <li> <em>trackback:ping</em>値をRDFブロックから抽出します。 これがトラックバックping先URLです。 <p></p></li></ol> <p>クライアントは、トラックバックping先URLを限定すると、トラックバックpingを送信できるようになります(「<a href="#sending_a_trackback_ping">トラックバックpingの送信</a>」を参照)。</p> <p>自動検知コードの例は下記の「<a href="#examples">例</a>」を参照してください。</p> <p> </p> <hr/> <h1><a name="examples">例</a></h1> <p> </p> <h2><a name="sample_trackback_implementation">トラックバックの実装例</a></h2> <p>Movable Type以外のシステムにトラックバックを実装しようと考えている開発者をサポートするため、当社はMovable Typeに依存しないトラックバックのスタンドアロン型実装をリリースしています。 この実装では、HTTPリクエストを介して送られたpingを受け取り、pingをローカルのファイルシステムに保存し、RSSフォーマットで固有のトラックバック・アイテムに送ったpingの一覧を返すことができます。 また、任意でRSSを静的に生成することもできます。 この機能は、たとえば、サイトのサイドバーに、過去15のトラックバックpingのリストを含めるのに役立ちます。</p> <p>スタンドアロン型の実装は、<em><a href="http://www.movabletype.org/downloads/tb-standalone.tar.gz">http://www.movabletype.org/downloads/tb-standalone.tar.gz</a></em>からダウンロードできます。</p> <p>これはArtistic Licenseの適用を受けてリリースされています。 Artistic Licenseの条件は、<em><a href="http://www.perl.com/language/misc/Artistic.html">http://www.perl.com/language/misc/Artistic.html</a></em>を参照してください。</p> <p>インストールと使用方法の説明は、<em><a href="http://www.movabletype.org/docs/tb-standalone.html">http://www.movabletype.org/docs/tb-standalone.html</a></em>を参照してください。</p> <p> </p> <h2><a name="sample_autodiscovery">自動検知の例</a></h2> <pre> use LWP::UserAgent;</pre> <pre> sub discover_tb { my $url = shift;</pre> <pre> my $ua = LWP::UserAgent->new; $ua->agent('TrackBack/1.0'); $ua->parse_head(0); ## したがってHTML::HeadParserは必要ありません。 $ua->timeout(15);</pre> <pre> ## 1. GETリクエストを送信し、ページ・コンテンツを取得します。 my $req = HTTP::Request->new(GET => $url); my $res = $ua->request($req); return unless $res->is_success;</pre> <pre> ## 2. 埋め込まれたRDFのページ・コンテンツを走査します。 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;</pre> <pre> ## 3. trackback:ping値をRDFから抽出します。 ## 'trackback:ping'を探しますが、'about'に戻ります。 if ($rdf =~ m!trackback:ping="([^"]+)"!) { return $1; } elsif ($rdf =~ m!about="([^"]+)"!) { return $1; } } }</pre> <p>このPerlコードは、<em>discover_tb</em>というサブルーチンを定義しています。 URLがあると、このサブルーチンはそのURLに対応するトラックバックping先URLを検知しようとします。 それを検知すると、サブルーチンはトラックバックping先URLを返します。検知できない場合は、<code>undef</code>を返します。</p> <p> </p> <hr/> <h1><a name="changes">変更事項</a></h1> <p> </p> <h2><a name="1.1_(october_10,_2002)">1.1 (2002年10月10日)</a></h2> <ul> <li> トラックバックpingがHTTPのGETではなくPOSTを使って送信されるようになりました。 古い動作は軽視されており、GETへのサポートは2003年1月に中止しました。 <p></p></li> <li> RDFでは、トラックバックping先URLは、<em>rdf:about</em>ではなく、<em>trackback:ping</em>に保存されるようになりました。 <p></p></li> <li> サンプルのトラックバックping先URLのフォーマットを、クエリー文字列の代わりにPATH_INFOを使うように変更しました。 <p></p></li> <li> 自動検知用の埋め込まれたRDFによってページが検証できなくなる問題を解消しました。 <p></p></li> <li> 自動検知用のサンプル・コードを追加しました。 <p></p></li></ul> <p> </p> <h2><a name="1.0_(august_28,_2002)">1.0 (2002年8月28日)</a></h2> <p>最初のリリース</p> <p> </p> <hr/> <h1><a name="credits">謝辞</a></h1> <p>トラックバックをRESTのように作成するため指導していただいたPaul Prescod氏およびその他の方々に感謝いたします。</p> <hr size="1" color="#CCCCCC"> <span class="copyright">Copyright (c) 2001-2004 Six Apart. All Rights Reserved.</span> </body> </html>