Python 2.3からはxmlrpclibというライブラリが標準でつくようになりました。これを使うとXML-RPCのリクエストを簡単に送信できます。
import xmlrpclib
#xmlrpcサーバインスタンスを生成
srv = xmlrpclib.Server('http://url.to.xmlrpc/server/')
#XML-RPCリクエストを送信,結果を表示
print srv.path.to.method('arg1','arg2')
Pythonのxmlrpclibがイカしてると思うのは,サーバのインスタンスからドット区切りで階層を表現できること。ソースはこんな感じになっています。nameにドットで区切られた階層の文字列が渡ってきます。
def __getattr__(self, name):
# magic method dispatcher
return _Method(self.__request, name)
で,_Methodの中身は以下。
class _Method:
# some magic to bind an XML-RPC method to an RPC server.
# supports "nested" methods (e.g. examples.getStateName)
def __init__(self, send, name):
self.__send = send
self.__name = name
def __getattr__(self, name):
return _Method(self.__send, "%s.%s" % (self.__name, name))
def __call__(self, *args):
return self.__send(self.__name, args)
__getattr__を再帰的に呼び出しているんですね。__nameにドット区切りの階層が連結されて行きます。一番最後は関数呼び出しになっているので,__call__が呼ばれる,というわけ。おもしろいなあ:-)。