Blog

ApacheモジュールによるTrackBack Pingサーバの実装

By Hiroyuki OYAMA Sun Aug 29 20:17:53 2004

ApacheモジュールのTrackBack Pingサーバがあれば良いかもね、とか前々から雑談していたネタをやっと実装。mod_trackback version 0.1.6リリースします。

何のため?

モダンなWeblogツールやWeblogホスティングサービスを使う場合、TrackBackを受け付けるTrackBack Pingサーバは普通ついてますよね。なのでその辺の人たちには関係ないんです。関係するのは次のようなケース
  • Weblogツール使ってないけどTrackBackを受け付けたい
  • TrackBack機能が提供されていない
  • TrackBack Pingサーバを新たに用意したい
つまり、不自由なWeblogツール or サービスを使っているけどやっぱりTrackBack Pingを受け付けたい人や、オンラインストアやニュースサイトなどなど「WeblogじゃないけどTrackBackを受け付けたいWebサイト」の管理者が対象のお話。

単にTrackBack Pingサーバを置きたいのであればtb-standaloneを置けば良いのですが、例えばCGIプログラムを設置できないとか、CGIではパフォーマンス & 消費リソース的にNGとか色々と大人の事情があると思うんですよ。

mod_trackbackの用途

という背景から作ったこのmod_trackbackなんですが、このモジュールの主な用途はズバリTrackBackのホスティングです。Weblogツール&サービスからTrackBack Pingサーバの機能を分離することで、ツールやサービスに縛られずにTrackBack機能を提供・享受できます。Apacheモジュールならではの高速&低消費リソースというオマケ付きで。
もちろんホスティング用途ではなく、自分のWebサイトにTrackBack機能を組み込む用途にも使うことができます。

ちなみにmod_trackbackが提供するのはTrackBack PingサーバとしてTrackBack Pingを受け付ける仕事と、蓄積してあるTrackBackの情報をHTML・RSS・JavaScriptに整形して配信する機能だけです。TrackBack Pingを送信する仕事は他のツールを用意しましょう。

mod_trackbackの使い方

mod_trackbackのパッケージを取得したならば、次のような手順で展開・ビルドします。
$ tar zxvf mod_trackback-0.1.6.tar.gz
$ cd mod_trackback-0.1.6/
$ ./configure
$ make
# make install
もしApacheをホームディレクトリなどにインストールしている場合は、使用するapxsコマンドのパスをconfigureスクリプトに知らせてください。
$ ./configure --with-apxs=$HOME/apache/bin/apxs
ちなみにビルドおよび実行にはiconvが必要です。もしiconvを持っていないプラットホームの場合は別途GNU libiconvなどを取得しインストールしてください。

設定はhttpd.confで行います。例としてTrackBack Pingを受け付けるURLをhttp://example.jp/tbとし、データの保存するディレクトリを/tmp/tbと設定する場合は次のようにhttpd.confに追記します。
<Location /tb>
    SetHandler trackback
    TrackbackStorage /tmp/tb
</Location>
TrackbackStorageディレクティブはデータ保存用ディレクトリのパスを指定します。設定したらApacheを再起動すれば準備完了。

実際にTrackBack Pingを受け付けるには、TrackbackStorageディレクティブで指定したディレクトリにTrackBack IDに対応した名前のファイルを設置します。
$ touch /tmp/tb/example-tbid
# chown nobody /tmp/tb/example-tbid
ファイルを設置すると
http://example.jp/tb/example-tbid
でTrackBack Pingを受け付けるようになります。

受けとったTrackBack Pingは上記ファイルに保存されます。参照する場合は次のようなURLでアクセスします。
http://example.jp/tb/example-tbid?__mode=html
http://example.jp/tb/example-tbid?__mode=javascript
__mode=htmlの場合はHTMLで配信し、__mode=javascriptの場合はdocument.write()するJavaScriptで配信します。それぞれ
http://example.jp/tb/example-tbid?__mode=javascript&charset=EUC-JP
などと配信時のcharsetを指定できます。デフォルトはUTF-8で配信します。

というわけで、TrackBackの受信と配信はやりますが、TrackBack IDの決定や保存用のファイルを作るツールは別途用意してね、ということです。サンプルでTrackBackホスティングのサービスのサイトを用意していましたが訳ありでペンディング中。

mod_trackbackのHack

単一のディレクトリにTrackBackの情報を保持するあたりでピンと来た方も多いと思いますが、この構成だと大部分のファイルシステムで精々30000個ちょいのTrackBackしか設置できません。これじゃ小規模なサイト(え?十分?)でしか使えないので、任意のストレージが利用できるようプラグインの仕組みを用意してあります。
mod_trackbackはデータの保存用の関数、参照用の関数、あとデータ構造以下のように決めています。
typedef struct mtb_trackback_message_rec {
    struct mtb_trackback_message_rec *next;
    const char *id;
    const char *title;
    const char *excerpt;
    const char *blog_name;
    const char *url;
    time_t  date;
} mtb_trackback_message_rec;

int mtb_store_message(request_rec *r, mtb_trackback_message_rec *msg);
mtb_trackback_message_rec *mtb_load_message(request_rec *r, const char *id);
この辺のストレージ回りの実装しているのがデフォルトではstorage.cなんですが、configureスクリプトのオプション--with-storageで別のファイルをリンクできるようにしています。例えばTrackBackの情報をMySQLで管理したい場合は次のような手順で実装できます。
  1. mtb_store_message()およびmtb_load_message()関数を実装したmysql_store.cを作成
  2. configureスクリプトを--with-storage=mysql_store.cで実行
  3. make; make install
名前から推測できるとおりmtb_store_message()は受けとったTrackBack Pingの情報を持った構造体mtb_trackback_message_rec構造体のポインタを引数に呼び出されるので、関数側ではmtb_trackback_message_rec構造体の値をもとにデータベースに追記します。
mtb_load_message()関数はデータベースからTrackBackの情報を読み取り、その結果をmtb_trackback_message_rec構造体のリンクリストとして返します。簡単でしょ?

サンプルをかねてディレクトリを複数の階層にしてファイルシステム上の制限を回避するコードや、SQLiteに保存するコードを添付しようと思いましたが、ちょっと忙しいので後回しです。

ライセンスおよびダウンロード

mod_trackbackのライセンスはGPLとコマーシャルライセンスの2種類があります。GPLだと不便な場合や、保守・サポートサービスをご希望の場合はコマーシャルライセンスの取得をお薦めしています。詳しくは営業担当までお問い合わせください。
mod_trackback-0.1.6.tar.gz
ちなみにMac OS XとSolarisでしかテストしてないので他の環境だとどうだかちょっと謎です。それにしてもiconv_open(3)の引数がプラットホームによってバランバランなのは何とかならんのでしょうかねホントに。

TrackBackホスティングについて

忙しいのでホスティングサービスの方はもうちっと待って(汗) いちおうモノはほぼできてまして、Web上で登録すると
  • 新しいTrackBackの作成(受け口ね)
  • 他のサイトへのTrackBack送信
なんかができます。ちなみに作成時にはTrackBack Auto-Discovery付きの貼付け用HTMLを吐きますので楽ちん(ほんとか)。

Comments

Post a comment

Name:


URL:


Comments:


WebエンジニアのためのApacheモジュールプログラミングガイド

ApacheをHackする!
モジュールプログラミング強烈初体験!!
定価: 2,919円(税込)
ISBN: 4-7741-1799-4

hiroyuki_oyama IM status

Apache Users

Apache Modules

CPAN


Home > Blog > ApacheモジュールによるTrackBack Pingサーバの実装