この文書では、CSIを使って TrackBackを chalow で利用するための手順を解説します。 もちろん chalow 以外の Web日記・Weblogツールへも応用できます。
CSI(Client Side Include)とは、 JavaScript形式の情報ファイルをWebページに埋め込むという手法はです。 JavaScript feed とも呼ばれています。 私は「くっつき手法」と呼んでいます。 よく知られているSSI(Server Side Include)は サーバが元の Web ページに別データを埋め込む(サーバ側がインクルードする) ものですが、 CSIはクライアント(つまりブラウザ)が表示されたWebページに別データを埋め 込む(クライアント側がインクルードする)ものです。
TrackBackとは、 自分のBlogで他のBlogの内容を引用した際にその引用元のBlogに その旨を知らせるための仕組みです。 詳しくは「TrackBack 技術仕様書」 をご参照下さい。
chalowで生成したページでTrackbackを使うにあたって、 既存のTrackback CGIを改造し、 現在のTrackbackの件数をJavaScriptファイルで配信するようにしてみました。 これによりTrackbackを静的なBlogページに貼り付けることができます。
まず、Trackback CGIの改造手順を解説します。
print FH generate_rss($tb_id, $data, 15); close FH; } # from here if (open(FH, ">" . catfile($DataDir, $tb_id . '.js'))) { print FH "document.write('@{[scalar(grep {$_} @$data)]}');\n"; close FH; # 追加 } # to here respond_exit(); } elsif ($mode eq 'list') {
これで、ping を受けるたびに tb_data/[TrackBackID].js というファイ ルが作成されるようになります。これは、以下のように現在の Trackback の数を write するだけの JavaScript プログラムです。
document.write('3');
これをBlogページに以下のように貼りつければOKです。 すると先ほど図のようにそのentryへの現在のTrackback数が表示されます。 クリックすればTrackbackを見ることができます。 20030924はentryのIDです。
<a href="tb/tb.cgi?__mode=list&tb_id=20030924">TrackBack(<script language="JavaScript" src="tb/tb_data/20030924.js"></script>)</a>
以下、chalow (1.X〜) での設置手順です。
<a href="tb/tb.cgi?__mode=list&tb_id=<TMPL_VAR name=id>">TrackBack(<script language="JavaScript" src="tb/tb_data/<TMPL_VAR name=id>.js"></script>)</a>
$ ls tb/ tb.cgi tb_data/ ...
これにより、各entryがTrackbackを受けることができるようになりました。 では、自分がリンクしたサイトへTrackbackを送るにはどうしたらよいでしょ うか。 chalowはTrackback ping の送信をサポートしていませんが、 設置した Trackback CGI を使って Trackback ping を送信することができます。
相手方の状況によって時々文字化けすることもありますのでご注意下さい。 私は 「ぶろっぐぴんぴん」というWindowsソフトを使って Trackback pingを送っています。 BlogPeople というBlog更新情報サイトでダウンロードできます(登録が必要です)。
ところで、 プログラムからそのWeblogのTrackbackのURLが一発で分かるようにするために Trackback Auto Discovery という仕様があります。 Blog Developer's Cookbook の Trackback Auto Discovery の解説ページ を参考に、chalow での設定方法を解説します。
といっても、 設定ファイルのentryのテンプレート($entry_template)に以下を追加するだけです。 Trackback CGI の URL に注意。
<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="${clog_url}<TMPL_VAR name=ymd>.html" trackback:ping="${clog_url}tb/tb.cgi/<TMPL_VAR name=id>" dc:title="$changelog_name <TMPL_VAR name=ymd>" dc:identifier="${clog_url}<TMPL_VAR name=ymd>.html" /> </rdf:RDF>
解説ページのサンプルプログラムの実行結果:
% ./tb_discovery.pl http://nais.to/~yto/clog/2003-03-31.html http://nais.to/~yto/clog/tb/tb.cgi/20030331 (たつをの ChangeLog 20030331)
なお、日付別にページを出力する設定 ($day_page_mode = 1) でなければ 日付単位では機能しないと思われます。
この文書は「たつをの ChangeLog」 の記述 ▼ ▼ ▼ を集めて来て加筆修正したものです。