【初心者向け】Zaif API×Pythonでプチフィンテック5 公開情報収集の自動化

前回は、仮想通貨の価格などの公開情報にブラウザからAPI経由でアクセスしました。

今回の記事では、仮想通貨の価格を収集するPythonプログラムを作成していきます。

<スポンサーリンク>

実装

今回作成するプログラムはそれほど複雑なものではありませんので、早速実装に入っていきましょう。

まずはPyCharmを立ち上げ、新規にPythonファイルを作成して下さい。ここでは、「publictest1」という名称でファイルを作成します。

ファイルを作成しましたら、コードを記述していきます。

まずは冒頭に、以下のように記述します。

import requests

Pythonでは、print関数などのPythonインタプリタ本体に含まれている機能以外にも、多くの機能を使うことができます。このためには、それら機能が含まれている「モジュール」というものをプログラムに組み込む必要がありますが、その時に使うキーワードが「import」です

ここでは、このimport文を用いて、PythonプログラムからWebアクセスする際に有用な機能を集めた「requests」というモジュールをインポートしています。

次に、価格の取得対象とする通貨ペアを指定します。

CURRENCY_PAIR = 'btc_jpy'

上記にて、「CURRENCY_PAIR」という変数を作成し、その変数に「=」という値を代入するための記号を使って「btc_jpy」という文字列を入れています。変数とは文字や数字などの値を入れるための「入れ物」と捉えて頂ければと思います。

また、その入れ物に入れる値として文字列を使う場合には、文字列を「’」で括る必要があります。逆に変数は「’」で括らないことに注意して下さい

これにより、文字列が与えられたとき、それが純粋な文字列なのか、(今回でいうCURRENCY_PAIR」のような)変数なのかが一目で分かりますし、システムをそれを認識することができます。

なお、文字列として指定している「btc_jpy」は、Zaif API上でビットコイン/日本円を表すコードです。

続いて実際にAPI経由で価格を取得する処理を追記します。

response = requests.get('https://api.zaif.jp/api/1/last_price/' + CURRENCY_PAIR)

この1行について説明します。

まず、「response」とは、「=」以降の処理の結果を格納する変数です。

そして「=」以降の処理ですが、先ほどインポートしたrequestsモジュールに含まれる「get」という機能(メソッドと呼びます)を使って、APIにアクセスしています。

この「get」メソッドは、

requests.get(URL)

という書き方で、指定したURLにアクセスしてその結果を取得することができます

また今回、このURLに指定している文字列は、

'https://api.zaif.jp/api/1/last_price/' + CURRENCY_PAIR

というものですが、中央の「+」によって、その前後の文字列を単純に結合しています。

ここで、「CURRENCY_PAIR」の実体が「btc_jpy」という文字列であることを考えると、結局この文字列は、「https://api.zaif.jp/api/1/last_price/btc_jpy」となります。

この文字列は、前回ブラウザでアクセスしたURLと全く同じものですね。

まとめますと、追記した1行は、『「https://api.zaif.jp/api/1/last_price/btc_jpy」にアクセスして、その結果をresponseという変数に格納する』という処理を意味しています。

なお、わざわざ「CURRENCY_PAIR」という変数を使わなくとも、URL中に「btc_jpy」という文字列を記載することでも全く同じ動作を実現することができます。

しかしながら、このように変数を活用することにより、例えばビットコインではなくモナーコインの価格を調べたいとき、プログラム中の処理の記述そのものを修正するのではなく、変数の値を修正するだけで簡単に対象通貨を変えることができるというメリットがあります

現在はプログラム中に通貨ペアを指定する箇所が1箇所しかありませんので、そこまで大きな恩恵はありませんが、例えばプログラムが複雑化し、通貨ペアを指定する箇所が10箇所になったとしたら、変数を使わないとその指定10箇所を修正する必要がある一方で、変数を使った場合は、変数の値1箇所のみを修正するだけで済むため、プログラムのカスタマイズが容易になります。

さて、話を元に戻しまして、最後に、取得した価格を表示する処理を書いておきましょう。

print(response.text)

printの中身に指定している「response.text」という表現について説明します。

まず、先ほどgetメソッドにて取得した情報は、実は単純な文字列ではなく、「Responseオブジェクト」という特殊な形式です。このResponseオブジェクトはいくつか細かい情報(属性と言います)を持っているのですが、そのうちの一つが、取得した結果を文字列として表現した「text」という属性です。

一般に、オブジェクト内の、ある属性を使うためには、「オブジェクト.属性」という書き方をします。

そのため、「response.text」は、取得した結果を単純な文字列として取り出すことを意味しています

これをprint関数に指定することにより、取得した価格情報を表示することができるというわけです。

テスト実行

それでは、作成したプログラムが正しく動くか、実際に実行してみましょう。

以下のようにビットコインの価格が出力されれば、プログラムの作成は成功です。

また、折角ですので、先ほどのCURRENCY_PAIRの値を「mona_jpy」に書き換え、モナーコインの価格を出力してみましょう。

正しく価格は表示されましたでしょうか?

終わりに

さて、公開情報についてはPythonプログラムから取得することができるようになりました。

しかしながら、実は取引が集中しているタイミングなど、Zaifサーバの処理が込み合っている場合、サーバへのアクセスに失敗し、結果としてこのプログラムは異常終了してしまいます。

今回のような価格情報の取得であれば、プログラムを再実行すれば済む話ですが、これが通貨ペアの売買を伴うような処理を行っている場合であれば、こういった異常終了によって思わぬ損失を発生させてしまう恐れがあります

そこで次回は、そのような異常に適切に対処する方法を紹介したいと思います。

カテゴリ:フィンテック
<スポンサーリンク>

シェアする

フォローする