前回の記事で、文系初心者の方でも、おおまかにAPIが何なのかまでは理解できたのではないかと思います。
APIというのは要するに、URLの形式で外部のサーバーにWEB経由で何らかの指示やリクエストを出すためのコマンドのようなものです。仮想通貨の自動売買BOTを作成するときは、必ず各取引所が提供しているAPIを利用します。
今回はいよいよ、Bitflyerでビットコインの自動売買をするためのAPIを使ってみましょう。
パブリックAPIを使ってみよう
ここまで一口にAPIと説明してきましたが、実はAPIには「パブリックAPI」と「プライベートAPI」の2種類があります。
パブリックAPIとは
パブリックAPIは、誰でもアカウント登録をすることなく使えるAPIです。同じURLでリクエストを送りさえすれば、誰でも同じ結果を取得できます。そのため、主に外部のサーバーからデータなどを引っ張ってくるときに使います。
例えば、以下はBitflyerの現在のマーケット状況を取得する「パブリックAPI」です。
https://api.bitflyer.jp/v1/ticker/
こちらはBitflyerの「BTC現物」の買い気配値(best_bid)、売り気配値(best_ask)、それぞれの注文サイズ(単位:BTC)、最終取引価格(LTP)、24時間の取引量などを取得するパブリックAPIです。
参考:気配値とは
単にデータを引っ張るだけのAPIなので、誰が上記のURLを閲覧しても同じ内容が表示されます。前回の記事で勉強した「ビットコインの過去の価格データを引っ張るAPI」も、典型的なパブリックAPIですね。
プライベートAPIとは
一方、プライベートAPIは、個人ごとにアカウント認証をし、秘密のパスワードを知ってるユーザーだけが送ることのできるAPIです。本当に単純なイメージとしては、URLの末尾やヘッダーに自分しか知らないパスワードを暗号化して付けて送るような感じだと思ってください。
プライベートAPIは、例えば、売り注文・買い注文を出したり、個人のアカウントに紐づけられた残高や注文状況を確認するときに使います。当然、これらのリクエストは個人によって返ってくる結果が異なりますし、他の人に勝手に送られても困ります。そのため、プライベートAPIを使います。
プライベートAPIについては、また次回以降の記事で説明します。
BitflyerのパブリックAPIをPythonで使ってみよう
上記のURLにアクセスした方は、もう既にbitFlyerのパブリックAPIを「使った」ことになります。
ですが、せっかく前回までの記事でPythonのプログラムの書き方を覚えたので、ブラウザで閲覧するのではなく、Pythonのプログラムで情報を取りに行かせてみましょう。
テキストエディタを開いて、以下のプログラムを入力してみてください。
import requests response = requests.get("https://api.bitflyer.jp/v1/ticker/") print(response.json())
これをまた「test.py」というファイル名で保存しましょう。
そしてAnacondaプロンプトでこれを実行してみます。
手順は覚えていますね?
以下のコマンドを実行します。
※ 手順がわからない方はこちらの記事参照。
すると以下のような感じの結果が表示されたはずです。
{'product_code': 'BTC_JPY', 'timestamp': '2018-03-11T20:54:26.257', 'tick_id': 1657905, 'best_bid': 1032928.0, 'best_ask': 1033522.0, 'best_bid_size': 0.005, 'best_ask_size': 0.046, 'total_bid_depth': 2593.67397399, 'total_ask_depth': 3282.80941985, 'ltp': 1033522.0, 'volume': 305621.56955061, 'volume_by_product': 24942.44036488}
これはさっきブラウザで見たものと全く同じですね。
同じデータをpythonでプログラムに「取ってこさせる」ことができました。
一応、ここでもプログラムの意味を確認しておきましょう。
大雑把でいいので、はじめて見たコードの意味は、調べる癖を付けることが重要です。
1)import requests
requestsというライブラリをインポートしています。
pythonで外部のURLにアクセスするときには、大抵このライブラリを最初にインポートします
2)response = requests.get(“URL”)
外部のURLにアクセスしてその結果を「response」という変数にセットしています。変数の名前は何でも構いません。略で「r」などにすることも多いです。
3)print(response.json())
さっきWEBから取得したレスポンスのJSONデータをパースして、それを黒い画面に表示しています。「JSON形式のファイルをパースして…」の意味は次の記事で説明します。
実は、上記の3行をカスタマイズするだけで、bitFlyerのほとんどのパブリックAPIが利用できます。bitFlyerには、他にも以下のようなパブリックAPIがありますので、自分でも試してみてください。
板情報を取得するAPI
https://api.bitflyer.jp/v1/board/
直近からの約定履歴を取得するAPI
https://api.bitflyer.jp/v1/executions/
取引所の稼働状況が正常かどうかを確認するAPI
https://api.bitflyer.jp/v1/gethealth/
他にどのようなAPIがあるかは、こちらのbitFlyerのAPI仕様書を読みましょう。難しそうなAPIの仕様書に対してのアレルギーも少しずつ減らしていきましょうね。
返ってきた数字の羅列データを使いこなす
さて、これであなたもbitFlyerのパブリックAPIを利用して、板情報を取得したり、ティッカー情報(売り板や買い板の気配値)などを取得するPythonプログラムが書けるようになりました! もう少しだけプログラムを勉強すれば、「10秒に1回、自動的に気配値を取得する」といったプログラムも簡単にかけます。ぐんぐん幅が広がりますね!
ただしここで少し疑問に思ったことがあるはずです。
「取得したデータがゴチャゴチャしてて読めないんだけど」
「この数字の羅列のデータをどうやって使うの?」
その通りです。
前回の記事から2記事続けてAPIを利用する方法を説明してきましたが、どのサービスのAPIを利用しても、似たような形式のデータが返ってくることに気付いたはずです。つまり、改行も空白も装飾も何もない数字とカンマとカッコ({})だけの羅列データです。
実は、このデータ形式のことを「JSON形式」といいます。人間にはひたすら読みにくいデータの羅列でしかありませんが、実はこの形式は、プログラム(機械)にとっては効率よく読みやすいデータ形式なんです。
次回の記事では、このJSON形式のデータから必要なデータだけを取り出す方法を解説します。