コインチェック(Coincheck)APIをPythonで使う方法【ゼロから解説】
#本記事はプロモーションを含みます。
あなた
「コインチェックのAPIを使ってプログラミングで仮想通貨を取引してみたいけど、何から始めたらいいんだろう?一つずつ詳しく解説している情報はないかな。」
そんな悩みを解決します。
Pythonのプログラミング環境の作り方からコインチェックAPIの使い方まで、初心者向けにゼロから徹底解説します。
コインチェックのAPIを使いこなせば、仮想通貨への興味がもっともっと強くなること間違いなし。
ご注意
この記事や本サイトの情報を参考に仮想通貨のプログラムを動かす場合は、全て自己責任でお願いいたします。免責事項に記載の通り、本サイトの情報を参考にして発生したいかなる損害も責任を負いません。
この記事で分かること
- Pythonプログラミング環境の構築方法
- コインチェックAPIの仕組み
- コインチェックAPIの使い方
目次
コインチェック(Coincheck)APIをPythonで使うと何ができる?
あなた
「そもそも、コインチェックのAPIを使って何ができるんだろう?」
コインチェックAPIで具体的に何ができるのか、まずはイメージしてみるのが大事です。APIの使い方だけ分かっても意味がないので。
自動売買botプログラムや、仮想通貨の積立を完全自動化するプログラムなど、具体例をまとめた記事がありますのでぜひ参考にしてみてください。
仮想通貨を自動売買するbotの作り方【コピペOKなソースも公開】
仮想通貨の自動売買botに興味があるんだけど、どうやって作ったらいいんだろう?そんな疑問にお答えします。ビットコインやイーサリアムといった仮想通貨を自動売買できるbotを、初めての人でもコピペで作れるようにまとめました。仮想通貨の自動売買botが、Pythonプログラミングを始めてみるきっかけになるかも?
イーサリアム積立を完全自動化して賢く運用【コピペでチャレンジ】
イーサリアムを積立購入したいけど、すでに提供されてる仮想通貨の積立サービスを使うとスプレッドで損しちゃうな。賢く運用するには自分でいちいち現物取引して買うしかないの?その悩み、プログラムで完全自動化すれば解決。スプレッドも面倒もゼロです。この機会にプログラミングの基礎知識も身について、自己投資にもなりますね。
APIは、一つ一つの動きを単体で使うのでは無くて、組み合わせることによって色々なプログラムを作ることができます。
コインチェックAPIを使って具体的に何をしたいのか、使い方を学ぶ前にぜひイメージを膨らませておきましょう。
コインチェックAPIを学ぶ前にPythonのプログラミング環境を整える
今回、コインチェックAPIを使うために、Pythonというプログラミング言語を使っていきます。
まだPythonプログラミングをやったことがない方は、この記事を参考にPythonプログラミング環境を設定してみてくださいね。
MacでPython入門【驚くほど分かるチュートリアル】
Python入門したいけど、何から始めればいいんだろう?今使ってるMacでPythonプログラミングを始められるかな?そんな疑問にお答えします。Pythonプログラムの書き方から動かし方まで、具体例を交えて徹底解説。このチュートリアルの通りにやれば、必ずPython入門できます。
プログラミングって、思った以上に簡単です。すでにPythonを使える人は、どんどん先に進んじゃいましょう。
コインチェック(Coincheck)APIをPythonで使うには
それでは、早速コインチェックAPIの使い方を習得していきます。流れはこのイメージです。
- コインチェックAPIの概要を理解する
- コインチェックAPIでデータを取得する流れを理解する
- コインチェックAPIを実際に動かしてみる
一つずつ、深掘りしていきます。
コインチェックAPIの概要を理解する
まず、公式サイトで説明されているコインチェックAPIの仕様を簡単に理解します。
APIって何?
-> コインチェックの口座情報にアクセスするためのプログラミング用の窓口。Application Programming Interfaceの頭文字。
コインチェックのAPIには、大まかに2つの窓口があります。
- public API:取引所で公開されている情報にアクセスできる
- private API:自分の口座に関わる情報にアクセスできる
public APIでは、どんな売買注文が入っているのか?とか、誰でも見れるような板取引の情報にアクセスできます。
そしてprivate APIは、今どれだけの残高がある?どんな注文を入れる?といったあなただけの情報にアクセスできます。
public(公開さている情報)やprivate(プライベート情報)という名前の通りのイメージですね。
コインチェックAPIでデータを取得する流れを理解する
続いて、コインチェックAPIでデータを取得する流れを理解していきます。
まず、公式サイトに以下のURLがリクエスト先と書かれていますね。
https://coincheck.com
ここのURLに「こんな情報ちょうだい!」とリクエストを送ることで、コインチェック側からデータが送り返されてきます。
でも、コインチェックのAPIで取得できるデータは、多種多様。例えば、Public APIだけでもこんなたくさんの種類の情報が取れます。
この中から、例えばティッカー(銘柄)の情報、すなわちビットコインの取引される値段や取引量を取得するにはどうしたらいいのか?
コインチェックのティッカーのAPI説明をみると、GET /api/ticker と書かれています。これをリクエスト先のURLと合体させるとこうなります。
https://coincheck.com/api/ticker
すなわち、このURLにリクエストを出せば、ティッカー(ビットコインなどの銘柄)情報がもらえるわけですね。
他にも、例えば板情報(取引したいと提示されている価格情報)が欲しい場合も考えてみます。
コインチェックの板情報のAPI説明を見てみると、GET /api/order_books と書かれていますね。
これをリクエスト先のURLと合体させた以下のURLにリクエストを出せば、板情報が取れます。
https://coincheck.com/api/order_books
どうやってデータを取得すればいいのか、仕組みが分かってくると簡単。あとは、これをプログラミングで表現すれば良いわけです。
コインチェックAPIを実際に動かしてみる
コインチェックAPIの仕組みがわかったところで、今度はそれをプログラミングで実際に動かしてみましょう。
ここからは、Python入門チュートリアルのように、プログラミングの設定ができている状態で話を進めます。
まず、以下のコマンドでrequestsというPythonのパッケージをインストールします。
pip install requests
コインチェックAPIのデータ取得の流れで分かったように、特定のURLへ「この情報がほしい」とリクエストを送ることでデータを取得します。
そのリクエストを送るためのPythonのライブラリ(簡単にリクエストできる便利ツール)がrequests。このライブラリで、コインチェックAPIがかなり簡単に使えるようになります。
それでは、以下のコマンドでPythonを立ち上げてみましょう。
python3
すると、以下のようにコマンドを入力していく画面が出てきます。
>>> (ここにコマンドを入力していく)
そのコマンド入力部分に、以下のコマンドを打ち込みます。先ほどインストールしたrequestsモジュールをインポート(取り込む)しています。
>>> import requests
続いて、ティッカー(銘柄)の情報がもらえるURLを設定しておきましょう。事前に学んだ通り、こんなURLでしたね。
>>> url = 'https://coincheck.com/api/ticker'
そして、このコマンドでurlにリクエストを送って、データをゲットします。
>>> r = requests.get(url)
正しくデータを取得できれば、r にデータが格納されます。このコマンドで中身を除いてみましょう。
>>> print(r.json())
jsonというのはデータフォーマットのことで、json形式で表示することで取得したデータが見やすくなります。
以下のような情報が表示されていれば、成功。ビットコインの値段の情報が取れていますね!
{'last': 5375626.0, 'bid': 5375664.0, 'ask': 5377499.0, 'high': 5389999.0, 'low': 5100000.0, 'volume': 2684.17282837, 'timestamp': 1629503553}
一つ一つのパラメータの意味は、コインチェックAPIの公式サイトで説明されているので参考にしてみてくださいね。
コインチェックのAPIを使う基礎って、たったこれだけ。意外と簡単だな!と思いませんでしたか?
ここでは、分かりやすくなるように一つずつコマンドを実行していきましたが、まとめるとたったの4行です。
import requests url = 'https://coincheck.com/api/ticker' r = requests.get(url) print(r.json())
Python入門チュートリアルで紹介しているように、この4行をPythonのプログラムファイルにまとめて一括で実行しても、同じ結果が得られます。
ここまで来れたあなた、気づかぬうちにもうコインチェックAPIをプログラミングで操作できちゃってますよ!
コインチェック(Coincheck)APIをPythonでさらに使いこなす
ここからは、コインチェックAPIをさらに使いこなしていってみましょう。
まず、コインチェックAPIにはこの2つの窓口がありました。
- public API:取引所で公開されている情報にアクセスできる
- private API:自分の口座に関わる情報にアクセスできる
ティッカー(銘柄)の情報を取得するときに使っていたのは、public APIの方。
公開されている情報にアクセスしていたので、とてもシンプルなプログラムになりましたよね。
今度は private APIを使って、あなただけの情報にアクセスしてみます。流れはこの通りです。
- コインチェックAPIのAPIキーを発行する
- コインチェックAPIの認証の仕組みを理解する
- コインチェックAPIでprivate APIを使ってみる
一つずつ、やってみましょう。
private APIを使う前に
private APIではあなたの口座にアクセスするので、まずはコインチェックの口座開設が必要です。
private APIを使いこなしていくためにも、まだ口座を開設されていない場合は事前に申し込んでおいてくださいね。
コインチェックAPIのAPIキーを発行する
まずは、コインチェックAPIのAPIキーを発行しておきましょう。
private APIはあなただけの専用窓口。そのため、公式サイトにある認証の説明にある通り、APIキーというあなた専用の”鍵”を使う必要があります。
あなた専用のAPIキーなので、取扱注意。この2点をしっかり理解しておきましょう。
- private API を使うにはAPIキーが必要
- APIキーは人に教えちゃダメ
それでは、APIキーを発行する手順に入っていきます。
まずはコインチェックにログイン。そして、左メニューにある歯車のアイコンをクリックして、APIキーを選択。
続いて、新たにAPIキーを追加する、というボタンをクリック。
すると、ダイアログが出てきます。後からprivate APIを使って注文してみるので、新規注文を選択して作成します。
現時点では新規注文のみを選択しますが、必要に応じて後からでも修正可能です。
最後に、アクセスキーとシークレットキーが表示されます。これを使って、private APIを操作することができるようになります。
コインチェックAPIの認証の仕組みを理解する
続いて、コインチェックのprivate APIを使うための認証の仕組みを理解します。
コインチェックAPIの公式説明を読むと、リクエストの作成という項目でこのような説明があります。
リクエストの作成
認証が必要なリクエストでは、以下の情報を HTTP Header に含めてリクエストする必要があります。ACCESS-KEY:APIキー で作成したアクセスキー
ACCESS-NONCE:毎リクエストごとに増加する必要のある正の整数。通常はUNIXタイムスタンプを用います。
ACCESS-SIGNATURE:後述するSIGNATURE
(引用:コインチェックAPI公式説明ページ)
SIGNATUREの作成
SIGNATUREは、ACCESS-NONCE, リクエスト先URL, リクエストのボディ を全て文字列にし連結したものを、
HMAC-SHA256 hash形式でシークレットキーを使って署名した結果です。
(引用:コインチェックAPI公式説明ページ)
これを一つずつ噛み砕いてみましょう。まず、必要な情報はこの3つ。
- ACCESS-KEY
- ACCESS-NONCE
- ACCESS-SIGNATURE
ACCESS-KEYは、APIキーを作ったのですでに持ってますね。
ACCESS-NONCEは、「通常はUNIXタイムスタンプを用います」と説明があります。これは、同じ数字を使い回さないように現在時間をベースにした情報を使ってね、という意味。Pythonで簡単に取得可能です。
ACCESS-SIGNATUREは、この3つの情報を文字列で連結して、HMAC-SHA256 hash形式でシークレットキーを使って署名する、と書かれています。
- ACCESS-NONCE
- リクエスト先URL
- リクエストのボディ
ACCESS-NONCEは、先ほどの説明と同じ。Pythonで簡単に取得できます。
リクエスト先のURLも、public APIを使った時と同じように作れば簡単にできそうですね。
リクエストのボディは、ビットコインをいくらで買います、といった詳細な注文情報とかを意味しています。
すなわち、この3つの文字列を作って、全部繋げて、あなたのシークレットキーで署名すればよいということですね。
この情報をもとに、早速プログラミングで組み立ててみましょう。
コインチェックのprivate APIを使ってみる
いよいよコインチェックのprivate APIを使っていきます。
理解した認証の仕組みを活用して、このような流れでプログラムを組み立てます。
- 必要なライブラリをインポートする
- 注文情報を作る
- 認証に必要な文字列を作る
- シークレットキーで署名する
- リクエストに必要なヘッダーを作る
- requestsを使って注文を入れる
まず最初に、プログラム全体はこうなります。これを、一つずつ理解していってみましょう。
# 必要なライブラリをインポートする import time import hmac import hashlib import json import requests # 注文情報を作る params = { 'order_type': 'market_buy', 'pair': 'btc_jpy', 'market_buy_amount': 500 } # 認証に必要な文字列を作る nonce = str(int(time.time())) url = 'https://coincheck.com/api/exchange/orders' body = json.dumps(params) message = nonce + url + body # シークレットキーで署名する secret_key = 'あなたのシークレットキー' signature = hmac.new(secret_key.encode(), message.encode(), hashlib.sha256) signature = signature.hexdigest() # リクエストに必要なヘッダーを作る access_key = 'あなたのアクセスキー' headers = { "ACCESS-KEY": access_key, "ACCESS-NONCE": nonce, "ACCESS-SIGNATURE": signature, "Content-Type": 'application/json' } # requestsを使って注文を入れる r = requests.post(url, headers=headers, data=body)
まず最初に、この5つのライブラリをインポート。
import time import hmac import hashlib import json import requests
それぞれ簡単に説明しておくと、timeモジュールはACCESS-NONCE用のタイムスタンプ取得用です。
hmacとhashlibモジュールは、ACCESS-SIGNATUREを作成するために使います。jsonモジュールは、json形式のデータを扱うために使います。
requestsは、public APIの時も使いましたね。
次に、以下の通り注文情報を作ります。
params = { 'order_type': 'market_buy', 'pair': 'btc_jpy', 'market_buy_amount': 500 }
「成行で買う、ビットコインを日本円で、500円分、という意味。直感的で分かりやすいですね。これは辞書型といって、キーと値をそれぞれセットにしてparamsに格納しています。
もし指値注文をしたい場合には、コインチェックAPIの新規注文の説明にある通り、’order_type’を’buy’にして、他に’rate’(注文レート)や’amount’(注文量)も指定する感じです。
続いて、コインチェックAPIの認証の仕組みに従って、あなたの署名(あなたの注文であると証明されたデータ)を作っていきます。
改めて説明を読んでみましょう。
SIGNATUREの作成
SIGNATUREは、ACCESS-NONCE, リクエスト先URL, リクエストのボディ を全て文字列にし連結したものを、
HMAC-SHA256 hash形式でシークレットキーを使って署名した結果です。
(引用:コインチェックAPI公式説明ページ)
ACCESS-NONCE、リクエスト先URL、リクエストのボディ、という3つを全て文字列にして連結すると書いてありますね。
説明通りに、以下のコマンドでその文字列を作ってみます。
>>> nonce = str(int(time.time())) >>> url = 'https://coincheck.com/api/exchange/orders' >>> body = json.dumps(params) >>> message = nonce + url + body
1行目は、nonce(ACCESS-NONCE)。時間情報データ(タイムスタンプ)を取得しています。Pythonなら簡単ですね。
2行目は、新規注文の説明にある通り、api/exchange/orders を使ってリクエスト先のURL(url)を作成。これはpublic APIの時と同じ。
3行目は、先ほど作った params という注文情報を、JSON文字列として整形することでリクエストのボディ(body)になります。
4行目、この3つの文字列を全部くっつければ、必要な文字列を連結した message の完成です。
あとは、以下の通りシークレットキーとmessageを使って、HMAC-SHA256 hash形式で署名を作っていきましょう。
>>> secret_key = 'あなたのシークレットキー' >>> signature = hmac.new(secret_key.encode(), message.encode(), digestmod=hashlib.sha256) >>> signature = signature.hexdigest()
1行目は、あなたのシークレットキーを secret_key に格納。
2行目は、そのシークレットキーと、連結して作った文字列 message を使って、SHA256というアルゴリズムでハッシュ化。(パッと見ではよく分からない適当な文字列になるように変換)
最後に3行目、hexdigest で16進数に変換することであなたの署名が完成です!
なお、hmacの詳細はPython.orgで説明されています。
一見難しく見えますが、ひとまずこの通りに覚えてしまってもOK。このハッシュ化の手法は色々なAPIでもよく使われるので、他のAPIを使うときにも役に立ったりしますよ。
話を戻して、できあがった署名を使ってリクエストを送ってみましょう。まず、リクエストの作成方法の説明を改めて読んでみます。
リクエストの作成
認証が必要なリクエストでは、以下の情報を HTTP Header に含めてリクエストする必要があります。ACCESS-KEY:APIキー で作成したアクセスキー
ACCESS-NONCE:毎リクエストごとに増加する必要のある正の整数。通常はUNIXタイムスタンプを用います。
ACCESS-SIGNATURE:後述するSIGNATURE
(引用:コインチェックAPI公式説明ページ)
ACCESS-KEY、ACCESS-NOCE、ACCESS-SIGNATURE、この3つの情報をヘッダーにまとめると書いてあります。作りましょう。
access_key = 'あなたのアクセスキー' headers = { "ACCESS-KEY": access_key, "ACCESS-NONCE": nonce, "ACCESS-SIGNATURE": signature, "Content-Type": 'application/json' }
説明されている通りに、3つの情報をヘッダーにまとめました。アクセスキーは、シークレットキーじゃない方のキーなのでご注意を。
最後に、署名情報とアクセスキーを入れた headers と、注文情報をいれた body を使ってリクエストを実行!
r = requests.post(url, headers=headers, data=body)
…すると、こんなエラーが出てきたのではないでしょうか?
{'success': False, 'error': 'Amount 量が最低量(0.005 BTC)を下回っています'}
private APIを使って、ちゃんと注文情報は出せているようですね。
でも、実は先ほど作った注文パラメータ(params)では、コインチェックの取引最小単位に満たない状態でした。
具体的に、「取引所での取引最小単位は0.005通貨単位以上で、かつ500円相当額以上」だとコインチェックで公式説明されています。
本記事執筆時点(2021/08/21)のBTY/JPYレートがざっと5,000,000円前後。すなわち、500円分のビットコインを買おうとしても、買えるのは0.0001枚(500 / 5,000,000)だけ。
確かに、取引最小単位には足りていないですね。
本記事執筆時点(2021/08/21)のBTY/JPYレートで取引最小単位の0.005枚以上のビットコインを注文するには、ざっと25,000円(5,000,000 x 0.005)前後を取引しなければならないってことです。
実際に注文するには?
本記事は、あくまでコインチェックのAPIをゼロから理解するための解説記をしているので、あえて少額の注文を入れたためにこういう結果になりました。
では、本当に注文して買うためにはどうすれば良いか?答えは簡単、このparamsを修正すればいいですよね。
params = { 'order_type': 'market_buy', 'pair': 'btc_jpy', 'market_buy_amount': 500 }
実際に注文をしてみたい時は、この注文パラメータを修正してトライしてみてくださいね。
コインチェック(Coincheck)APIをPytonで使いこなして仮想通貨を活用しよう
コインチェックAPIの使い方をゼロから解説しました。
わざわざ銀行を使わなくても、プログラミングを通じてお金を取引できる自由を実現したのが仮想通貨。
あなたもコインチェックのAPIを駆使して、自己責任で色々なプログラムを動かしてみてくださいね。
自動売買botや自動積み立て等、仮想通貨プログラミングでできることは無限大です。
仮想通貨を自動売買する自作botの作り方【コピペOKなPythonソースも公開】
仮想通貨の自動売買botに興味があるんだけど、どうやって作ったらいいんだろう?そんな疑問にお答えします。ビットコインやイーサリアムといった仮想通貨を自動売買できるbotを、初めての人でもコピペで作れるようにまとめました。仮想通貨の自動売買botが、Pythonプログラミングを始めてみるきっかけになるかも?