XML-RPC | Python-izm

XML-RPC

PythonXML-RPCを利用してデータを取得する例です。

XML-RPCクライアント

XML-RPCクライアント例です。ServerProxyで取得可能なものはXML-RPCサーバーによって異なり、次の例ではis_alivehellonowtimeで値が取得できるサーバーに対して接続しています。この例は、後述するXML-RPCサーバー例を起動した状態で実行することで動作確認を行うことができます。

※XML-RPC APIを提供しているサーバーに対して実行する場合は、XML-RPCサーバー例を起動する必要はありません。どのようなAPIが提供されているかを確認の上、「is_alive」などを適宜変更してください。

Python 3系

from datetime import datetime
from xmlrpc.client import ServerProxy


proxy = ServerProxy('http://localhost:8000/')

# 登録されているメソッド名を取得
print(proxy.system.listMethods())
# それぞれを取得
print(proxy.is_alive())
print(proxy.hello('World'))
nowtime = datetime.strptime(proxy.nowtime().value, '%Y%m%dT%H:%M:%S')
print(nowtime.strftime('%Y/%m/%d %H:%M:%S'))

Python 2系ではxmlrpclibモジュールなので注意してください。

Python 2系

# -*- coding: utf-8 -*- 

from datetime import datetime
from xmlrpclib import ServerProxy


proxy = ServerProxy('http://localhost:8000/')

# 登録されているメソッド名を取得
print(proxy.system.listMethods())
# それぞれを取得
print(proxy.is_alive())
print(proxy.hello('World'))
nowtime = datetime.strptime(proxy.nowtime().value, '%Y%m%dT%H:%M:%S')
print(nowtime.strftime('%Y/%m/%d %H:%M:%S'))
['hello', 'is_alive', 'nowtime', 'system.listMethods', 'system.methodHelp', 'system.methodSignature']
alive!
Hello World.
2018/08/12 12:59:31

XML-RPCサーバー例

XML-RPCサーバーを簡易的に用意する例です。関数を登録することで、その戻り値を結果として返します。nowtimeでは現在時刻を返していますが、Pythonのdatetimeをそのまま返すとエラーになります。xmlrpc.client.DateTimeを返すようにしましょう。

Python 3系

from datetime import datetime
from xmlrpc.client import DateTime
from xmlrpc.server import SimpleXMLRPCServer


# 単純な文字列を返す
def is_alive():
    return 'alive!'


# 引数を利用する
def hello(message):
    return 'Hello {}.'.format(message)


# 現在時刻を返す
def nowtime():
    return DateTime(datetime.now())


server = SimpleXMLRPCServer(('localhost', 8000))
print('Start Server')

# 関数を登録
server.register_function(is_alive, 'is_alive')
server.register_function(hello, 'hello')
server.register_function(nowtime, 'nowtime')

# system.listMethods で参照できるように登録
server.register_introspection_functions()

# XML-RPCサーバーの起動
server.serve_forever()

次のコマンドでリクエストの待ち受け状態となります。リクエストを受信するごとにログが出力され、クライアント側へ値が返されます。

python server_ex.py

はてなブックマークの登録件数取得

はてなブックマークの XML-RPC API は廃止されました。下記のコードを実行しても結果は返ってきませんのでご注意ください。参考のために掲載を残しています。

はてなブックマークより、指定のサイトのブックマーク数を取得します。
※はてなブックマーク側に仕様はこちらで確認ください。

Python 3系

import xmlrpc.client

server = xmlrpc.client.ServerProxy('http://b.hatena.ne.jp/xmlrpc')
print(server.bookmark.getCount('http://www.python-izm.com/'))
print(server.bookmark.getTotalCount('http://www.python-izm.com/'))
{'http://www.python-izm.com/': 555}
999

getCountで本サイトのトップページのブックマーク数(555件)を取得し、getTotalCountで全てのページのブックマーク数(999件)を取得しています。
※数値は適当です。