TechTalk @ ppmz

テクな話題を説くと解く。そのココロは?

PHPでweblogUpdates.ping その4: XML-RPCインターフェイス部の実装

大体の構想も固まったので、いよいよコーディングに入りたいと思います。XML-RPCを簡単に扱えるモジュールがないかな、とGoogleで検索していたら、とても役に立つ(というかまさにズバリ)というページ、その名もPHPとPEARでXML-RPCを見つけました。このページに簡単なサーバとクライアントの実装例があったので、基本的な部分はこれを拝借する事にしました。

といっても実際にはあまりやる事はなく、関数のシグネチャであるsample.sumAndDifferenceとなっている部分をweblogUpdates.pingに書き換えれば、基本的には更新pingを受け取るサーバは出来上がり…ってこんな簡単で良いんでしょうかね。まぁもちろんレスポンスの部分や、実際に受け取った情報の処理はまた別にしなければいけませんが、これだけの作業でサーバの外部とのインターフェイスを担当する部分は完了です。実際のコードはこんな感じです(クライアント、サーバ共にPHPとPEARでXML-RPCに掲載の物の改変)。


require_once("XML/RPC.php");
require_once("XML/RPC/Server.php");
$GLOBALS['XML_RPC_defencoding'] = "UTF-8";

function pingReceived ($params) {
global $XML_RPC_erruser;
$p1 = $params->getParam(0);
$p2 = $params->getParam(1);
$name = $p1->scalarval(); //ブログ名
$url = $p2->scalarval(); //ブログのURL
//受信情報の処理はこの辺に…。
$value = new XML_RPC_Value("Thanks for the ping.", "string");
return new XML_RPC_Response($value);
}

$s = new XML_RPC_Server(array("weblogUpdates.ping" => array("function" => "pingReceived")));
?>

ちなみに、同じサイトのクライアントスクリプトの関数シグネチャをweblogUpdates.pingに書き換えて、第一引数にブログのタイトル、第二引数にブログのURLを入れてやれば、更新ping送信用のスクリプトの出来上がりです。コードはこんな感じです。


require_once("XML/RPC.php");
$GLOBALS['XML_RPC_defencoding'] = "UTF-8";

$xmlrpc_host = "http://www.yahoo.co.jp"; //送信先ホスト
$xmlrpc_path = "/RPC2"; //送信先パス
$c = new XML_RPC_client( $xmlrpc_path, $xmlrpc_host, 80 );

//引数の一覧を作成
$params = array(
new XML_RPC_Value( 'ppmz.com', 'string' )
,new XML_RPC_Value( "http://www.ppmz.com/", 'string' )
);

//メッセージの作成
$message = new XML_RPC_Message('weblogUpdates.ping',$params);

//メッセージ送信
$response = $c->send($message);

//応答の処理 - 正常時とエラー時
if (!$response->faultCode()) {
print $response->serialize();
}else{
print "Fault Code: " . $response->faultCode() . "
";
print "Fault Reason: " . $response->faultString() . "
";
}
?>


次回は受け取った情報を処理する部分を実装しようと思います。

Posted by Pju on August 2, 2006 06:51 PM
Permalink

TrackBack

TrackBack URL for this entry:
http://www.ppmz.com/cgi-bin/mt/mt-tb.cgi/54

コメントを残す

(管理人が承認するまでコメントはこのページに表示されません。)