TextpatternのXML-RPCに、system.multiCallするには

Posted: August 19th, 2006 | No Comments »

以前書いた ように、Textpatternにも公式のXML-RPCなインタフェースが公開されています。

デフォルトではついていないので、別途アップロードしないといけないのですが。

で、そのXML-RPCで遊んでいたら、ちょっとつまずいたことがあったので書いておきます。

“system.multiCall”:http://www.xmlrpc.com/discuss/msgReader$1208 が効かないのです。

これは、一回のリクエストでXML-RPCサーバに「複数の関数を実行して!」と頼む優れものの関数なのですが、これをリクエストすると、

wrong number of method parameters

というようなエラーが出てしまい、うまくいきません。

これでは、記事を続けてたくさんアップしたりしたいときに困ってしまいます。

いろいろ調べてみた結果、“IXR Library”:http://scripts.incutio.com/xmlrpc/ というライブラリが原因のようです。

このライブラリは、XML-RPCのサーバ側とクライアント側両方のための関数が用意されていて、TextpatternのXML-RPCではこのうちサーバ側の部分だけを使ってXML-RPC APIを実装しています。

このライブラリにはsystem.multiCall自体は実装されているのですが、デフォルトの状態では使えないようになっている、ということのようです。

で、これを使えるようにするには、結論から言うと http://mytxp.com/textpattern/lib/ にある IXRClass.php の715行目あたりに、

$this->addCallback( \‘system.multicall\’, \‘this:multiCall\’, array(\‘array\’, \‘array\’), \‘process multi methods\’ );

を追加すればOKです。

以下説明。

IXRライブラリでは、受け取ったリクエストを実行する前に、関数名と引数の数が正しいかをチェックしています。

このチェックには当然、受け取ったリクエストと照らし合わせる、「正しい関数名」と「引数の数」のリストが必要なわけですが、なぜかsystem.multiCallは名前だけがリストに登録されていて、引数の数が登録さていないのです。

これでは、いくら正しい引数でリクエストしても、エラーが出てしまうのは当たり前ですね。

上のコードでは、このリストにsystem.multiCallを正しく登録し直しているわけです。

あ、最後になりましたが、system.multiCallを有効にすることで発生するセキュリティ上の問題などは、自己責任でお願いしますよ。



Leave a Reply