たとえば
def plus(num1, num2):
return num1 + num2
という関数をXMLRPCサーバから公開したい場合
from SimpleXMLRPCServer import CGIXMLRPCRequestHandler
handler = CGIXMLRPCRequestHandler()
handler.register_function(plus)
handler.handle_request()
とすれば出来上がります。またモジュールとしてインタフェースを提供したい場合は
class Foo:
def plus(self, num1, num2):
return num1 + num2
というインタフェースに対して
from SimpleXMLRPCServer import CGIXMLRPCRequestHandler
handler = CGIXMLRPCRequestHandler()
handler.register_instance(Foo())
handler.handle_request()
こうすれば出来上がり。先ほど、NabeAtzz APIをXMLRPCとして呼び出せるインタフェースを作りました。
エントリポイントは
http://mattn.appspot.com/nabeatzz_xmlrpcとなります。試しにpythonでXMLRPC Clientを作成し呼び出してみます。
# -*- coding: utf-8 -*-
import sys
from xmlrpclib import ServerProxy
api = ServerProxy("http://mattn.appspot.com/nabeatzz_xmlrpc")
for n in range(1, 11):
res = api.nabeatzz(n)
print "%s : %s" % (res['number'], res['japanese'])
if res.has_key('nabeatzz'):
for c in res['nabeatzz']:
print " %s" % c
コードはこんな感じでしょうか。これを実行すると正しく
1 : いち
2 : に
3 : さん
アホになる
4 : よん
5 : ご
犬っぽくなる
6 : ろく
アホになる
7 : なな
8 : はち
9 : きゅう
アホになる
10 : じゅう
犬っぽくなる
という結果が得られました。