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__が呼ばれる,というわけ。おもしろいなあ:-)。