ApacheモジュールのTrackBack Pingサーバがあれば良いかもね、とか前々から雑談していたネタをやっと実装。mod_trackback version 0.1.6リリースします。
何のため?
モダンなWeblogツールやWeblogホスティングサービスを使う場合、TrackBackを受け付けるTrackBack Pingサーバは普通ついてますよね。なのでその辺の人たちには関係ないんです。関係するのは次のようなケース- Weblogツール使ってないけどTrackBackを受け付けたい
- TrackBack機能が提供されていない
- TrackBack Pingサーバを新たに用意したい
単に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で管理したい場合は次のような手順で実装できます。
- mtb_store_message()およびmtb_load_message()関数を実装したmysql_store.cを作成
- configureスクリプトを--with-storage=mysql_store.cで実行
- make; make install
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送信