昨日難しそうだったので保留していたトラックバック送信機能もひとりごと登録ページに付けてみました。なんと受信機能よりも簡単でした(笑)。ということで、ひとまず運用できる状態になりました。もちろん昨日付けたところなのでイマイチ実績がないですし、本当に役に立つかどうかもよくわからないので、いきなり仕様が変わったり無くなっちゃったり(^^;)するかもしれませんが悪しからず。
さて、うちのページの存在はPHPとPostgreSQLを使えばアホでも破綻しない日記帳を作れることの実演になっているのですが、下記はトラックバック機能を付けるためにやったこと。
トラックバックping受信側
- /~takatani/chacha/hitorigoto/.htaccess に
RewriteEngine on
RewriteBase /~takatani/chacha/hitorigoto/
RewriteRule ^tb\/([0-9]+) tb.php?id=$1 [L]
RewriteRule ^tb\/([0-9]+)\?__mode=([a-z]*) tb.php?id=$1&__mode=$2 [L]
と記述
- /~takatani/chacha/hitorigoto/tb.php というファイルを作成し、この中でPOSTを受ける
- POSTされたデータの中にはtitleとかexcerptとかurlが入っているので、そのまま記録する。必須なのはurlだけらしいので、これが無い場合はエラーとする。URL中の番号は$_GET["id"] とかでひっぱり出す
- __mode=rssな場合はRSSを返す(例)
トラックバックping送信側
- Content-Type: application/x-www-form-urlencoded にて、トラックバックURLにPOSTする。PHPからPOSTしたことが無かったので、Content-Length: を入れないといけないのを知らなくてハマりました(^^;)
表示部
- すでに受信したトラックバックpingの内容を表示。url以外の項目が入っていない場合はそれなりに振舞う。トラックバックpingの本文が長い可能性があるので、100文字ぐらいでちょん切る。
- つっこみ入力フォームのところにトラックバックURLを表示。トラックバックpingを送りたい人が運良くこれを発見してくれると期待する(笑)
なんかわざわざ書くまでも無い内容ですな(^^;)。見れば分かると思いますが、記事ごとにユニークな番号を振っているシステムの場合はほとんど変更なしにトラックバック機能を付けることができます。
でもって今後の課題。
- トラックバックpingを送った後の更新は反映されない
ま、これは仕様と思います。が、1ページ内に1記事しかないページ(ここは違います)の場合はトラックバック内のURLから逆にトラックバックping用URLを導き出すことも(そのページが対応していれば)可能ですから、定期的に受信した側から調べに行くことはできるかもしれません。そうではなく 間違えて関係ないところにトラックバックpingを送ってしまった場合はお詫びのメール又は書き込みが必要でしょう。
- RSSのdescriptionとかトラックバックpingのexcerptの長さは?
とりあえず今のところは記事のHTMLタグを除いた全文を入れ表示の段階で文字数を制限するようにしていますが、送信時に適当な長さにすべきなのかもしれない。さらにXMLについてぜんぜん知らないので、RSSの中のHTML特殊文字のようなのをどうエンコードしたらよいのかわからなくて何もしていなかったりします(汗)
- トラックバックpingを送る機能の無いシステムを考慮した受け入れフォームは必要?
昨日のうちのシステムのような状態では受信サーバ側にフォームが用意されていれさえすれば、POSTデータをねつ造しなくてもトラックバックpingを送ることができます。が、トラックバックping入力フォームとかトラックバックURLというのは『トラックバック』を知らない人には謎の呪文でしかないのですねー。私が昨日までそうでしたから。私は未だにほとんどのblogページでごちゃごちゃよくわかんないリンクとか呪文が並んでいるように見えます。慣れている人には判りやすいのかもしれませんが、便利になればなるほど直感的でなくなるような気がします。
- 本文は本題から書き始める?
うちの記事の場合はだいたい能書き(過程の説明)を数行書いてから本題を書くのですが、トラックバックpingを送るexcerptの内容に関しては当然本題だけが望ましいのです。が、こうするとうちの記事から読み始めたときになんのことやらわかりにくいこともありうるわけで・・・。トラックバック用記事の書き方は『能書きは一行で』『引用からは始めない』など、少々工夫する必要がありそうです。サーブルさんとこのようにタイトルを'Re:なんとか'にしておいてリンクを張ってしまうのも一つの手かな。
いまいちよくわかっていない部分も多いので、運用しながら調整することになりそうです。なお、「トラックバックpingを送ったのに反映されない」というのは明らかにバグですのでつっこみかメールでお知らせ頂ければ助かります。
□ 関連記事