PHPでトラックバックの送受信
トラックバックを処理するようになると、もうブログである。
実は簡単に実装できる。
トラックバックは、相手がこちらの記事に対し行うもので、された方は相手先を表示、つまり相手にリンクするものである。
相手はというと、何も制限がないから、こちらとは無関係にトラックバックを送信できるようになっている。
それでは不公平であり、そのためにSPAMも多い。
相手先にこちらへのリンクを要求することが増えているのも道理だろう。
なぜこんなことになるかというと、トラックバックの送信は単なるPOSTデータだからである。
送りっぱなしでいい(エラー処理をしない)なら、HTMLだけで、サーバがなくてもできてしまう。
actionにリンクを張らせたいところのトラックバックURLを指定して、自分のURLをPOSTするだけという手軽さなのだ。
なので、トラックバック要求時に相手にこちらへのリンクがあるかチェックする。
日本語があることも条件としたい。
こちらのトラックバックURLは通常URLと同じにしたいと考えた。
便利だし、判りやすい。
通常はトラックバックを受けるプログラムを指定したURLとなっているが、記事のURLでトラックバックしようというのだ。
画期的だと思うのだが・・・どうだろう?
必要なことはふたつ。
トラックバックを受けること、トラックバックを送ることである。
前者は随時受信し、後者は記事の登録時に送信する。
まずは送信である。
必要項目は4つ。
title : 記事のタイトル url : ブログのURL ・・・ 必須 excerpt : 記事概要(本文) blog_name : ブログの名前
これを相手のトラックバック先にPOSTするのだが、ソケットを使って開き、fputsする。
このあたりは更新pingと同じである。
相手から結果が返ってくるので、エラー処理をして完了となる。
受信は通常URLにするのでトラックバックであることをチェックしなければならない。
とはいえ、必須のURLがPOSTされているかだけのこと。
URLがPOSTされていれば、トラックバック処理をして、されていなければ、通常の表示を行えばよい。
ここで問題がある。
相手が入れてきた本文に自URLがあるかチェックするのか、相手URLを開き、自URLがあるかチェックするか、である。
前者は簡単だが、確実性には乏しい。
やはり相手のURLから受信して内容を確かめるのが確実となる。
単に自URLを検索するだけだから、大した手間でもないだろう。
ということで、URLがPOSTされていたら、そのURLを開いて読み込む。
ソケットではなく、PHPではファイルとして処理できてしまう手軽さである。
その中に自URLがあるかどうか、日本語を含むかどうかをチェックする。
結果をエラーで返すが、xmlである。
とはいえ、定型でよい。
正常時 <?xml version="1.0" encoding="UTF-8"?> <response> <error>0</error> </response> エラー時 <?xml version="1.0" encoding="UTF-8"?> <response> <error>1</error> <message>元記事へのリンクが見つかりませんでした</message> </response>
この他に、送信・受信したトラックバックの管理や、記事へトラックバックを表示することもしなければならない。
こちらからは、更新の都度本文が変わっている可能性があるので送信することになる。
また、同一記事に同じURLでトラックバックがあった場合には、前のトラックバックを表示しないようにして、新しい方を表示しなければならない。
これから作るので、この記事は後で直すかもしれない。
上記は現時点での内容である。