Hatena::Groupfukuoka-py

xmlrpclib

xmlrpclib

目次

xmlrpclibってなんぞ?

XML-RPCのクライアント用ライブラリです。xmlrpcのリクエストを簡単に送信できます。

サンプルコード

BacklogAPIへのアクセス

BacklogAPIへのアクセス方法は、以下の通りです。

import xmlrpclib

server = xmlrpclib.ServerProxy('https://(ユーザ名):(パスワード)@(スペースID).backlog.jp/XML-RPC')
projects = server.backlog.getProjects()
for project in projects:
    print '======================'
    print project['id']
    print project['key']
    print project['name']

うんちく

xmlrpclib__getattr__

以下「xmlrpclibの__getattr__ — TRIVIAL TECHNOLOGIES 2.0」からの引用。


Pythonxmlrpclibがイカしてると思うのは,サーバのインスタンスからドット区切りで階層を表現できること。ソースはこんな感じになっています。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__が呼ばれる,というわけ。