ccxtを使わずにPythonでAPI認証をbitFlyerで行う方法 【 認証がわかる 】

ccxtを使わずにPythonでAPI認証をbitFlyerで行う方法 サムネイル
マッチョな男性
ccxtの解説が多めだけど、ccxtを使わずにAPI認証やって好き勝手に発注かけてみたい

そんな初心者に向けてPythonでAPI認証を行う方法について詳しく解説しました。

 

ccxtは簡単で初心者は簡単に使えるようになっていますが裏で何をやっているのかよくわかりませんよね。

ビットコインバーゲンでは、APIキーを用いなければ使えない残高の確認を行う流れを紹介し、順番に解説していきます。

 

bitFlyerから残高を取得するコード

今回解説するのは上のコードになります。

上のコードを実行すると結果としてbitFlyerで現物保有している残高が返ってきます。

 

順番に解説していきます。

使用しているライブラリ

行いたい処理は、API(bitFlyerのサーバー)へ命令を送り欲しいデータ、ここでは残高データを送り返してもらうことです。

データはJSON形式と呼ばれるものになり、残高データは個々人によるプライベートなものですのでAPIキーを使って本人確認ができればデータを取得することができます。

そのために必要なライブラリです。

 

ライブラリ解説

・「import requests」は、GETメソッド、POSTメソッド(後ほど解説)などを利用するためのライブラリのことです。

・「import datetime」は日付を取得するためのライブラリのことです。

・「import json」はJSON文字列(よく利用されるデータの並べ方の規格)を扱うためのライブラリのことです。

・「from pprint import pprint」はターミナル(コマンドプロント)に出力されるデータをいい感じに開業させてくれるライブラリです。

(”from”はpprintライブラリの中にさらに入っているオブジェクトを指定するコードです。)

 

これら二つのライブラリはAPIキー(APIシークレットキー)を暗号化して盗聴されないようにするためのライブラリです。

ここでの盗聴とは誰かがどのサーバー(Webサイト)へ命令を送る(ページの移動とか)をしたのかを追跡することです。

 

ccxtなどの便利なライブラリを利用していると勝手にやってくれていますがセキュリティ上はとても大切なことを行うライブラリになります。

 

草猫店長
ちなみにライブラリとは再利用可能なモジュール(処理のひとまとまり)をライブラリと呼ぶにゃあ。どちらでも指すものは同じだけどライブラリはモジュールから分類されるものとも言えるにゃあ。
コネ
人によって呼び方が違うので混乱しますねえ。

 

必要な変数の準備

当然ですがAPIキーは必須です。そして一般的な取引所のAPIはREST API系(URLにデータが入っているAPI)のものになるのでURLも指定しないといけません。

“GET”とはそのまま日本語とほぼ変わらない意味です。「データを取得します」というAPIサーバーへ送る命令です。

 

そして認証するためにはいつ何時何分に認証したのかを知らせる必要があるためタイムスタンプ(時刻)も用意しておきます。

 

そして時刻とデータを入れて欲しいURLを組み合わせたmessage変数も準備しておきます。

message変数だけでは誰の命令か分からないので、APIキーをセットにかつ、盗聴されないために暗号化して送信する必要があります。

そのための変数「signature」も準備しましょう。

 

APIキー、ここに自分のAPIキー(シークレットキー)も入力しましょう。

 

次にURL(URLの中にデータが入っているため)を指定します。

草猫店長
bitFlyer APIの公式ページに “/v1/me/◯◯”と書かれているけど、この◯◯の部分を自由に変えると取得できるデータも変わるということだにゃあ。

 

特に初心者に難しいと思われるのはsignature変数の内容だと思います。

hamcはライブラリとしてimportしたものでした。そのhmacをhmac.new()という形で中に変数を入れて使います。(インスタンスとして利用)

 

hmac(Hash-Based Message Authentication Code)とは、ハッシュ関数と呼ばれる暗号処理を使ってメッセージを暗号化したコードの略称です。

hmacを使うことで、APIキーや、メッセージ(ここでは欲しいデータを受け取るURLとタイムスタンプ)を送信時に誰かに盗聴されないようにしつつ暗号化してくれます。

最近のWebAPIではスタンダードの一つとなっています。

 

試しにsignatureの中のデータをprint()で出力してみます。

すると結果として以下のようなハッシュ値(ハッシュ関数を通した後の結果)が取得できます。

hmacの中ではSHA256と呼ばれるハッシュ関数を使って暗号化します(hashlib.sha256の部分)。ブロックチェーンについて調べた人であれば聞いたことがあるハッシュ関数だと思います。

 

中のデータが1文字でも異なると全く違うハッシュ値が生成されるのがハッシュ関数の特徴です。

 

途中のbytearray()はコンピューターが読める文字(バイナリデータ)に変換する処理です。

終わりのhexdigest()ではデータの連結を行なっています。

 

ヘッダー情報の準備

ヘッダー情報とは、サーバー側が読み込むための情報になります。人間のための情報というよりもサーバー側が正しくブラウザを表示するために必要となる情報です。

先ほど準備した変数を設定してあげます。

 

全てのWebページのサーバー操作にヘッダー情報がマストな訳ではなく、ある程度は自動でサーバー側が処理してくれますがそれで正しくブラウザ側が表示される保証はありません。

また、APIを使った操作に関してはheader情報はマストです。

 

‘Content-Type’ = ‘application/json’となっていますが、これはJSON文字列のことですね。

 

APIサーバーへリクエスト(データを取得するための命令)を投げる

最後に、ここまで準備した変数とヘッダー情報をAPIサーバーへ送ってあげましょう。

requests.get(base + path, headers = headers)で取得して、結果をres変数に代入します。

 

そしてpprint()を使っていい感じに改行しながら出力させます。

res.json()と書かれていますが、res変数をJSON形式で出力しますという意味ですね。

 

GETとPOSTの違いを知っておこう

HTTPメソッドの説明画像

今回は説明をカンタンにするためにGETでデータを取得しました。

 

ですが実際に自動売買を行う際に頻繁に利用するのはPOSTの方になります。

 

POSTを説明する前にこのGETやらPOSTってそもそも一体何かと言えば、サーバーとのやり取りを行うための規格、HTTP(HTTPメソッド)の一種になります。

POSTとGETはサーバーへの呼びかけ方(命令)が異なります

 

GET→データをちょうだい〜

POST→データを送るよ〜

 

この違いだけです。GETはシンプルなので、データをAPIサーバーへ要求するだけで済みます。

しかしPOSTはデータを送るため、当たり前ですがこちら側でデータを準備しないといけません。

 

次の項でparams変数にデータを入れて実際にPOSTして見ましょう。

 

POSTメソッドを使って指値注文を入れてみる

変化・追記のあるところだけハイライトにしました。

注文を行うためにpath変数のURLを変え、APIサーバーへ送るデータとしてparam変数を用意しました。

json.dumpsはparam変数をサーバーが読み取れるJSON形式へ変換(エンコード)しています。

res変数の中身に、「data = body」が追記されています。POSTに送りたいデータをdata変数に格納しているという意味ですね。

 

実際に実行して見る

実行してみると指値注文ができたことがわかります。

最初はbitFlyerライトニングのページを見ながら発注して見てください。数秒後に反映されるはずです。

 

ccxtを使わずにPythonでAPI認証をbitFlyerで行う方法 まとめ

ccxtを使わずにPythonでAPI認証をbitFlyerで行う方法 まとめ

API認証はややこしいものが多いです。しかしWebサービスのAPIを使っていくのであればなんどもぶつかると思われるので少しでも理解できれば今後にも応用できます。

 

今回の記事とは逆にccxtを使ってPythonで注文を行うのは【 コピペ 】 Pythonを使って仮想通貨(ビットコイン)で売買注文する方法を読んでみてください。

Pythonを使って仮想通貨(ビットコイン)で売買注文する方法 サムネイル

【 コピペ 】 Pythonを使って仮想通貨(ビットコイン)で売買注文する方法

2019年7月7日

 

もしもこの記事を読んでプログラミングってなんか面倒臭いなあ、と思ったら、プログラミング知識が不要な【 簡単◎ 】 スマホからビットコインで自動売買 【 iPhone・Android 】を読んでみてください。