CakePHP 1.2でXML-RPCサーバを作る

CakePHPでXML-RPCを受取る方法を調べていたら、タイムリーに超便利な方法が紹介されていた。

How to create an XML-RPC server with CakePHP (Articles) | The Bakery, Everything CakePHP

やることは2つ。

  1. xmlrpc.zipをダウンロードして、解凍してapp/vendorsに置く
  2. コントローラを書く

てっとり早く、上記サイトから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)
    }
  }

非常に便利。


新しく会社作りました!

コメント / トラックバック 1 件

  1. testSERENDIPITY より:

    cakephpをXMLRPCサーバー…

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

コメントをどうぞ