Python XML-RPC

Python学習【365日チャレンジ!】170日目のマスターU(@Udemy11)です。

マイナンバーカードを連携してマイナポイントが貰えるサービスはすでに決めましたか?

メルカリでは、通常の還元に加えて5%のポイントをゲットすることが可能なうえ、抽選で1000万円相当が当たるらしいです。

PayPayも抽選で100万円が当たるなんてキャンペーンを展開しています。

先行登録は8月までで、9月から3月までの使用金額に応じて最大5000円(25%)のポイントバックをしてくれます。

各社とも締切が近づいてきたら、プラスバックキャンペーンなんてものを実施すると思うので、現状で登録するのではなく、8月下旬にどれが一番お得なのか考えて、サービスを選ぶのがおすすめです。

それにしても最近は、おばあちゃんでもPayPayを使う人が多くてびっくりしています。

それでは今日もPython学習を始めましょう。

昨日の復習

昨日は、Webスクレイピングができるbeautifulsoupを学習しました。

星の数ほどあるWebページから必要な情報を抜き出すには、プログラミングが必要です。

人海戦術で時間をかけて抜き出すことができなくもないわけですが、そこはコンピューターの得意とするところなので、プログラミングを駆使してスクレイピングで必要な情報を集めるのが最適です。

Webスクレイピングの詳細については、昨日の記事をごらんください。

今日は、XMLRPCについて学習します。

XML-RPCとは

XML-RPCは、【eXtensible Markup Language Remote Procedure Call(エクステンシブル・マークアップ・ランゲージ・リモート・プロシージャ・コール)】の略で、

  • XML形式のデータをHTTPでやり取りするためのルール

です。

代表的なものとしては、WordPressの管理画面にログインせずに投稿するアプリなどでXML-RPCが使われていて、クライアントがPOSTメソッドでサーバーへの要求をHTTPで送り、サーバーがその処理をして結果を返すという流れになります。

まずは、簡単な処理をサーバーにさせるコードを書いてみましょう。

xmprpc_server.py

まずはサーバー側のコードを書いてみましょう。

from xmlrpc.server import SimpleXMLRPCServer


with SimpleXMLRPCServer(('127.0.0.1', 8000)) as server:

    def add_num(x, y):
        return x + y

    server.register_function(add_num, "add_num")
    server.serve_forever()

最初にxmlrpc.serverからSimpleXMLRPCServerをインポートします。

4行目でサーバーを起動させて、6行目、7行目で関数を定義します。

今回の関数は変数xと変数yを足し算する関数add_numです。

9行目でサーバーにクライアントから呼び出すときの名前と関数を(どちらもadd_num)を登録し、10行目でサーバーを起動させています。

コードが完成したら、ターミナルからpython xmlrpc_server.pyでサーバーを起動させます。

xmlrpc_cliant.py

続いてクライアント側のPythonファイルです。

import xmlrpc.client


with xmlrpc.client.ServerProxy('http://127.0.0.1:8000/') as proxy:
    print(proxy.add_num(1, 5))

クライアント側は非常に簡単なコードになります。

インポートするのは、xmlrpc.clientです。

次にServerProxyでサーバーを指定します。

最後にprint出力で、関数add_numに数値を代入しています。

実行結果

サーバーを実行した状態でクライアントから要求を送った動作を動画にしてみました。

数字を変更しても正常に計算してくれています。

やり取りがあるとおもしろい

サーバーとクライアントのやり取りのように、一方が要求してその要求を返すというやり取りがあるとおもしろくなってきます。

簡単なコードでも、きちんとやり取りができていると思わず感動してしまいます。

プログラマーの方からすると、当たり前のことでも今まで知らなかったことを知るのには、ほんと好奇心がくすぐられます。

この気持を持続しながら、Python学習を継続していきたいと思います。

それでは、明日もGood Python!