「API」って何?仮想通貨の価格データをAPIで取得してみよう

さて、前回までの記事を読んだ方であれば、現在時刻を取得してAnacondaプロンプトに表示するプログラムを、Pythonで書くことができたはずです。これであなたもプログラマーです!

これは別に冗談ではありません。

前回の記事では、自分で複雑なプログラムを書けなくても、最初に「import datetime」と記述することで、賢い人たちが開発したdatetimeというプログラム集を、そのまま借りて使うことができました。基本的な考え方はこれと同じです。

仮想通貨の売買を自動化するBOTを作成するときも、基本的には、取引所が提供している「API」や、他の賢いプログラマの人たちが開発している「ライブラリ」をそのまま使います。

まずは「API」というのが何なのか、簡単に理解しておきましょう。

「API」とは何か?

「APIを叩いてJSONをパースして….」とかっていう会話を聞くと、「り、理系ってすごい….何でも出来てカッコいいなぁ…」と思ってしまいがちです。

しかしAPI自体は、別に難しいものではありません。

要するに、APIというのは外部のサーバーに対して、何らかの指示(命令)をWEB経由で送るためのコマンドのようなものだと思ってください。自分でAPIを作るのは難しいですが、外部サーバーが用意してくれているAPIを使わせて貰うのは全然難しくありません(笑)

例えば、以下はAPIの1つの例です。このURLをそのままブラウザのURL欄に入力してみてください。

https://api.cryptowat.ch/markets/bitflyer/btcjpy/ohlc?periods=86400&after=1514764800

リンクはこちら

ブラウザに打ち込むだけで構いません。
すると、以下のような画面が表示されたはずです。

はい!
これであなたも「APIを叩く」ことができました。

これは、実は、Bitflyerの2018年1月1日以降のビットコインの日足の価格データを取得するAPIです。
cryptowatchというサイトが用意してくれているAPIです。

このCryptowatchというサイトには、世界各国の取引所の多くの仮想通貨(BTC/ETH/XRP…)の価格データが蓄積されています。さらにサイト側がAPIを用意してくれているので、あなたは上記のURLを入力するだけで、cryptowatchのサーバーから、ありがたく価格データを引っ張ってくることができます。

「API」で取得したデータの中身

本質的には、APIを利用することと、WEBサイトを閲覧することは同じ行為です。どちらも外部のサーバにURLでリクエストを送って、サーバー側から情報を引っ張ってくる行為です。

ただしAPIの場合は、基本的には引っ張ってくるのは「プログラムで使うためのデータ」です。人間の目で見るためのWEBページではありません。そのため、デザイン・空白・装飾・改行といった邪魔なものはすべて取り払われています。

シンプルにデータ(数字)が決められた順番で、カンマで区切られて並んでいます。この形式の方がプログラムで扱いやすいからですね。例えば、取得されたデータの先頭部分を抜き出してみましょう。
以下のように記載されています。

{"result":{"86400":[[1514764800,1519999,1713306,1502242,1675100,20188.11,32083065000]

これは何を意味しているのでしょうか。

まず86400は「日足データ」を意味しています。
プログラムに慣れてくるとわかりますが、これは「86400秒」の意味です。つまり「1日」と同じ単位です。機械は大きな数を扱うのが得意なので、1時間・1日・1週間などと言われるよりも、3600秒・86400秒・604800秒と言われた方が、扱いやすいんですね。

その次に続く[]の中に含まれた数字を見てみましょう。
それぞれ以下になります。

1514678400 ・・・ UNIX時間で「2017/1/1 09:00:00」の意味
1519999 ・・・ この日のビットコインの始値 151万9999円
1713306 ・・・ この日のビットコインの高値 171万3306円
1502242 ・・・ この日のビットコインの安値 150万2242円
1675100 ・・・ この日のビットコインの終値 167万5100円
20188.11 ・・・ この日の出来高

なぜこれらの数字が日付とか、高値・安値とか、出来高を意味するとわかるのでしょうか? それは、CryptowatchのAPI仕様書にそう書いてあるからです(笑) 今は読まなくていいですが、以下のページをチラっと覗いてみてください。

CryptowatchのAPI仕様書

そこにこう書いてあります。

values are in this order:
[ CloseTime , OpenPrice , HighPrice , LowPrice , ClosePrice , Volume]

(訳):
数字はこの順番で並んでいます:
[ 日時 , 始値 , 高値 , 安値 , 終値 , 出来高 ]

APIは各サービスが独自に提供しているものなので、返ってきたデータが何の数字で、どの順番で並んでいるかを理解するには、そのAPIの仕様書を読む必要があります。

最初は億劫に感じるかもしれませんが、APIの意味を知りたければ、Googleで検索して出てきたブログを読むよりも、公式サービスが提供しているAPI仕様書を読んだ方がわかりやすいですし確実です。

APIを送るコマンドの仕組み

先ほどのAPIのコマンドは「Bitflyerの2018年1月1日以降の日足価格データを取得するAPIだ」と説明しました。もう1度、さっきのURLを見てみましょう。

https://api.cryptowat.ch/markets/bitflyer/btcjpy/ohlc?periods=86400&after=1514764800

URLの中に、以下のような文字列が入っていますね?

bitflyer ・・・ 取引所の名前
btcjpy ・・・ BTC/円の通貨ペア
periods=86400 ・・・ 日足
after=1514764800 ・・・ UNIX時間で「2018/01/01 09:00:00」以降

カンの良い方ならわかると思いますが、「bitflyer」の部分を「poloniex」に換えればpoloniexの価格データが見れます。

poloniexにはJPY通貨ペアはないので、USDT(デザー)建てで調べてみましょう。ついでに価格データは週足で取得して、期間は2017年1月以降にしてみましょう。

以下のようなURLになるはずです。

https://api.cryptowat.ch/markets/poloniex/btcusdt/ohlc?periods=604800&after=1483228800

※ 「bitflyer」を「poloniex」に変更、「btcjpy」を「btcusdt」に変更、「periods=86400」を「periods=604800」に変更、「after=1514764800」を「after=1483228800」に変更

APIを叩いてみると、以下のような結果が得られます。

※ なお、「2017年1月1日 午前9時0分0秒」をUNIXスタンプ(1483228800)に変換するには、以下のようなサイトを使います。

UNIXタイムスタンプ変換サイト

色々とパターンを変えてブラウザに入力してみてください。
何も表示されなければ、その価格データはサーバーに存在しないという意味です。

(練習問題)
・2015年1月のリップル(XRP)の価格をpoloniexからBTC建てで取得してみよう!

APIを使うのは難しくない

これであなたもCryptowatchのAPIを使いこなすことができました。意外と難しくなかったですよね?(笑)

ただし初対面のAPIを自力で使いこなすためには、APIの仕様書だけは読まなければなりません。すべてのAPIの意味を手取り足取り教えてくれるブログはありません。

今回のURLも、なぜこの順番(markets/取引所名/通貨ペア/ohlc?periods=ローソク足の時間軸)で記述するのかは、API仕様書を見なければわかりません。

ただし仕様書を読むといっても、長い英語のAPI仕様書を先頭から全部読みこむ必要は全くありません。何となく「やりたいこと」を書いてそうな部分にアタリを付ければいいだけです。

例えば、上記のAPI仕様書であれば、F3キーを使って「price」と単語をページ内で検索します。これはただのカンです。すると大体、何カ所かに読む場所を絞ることができます。ざっとスクロールしてみて、「High price(高値)」「Volume(出来高)」などの単語にピンと来れば、すぐに該当箇所を特定することができます。

(英語が苦手な方は、最初に右クリックで「日本語に翻訳」して「価格」でページ内検索してみてください。プログラムの仕様書などは、かなり読めるレベルで翻訳できます。)

さて、APIが何かを理解したところで、次はいよいよ取引所のAPIを利用してみましょう。

「「API」って何?仮想通貨の価格データをAPIで取得してみよう」への6件のフィードバック

      1. 修正ありがとうございます
        CryptowatchのAPI仕様書のリンクも同じく脱毛サイトになっている様ですので修正をお願いします。

    1. ありがとうございます!
      ただ私のサイトと関係ないので報告いただいて感謝してます。元のリンク先は、記事作成時にはcryptowatch所有のドメインだったのですが、いつの間にか失効してどこかのアフィリエイターさんに転用されたみたいですね。

ryota へ返信する コメントをキャンセル

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です