GNSでトラックバック/コメントを扱うための方法を解説します。WWWサーバにCGIの形で導入して、トラックバック/コメントを外部から受け付け、必要であれば公開することができます。

WWWサーバ環境は、*BSD・LinuxなどUNIX系のOSに、apacheを導入したものを想定しています。

  1. トラックバック/コメントとは
  2. GNSを導入する
  3. TB/CMの基本設定をする
  4. Update Pingの送信
  5. TB/CMログの管理
  6. TB/CMフィルタ

トラックバック/コメントとは

まず、トラックバック/コメントについて解説します。

トラックバック
トラックバックとは、「他の文書からのリンク要請のリクエスト」のことです。GNSでは、トラックバックを「TB」と省略することがあります。
公開されている文書aがあるとします。これに関連した文書bを作成したとき、文書aから文書bへのリンクがあると便利です。トラックバック機能がある場合、「文書aから文書bへのリンクを作ってください」というリクエストを送ることができます。
文書aがトラックバックを受け付けている場合、文書aには必ず「トラックバック受付を行うCGIへのリンクURL」が記述されています。このURLに対して、特定の方法で「文書aから文書bへのリンクを作ってください」という引数を追加してアクセスすることができます。このアクセスを、「トラックバックPing」といいます。
「トラックバックPing」が「トラックバック受付を行うCGI」に送られると、CGIはこれらの情報を処理して「トラックバックPingを受け付けました」という返事をします。この返事を無事受け取ることで、トラックバックの一連の処理が終了します。
GNSでは、日記のブロック単位で「トラックバック受付を行うCGI」へのリンクを自動作成することができます。このリンクのことを「トラックバックURL」と呼びます。GNSは、このURLへのトラックバックPingを受け取ったあと、まずこれを「TB/CMログフォルダ」に保存します。続いて、必要であればこの情報をメールで日記の管理者(自分)に送信します。最後に、必要であればこのログをブラウザで参照できるようにHTMLで出力し、日記にリンクを作成してこれを閲覧できるようにします。
また、GNSのWWW環境では、日記を編集する画面に「トラックバックの発行」を行うインターフェースを持っています。上の例での文書aにあたる「トラックバックURL」と、文書bにあたる「日記の各ブロック」を設定して、ブラウザの[Send]ボタンをクリックすることで、トラックバックを発行することができます。
コメント
コメントとは、その名の通り「文書に外部から追加する小文章」のことです。GNSでは、コメントを「CM」と省略することがあります。
GNSでは、日記のブロック単位で「コメント受付を行う入力欄」を自動作成することができます。このフォームのことを「コメントフォーム」と呼びます。GNSは、コメントフォームからの入力を受け取ったあと、まずこれを「TB/CMログフォルダ」に保存します。続いて、必要であればこの情報をメールで日記の管理者(自分)に送信します。最後に、必要であればこのログをブラウザで参照できるようにHTMLで出力し、日記にリンクを作成してこれを閲覧できるようにします。

GNSを導入する

GNSの解凍
▲GNSの解凍

トラックバック/コメント機能を使用するには、GNSをWWW環境で導入する必要があります。以下を参照して、まずGNSを導入してください。

トラックバック/コメントの受信プログラムは、GNSフォルダにある「トラックバック/コメントフォルダ」に格納されています。

また、これらを発信してもらうためのフォーム出力や、受信したトラックバック/コメントを表示するためのプログラムは、「GNSプログラムフォルダ」に格納されています。

投稿されたトラックバック/コメントのデータは、「トラックバック/コメントフォルダ」に格納されます。詳しくは「TB/CMログの管理」の項をご覧ください。

tbフォルダのコピー
▲tbフォルダのコピー
インストーラを使用せずにGNSの導入を行ったときは、GNSプログラムフォルダ内に納められている「「トラックバック/コメントフォルダ」を、一段上のフォルダ(GNSフォルダ)にコピーしてください。
右上図の例で示すと、「"GNS/gns400/tb"の内容を"GNS/tb"にコピーする」作業が必要になります。GNSプログラムフォルダに収められたままでは、トラックバック/コメントを動作させることができません。

TB/CMの基本設定をする

標準では、GNSのトラックバック/コメント機能はOFFになっています。以下の手順で、トラックバック/コメント機能をONにしてください。

受信側の設定ファイルを開く
受信側のconfig.phを開く
▲受信側のconfig.phを開く
「トラックバック/コメントフォルダ」にある、config.phを開きます。
受信許可フラグを設定する
$TB_RECEIVE = 0;
$CM_RECEIVE = 0;

$TB_RECEIVE = 1;
$CM_RECEIVE = 1;
$TB_RECEIVEを1にすると、トラックバックの受信を受け付けるようになります。
$CM_RECEIVEを1にすると、コメントの受信を受け付けるようになります。
受信通知フラグを設定する
$TB_NOTIFYMAIL = 0;
$CM_NOTIFYMAIL = 0;

$TB_NOTIFYMAIL = 1;
$CM_NOTIFYMAIL = 1;
$TB_NOTIFYMAILを1にすると、トラックバックを受信したとき、指定メールアドレスにそれを通知します。通知先は、後述する$TBCM_MAILTOで指定します。
$CM_NOTIFYMAILを1にすると、コメントを受信したとき、指定メールアドレスにそれを通知します。通知先は、後述する$TBCM_MAILTOで指定します。
トラックバック/コメントビュー作成フラグを設定する
$TBCM_MAKEVIEW = 0;

$TBCM_MAKEVIEW = 1;
$TBCM_MAKEVIEWを1にすると、トラックバック/コメントの一覧を表示するページを作成します。
受信通知の送付先を設定する
# トラックバック/コメント受信通知の送付先
$TBCM_MAILTO = 'yourmail@example.net';

$TBCM_MAILTO = 'aoi@example.ne.jp';
トラックバック/コメントを受信したとき、その内容をメールで通知します。通常は、GNSの著者メールアドレス($DIARY_EMAIL)と同一でかまいません。
一覧表示用ベースURLを設定する
# トラックバック/コメント一覧表示用ベースURL
$TBCM_BASEURL = 'http://www.example.net/GNS/';

$TBCM_BASEURL = 'http://www.example.ne.jp/GNS/';
トラックバック/コメント一覧表示のためのベースURLです。通常はGNSの公開URLベース名($URLBASENAME)と同一でかまいませんが、変更するときは「表示側(GNSフォルダ側)のconfig.ph」の"$TRACKBACKBASEURL"にも同一の値を設定してください。
表示側の設定ファイルを開く
表示側のconfig.phを開く
▲表示側のconfig.phを開く
「GNSフォルダ」にある、config.phを開きます。
TB/CM用プログラム&データリンク先ベースURLを設定する
# トラックバック/コメント用のベースURL
$TRACKBACKBASEURL = $URLBASENAME;
# $TRACKBACKBASEURL = 'http://gorry.hauN.org/diary/';
トラックバック/コメント関連のCGIや表示ファイルへのリンク先とするためのベースURLです。通常はGNSの公開URLベース名($URLBASENAME)と同一でかまいませんが、変更するときは「受信側(トラックバック/コメントフォルダ側)のconfig.ph」の"$TBCM_BASEURL"にも同一の値を設定してください。
TB/CM用プログラム&データフォルダを設定する
# トラックバックプログラム&データディレクトリ(通常はtb)
$TRACKBACKDIR = "tb";
トラックバック/コメントフォルダの位置を"$TRACKBACKBASEURL"からの相対位置で指定します。通常は変更する必要はありません。
表示フラグを設定する
# トラックバック機能を使用するなら1、しないなら0
$FLAG_TRACKBACK = 0;
# コメント機能を使用するなら1、しないなら0
$FLAG_COMMENT = 0;
# TB/CM一覧ページへのリンクを作成するなら1、しないなら0
$FLAG_TBCMVIEW = 0;

# トラックバック機能を使用するなら1、しないなら0
$FLAG_TRACKBACK = 1;
# コメント機能を使用するなら1、しないなら0
$FLAG_COMMENT = 1;
# TB/CM一覧ページへのリンクを作成するなら1、しないなら0
$FLAG_TBCMVIEW = 1;
$FLAG_TRACKBACKを1にすると、日記の各ブロック末尾に[Trackback]リンクを表示します。
$FLAG_COMMENTを1にすると、日記の各ブロック末尾にコメント入力フォームを表示します。
$FLAG_TBCMVIEWを1にすると、日記の各ブロック末尾に[View Log]リンクを表示します。
その他の設定値を調整する
# 最近トラックバック/コメント表示数
$VIEWLATESTTRACKBACKCOUNT = 10;
# トラックバック/コメント数を表示するなら1、しないなら0 $VIEWTRACKBACKCOUNTCGI = 1;
$VIEWLATESTTRACKBACKCOUNTは、「最近のトラックバック/コメント」の表示数です。初期値では10件を表示します。
$VIEWTRACKBACKCOUNTCGIは、「ブロックあたりのトラックバック/コメント数」の表示スイッチです。初期値では表示します。
※ 「ブロックあたりのトラックバック/コメント数」は、SSI機能により表示されます。WWWサーバでSSIを許可している場合のみ、この機能は有効です。
以上で、編集は終了です。
トラックバック/コメント保存用のフォルダを確認する
インストールを行うと、トラックバック/コメントを収めるフォルダが準備されます。「トラックバック/コメントフォルダ」に、"log"という名前のフォルダが作成されたのを確認してください。このフォルダを「TB/CMログフォルダ」と呼びます。
トラックバックしてみる
トラックバックが正常に動作している場合、自分自身の日記のブロックに対してトラックバックを送信することが可能です。以下の手順でやってみましょう。
  1. 表示側の設定で「表示フラグをON」にしただけでは、日記にはトラックバックURLは表示されません。日記を更新した時点で、初めて「トラックバックURL」が各ブロックの末尾に現れるようになります。日記の編集画面を表示し、いずれかの日の日記を更新してください。ここでは、2005/05/21の日記を更新したことにします。
  2. 2005/05/21の日記をブラウザで表示します。ブロックの末尾に[Trackback]というリンクが現れているのを確認し、このURLをクリップボードにコピーしてください。URLは「http://www.example.ne.jp/diary/tb/tb.cgi/2005052101/」のような形式になります。
    URLをコピー
    ▲URLをコピー
  3. 再び、日記の編集画面を表示させてください。編集欄の「TrackBack ブロック」でトラックバック元になるブロックを選びます。続いて「URL:」に先ほどクリップボードにコピーしたトラックバックURLを貼り付けます。
    トラックバック情報を貼り付け
    ▲トラックバック情報を貼り付け
  4. [Send]ボタンをクリックすると、トラックバックが送信されます。送信が正常にすれば、画面は送信直前の状態に戻ります。エラーが発生したときは、エラーの内容がブラウザに表示されます。
  5. 2005/05/21の日記をブラウザで表示します。先ほどの[Trackback]リンクの横にある[View Log]ボタンをクリックすると、先ほどのトラックバックが表示されます。
    ※ $FLAG_TRACKBACKが1のときのみ表示されます。
    トラックバックを確認
    ▲トラックバックを確認
自分自身の日記にトラックバックをする手法は、テストなどの他に、「過去の日記のまとめページ」の作成に便利です。まとめページを作成し、過去の日記に対してトラックバックすることで、過去の日記を書き換えることなく、まとめページへのリンクが自動的に作成されます。

Update Pingの送信

# Update Ping 送信先一覧

http://1470.net/api/ping
http://ping.blogmura.jp/rpc/

トラックバックPingの応用で、「Update Ping」(更新Ping)と呼ばれるものがあります。Update Pingを収集しているサーバにこれを発信することで、日記の更新を効率よく多方面に通知することができます。

GNSは、日記の更新時に自動的にUpdate Pingを発信することができます。ユーザーデータベースフォルダの"96.html"にURLを書くことで、発信先を指定することができます。日記の編集ページから編集するときは、「データベース呼び出し」で「更新Ping送信先」を選びます。

実際にUpdate Pingを送信するときは、以下のようにします。

ローカル環境 mkd.batまたはmkd.shに、Update Pingを送信する命令("perl upsend.pl")が含まれています。mkd.batまたはmkd.shを実行するたびに、自動的に送信されます。Update Pingを送信したくないときは、この行をコメント化しておきます。
メール環境 GNS更新メールヘッダに、Update Pingを送信する命令("#UPDATEPING 1")が含まれていると、以後更新メールを受け取る毎にUpdate Pingの送信が行われます。この命令は、次にそれを解除する命令("#UPDATEPING 0")を受け取るまで保持されます。
WWW環境 GNS更新フォームに、Update Pingを送信するスイッチ([更新Ping])があります。これをONにするとUpdate Pingの送信が行われます。OFFのときは送信されません。
# Update Ping送信を行うなら1、しないなら0
$FLAG_UPDATEPING = 1;

$FLAG_UPDATEPING = 0;

GNSの設定レベルでUpdate Pingの送信を行わないようにするには、右の設定をconfig.phに対して行います。

TB/CMログの管理

TB/CMログフォルダ
▲TB/CMログフォルダ

トラックバック/コメントは、すべて「トラックバック/コメントフォルダ」下の「log」フォルダに保存されます。

WWW画面からの管理
GNSトップ画面から、[トラックバック/コメントの編集]を選ぶと、トラックバック/コメントのログ管理を行う画面に移ります。
TB/CMログ管理画面
▲TB/CMログ管理画面
最新 / リンク先指定
最新のログから順に表示させたいときは、[最新]を選びます。
トラックバック・コメントの「投稿先の日付」で絞り込みをしたいときは、[リンク先指定]を選びます。「投稿が行われた日付」ではないことに注意してください。
トラックバック / コメント
トラックバック/コメントのどちらを管理するかを指定します。
無効化したものは表示しない
[無効]スイッチをONにしたエントリを一覧に表示しません。
表示されていない項目も、[無効化したものを削除する]スイッチによる削除の対象となります。
View
以上の条件に適合するログを検索し、以下に表示します。このとき、[無効]スイッチの状態変更やログの削除は行われません。
ログ
条件に適合するログの一覧を表示します。
無効
チェックをONにすると、日記の「トラックバック/コメント一覧」ページにこのエントリを表示しなくなります。チェックをOFFにすると、再び表示されるようになります。
また、チェックをONにしたうえで[無効化したものを削除する]スイッチをONにして処理を実行させると、このエントリがログから削除されます。
日付
このエントリが投稿された日付です。
リンク先
このエントリの投稿先となっている日付です。このリンクをクリックすると、該当の「トラックバック/コメント一覧」ページが表示されます。
内容 / IPアドレス / Agent
投稿された内容と、投稿元のIPアドレス・投稿に使用したエージェント名(ブラウザ名)が表示されます。
トラックバック/コメントのフィルタリングに、内容・IPアドレス・エージェント名を使用することができます。
無効化したものを削除する
[無効]スイッチをONにしたエントリを削除します。
削除されたエントリは、「トラックバック/コメントフォルダ」の"log/deleted.log"に記録され、それ以外のログファイルからは削除されます。ログファイルの直接編集を行わない限り、エントリを復元させることはできません。
Change it!
[無効]スイッチの変更を反映させます。[無効化したものを削除する]がONのときは、エントリの削除が行われます。
ログファイルの変更と同時に、「トラックバック/コメント一覧」ページの再作成が行われます。
ログファイルの直接編集
右の図は、2005年3〜5月のログフォルダです。「03.log, 04.log, 05.log」には3〜5月の日記に対するトラックバック、「03c.log, 04c.log, 05c.log」には3〜5月の日記に対するコメントが格納されています。
どちらのログも、1行に1データが格納されています。不要なデータが発生したときは、エディタでこのファイルを開き、行の先頭に"#"を書くことで、この行のデータをキャンセルすることができます。
トラックバック/コメント一覧表示をONにしている場合は、ログを編集したあとは一覧の再作成をするまで反映されません。「mkd.bat」ないし「mkd.sh」と同じ要領で、「mktbview.bat」または「mktbview.sh」を実行することで、一覧を再作成することができます。
また、GNSトップ画面から[トラックバック/コメント一覧の再作成]を選んで、一覧の再作成をすることができます。

TB/CMフィルタ

不適切なトラックバック/コメントを事前に排除するため、「TB/CMフィルタ」が用意されています。スパム攻撃などの対策にお役立てください。

GNS更新フォームの「データベース呼び出し」から[トラックバックフィルタ]または[コメントフィルタ]を指定して、編集することができます。
トラックバックフィルタ
# URLによるフィルタリング
# "url: ほげほげ"で、URLに「ほげほげ」が含まれているトラックバックを
# 受け付けないようにすることができる。

# url: ほげほげ

url: example.ne.jp
トラックバックフィルタの設定をするには、「トラックバック/コメントフォルダ」にある、tbfilter.txtを開きます。
このファイルには、フィルタ適用先とフィルタリングを行う文字列のペアを記述します。先頭が"#"の行は無視されます。
右の例は、「リンク先URLに"example.ne.jp"が含まれているトラックバック」を受け付けないようにするための設定です。
フィルタ適用先として、以下を選ぶことができます。また、フィルタリング文字列には、単純な文字列の他に「正規表現」を用いることができます。

title トラックバックタイトル(title)に対して適用
name 文書名(blog_name)に対して適用
url トラックバック先URL(url)に対して適用
excerpt 概要文章(excerpt)に対して適用
fromadr
トラックバックリクエストを発行したプロバイダのIPアドレス、またはドメイン名に対して適用
IPアドレスは、TB/CMログに記録されています。「トラックバック/コメント編集」ページから確認することができます。
agent
コメント投稿をしたブラウザのエージェント名に対して適用
エージェント名は、TB/CMログに記録されています。「トラックバック/コメント編集」ページから確認することができます。
コメントフィルタ
# 投稿元アドレスによるフィルタリング
# "fromadr: ほげほげ"で、投稿元のIPアドレスまたはドメイン名に
# 「ほげほげ」が含まれているコメントを受け付けないようにすることができる。

# fromadr: ほげほげ

fromadr: example.ne.jp
コメントフィルタの設定をするには、「トラックバック/コメントフォルダ」にある、cmfilter.txtを開きます。
このファイルには、フィルタ適用先とフィルタリングを行う文字列のペアを記述します。先頭が"#"の行は無視されます。
右の例は、「"example.ne.jp"を含むドメインから投稿されたコメント」を受け付けないようにするための設定です。
フィルタ適用先として、以下を選ぶことができます。また、フィルタリング文字列には、単純な文字列の他に「正規表現」を用いることができます。

name 名前(Name)に対して適用
comment コメント(Comment)に対して適用
fromadr
コメント投稿をしたプロバイダのIPアドレス、またはドメイン名に対して適用
IPアドレスは、TB/CMログに記録されており、「トラックバック/コメント編集」ページから確認することができます。
agent
コメント投稿をしたブラウザのエージェント名に対して適用
エージェント名は、TB/CMログに記録されています。「トラックバック/コメント編集」ページから確認することができます。