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