CakePHPでXML-RPCを受取る方法を調べていたら、タイムリーに超便利な方法が紹介されていた。
How to create an XML-RPC server with CakePHP (Articles) | The Bakery, Everything CakePHP
やることは2つ。
- xmlrpc.zipをダウンロードして、解凍してapp/vendorsに置く
- コントローラを書く
てっとり早く、上記サイトからxml_rpc_controller.phpをコピーして作成すると、設置も簡単に行える。
メソッドごとにコールバックを定義していけばOK。
前回のエントリ[Pythonで簡単にXML-RPCクライアント : blog.loadlimits – digital matter –]で書いたPython版のクライアントの場合はこんな感じで受け取れる。
<?phpApp::import('Vendor', 'xmlrpc');
class AddController extends AppController {
var $name = 'Add';
var $uses = array();
// The XML-RPC server object
var $server = null;
function index() {
// Disable debug information
// Required to generate valid XML output
Configure::write('debug', 0);
// Avoids render() call
$this->autoRender = false;
// XML-RPC callbacks settings
// Use this parameter to map XML-RPC methods to your protected or private controller methods
$callbacks = array();
$callbacks['sample.hogehogeAPI'] = array(&$this, '_saveData');
// Handle XML-RPC request
$this->server = new IXR_Server($callbacks);
}
function _saveData($data = array()) {
ob_start();
var_dump($data);
$str = ob_get_contents();
ob_end_clean();
return $str;
}
}
?>
結果はこんな感じ。
array(6) {
[0]=>
array(1) {
["image"]=>
string(4) "hoge"
}
[1]=>
array(1) {
["username"]=>
string(4) "name"
}
[2]=>
array(1) {
["title"]=>
string(10) "item title"
}
[3]=>
array(1) {
["mail"]=>
string(11) "user e-mail"
}
[4]=>
array(1) {
["comment"]=>
string(12) "item comment"
}
[5]=>
array(1) {
["itemlist"]=>
array(4) {
[0]=>
int(3)
[1]=>
int(2)
[2]=>
int(3)
[3]=>
int(1)
}
}
}
非常に便利。

HOMMA Teppei


cakephpをXMLRPCサーバー…
http://blog.loadlimits.info/2008/11/cakephp-12でxml-rpcサーバを作る/ この後、登録する分を付ければいいようなので、自動更新のページ作るのに便利そう …