PHPのモジュールであるXML_RPC_ServerでBlogのpingサーバ機能を実装してみました。
ライブラリは
%> <php_install_path>/php/XML/RPC/Server.php
にインストールされています。されていなければpearコマンドでインストール、またはアップデートしてください。
はじめは「これどうするんだ??」という感じでしたが、良く見ればものすごく簡単でした。
Blogでアップデート情報を送る場合、XML_RPCの構造としては「weblogUpdates.ping」というスペック名でデータを送るようになっています(詳しくはこちらを参照)。
で、PHPのXML_RPC_Serverではこのスペックに対応するようにコーディングをします。
下記が単純なサンプルです。
$map = array("weblogUpdates.ping" => array("function" => "weblogUpdates"));
$server =& new XML_RPC_Server($map);
ここで、「new XML_RPC_Server($map)」として渡しているmapとは、呼び出し関数を定義した配列です。このあたりについては、こちらや、PEARのマニュアルを見て頂くと分かると思います。
で、このマップに定義されている「function」というのが関数を呼び出すことを定義しており、これに対応する値として関数名である「weblogUpdates」が定義されています。XML_RPC_Serverが生成されるとこれらの関数がロードされて、リクエスト内の対応するスペックで関数を実行するようになっています。
で、関数内でpingの処理を行うのですが、これだけでは終了せず、必ず戻り値を生成しなければなりません。
戻り値は「XML_RPC_Value」と「XML_RPC_Response」を組み合わせて作成することができて、下記がpingに成功した場合の値を生成しています。
$value = new XML_RPC_Value(
array(
"flerror" => new XML_RPC_Value(0, "boolean"),
"message" => new XML_RPC_Value("Thanks for the ping.")),
"struct");
return new XML_RPC_Response($value);
戻り値はstruct型なので、このようになっておりますが、これもPEARのマニュアルを読んでいただければ分かると思います。
って、とりとめもなく書きましたが、大体調べれなわかることで、あとはpingデータが送られて来たときの処理をどうするかを実装すればいいだけなので、簡単に作成できるかと思います。
そんなこんなで自前で作ったpingがありますので、とりあえずリンクを書いておきます。既にPING.BLOGGERS.JPというサイトがありますが、これを真似て作ってみようかと思います。もしお時間がありましたら使用しているBlogのpingリストに追加していただければありがたいです。
pingのURL : http://blog.boundless-ocean.ne.jp/service/ping.php
更新一覧URL:http://blog.boundless-ocean.ne.jp/newlist.php