1. 仮想通貨取引所の口座を準備
今回は、仮想通貨取引所(仮想通貨交換業者)が公開しているAPIを簡単に試してみたいと思います。
ここで試してみたのは以下の2社です。口座開設は簡単だと思います(無料です)。
(パブリックAPIを用いた板情報の取得の記事(第2回)はこちら → https://racooma.com/medium/2017/09/17/exchanges-api-trial-02/)
・bitFlyer (ビットフライヤー)
・coincheck (コインチェック)
2. 各API ドキュメント
適宜以下のリンクを参考に進めて行きましょう。
・bitFlyer Lightning API Document (bitFlyer Lightning API Playground)
・coincheck API Document
3. Cloud9で簡単に環境構築
Cloud9というサービスを利用すると、サーバーなどをお持ちでなくても、またご自身のPCやMacに環境構築をしなくても、WebブラウザだけでNode.jsやPython(Django), Ruby, PHPなどのサーバー環境を利用することが出来ます。そして、CLIも使えるので、追加で必要なライブラリなどもインストールすることが可能です。(クレジットカードまたはデビットカードの登録は必要ですが、これはスパム防止のためという側面があり、基本的には無償利用可能です。)
まずは、Cloud9に登録し、新しいワークスペースを作ります。
今回は、Node.js(JavaScript)を試してみたいと思います。
ワークスペースの作成が完了しましたら、プロジェクト配下のファイルとフォルダをすべて削除してください。すべてのリソースを選択して右クリックでコンテキストメニューを表示するか、ツールバーの「File」から「Delete」を選択します。
それが出来ましたら次に、下のコンソール(いわゆる黒い画面: Terminal, Command Prompt)で次のコマンド(npm init)を実行します。
するとpackage.jsonというファイルが生成されますので、次に以下のコマンドを実行して必要なライブラリをインストールしてください。(npm install –save request crypto)
「–save」を付けることで、package.jsonにも依存情報が追記され、node_modulesディレクトリに依存関係を含めて必要なライブラリ群がインストールされます。
次に、package.jsonのscriptsの「start」の箇所を以下のように修正してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
{ "name": "workspace", "version": "1.0.0", "description": "", "main": "main.js", "dependencies": { "crypto": "^1.0.1", "request": "^2.81.0" }, "devDependencies": {}, "scripts": { "start": "node main.js" }, "author": "", "license": "ISC" } |
そして次に、「File」→「New File」を選択して新しいファイルを作成し、以下の内容でファイル名を「main.js」として保存します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
var request = require('request'); var crypto = require('crypto'); var key = process.env.bfkey; var secret = process.env.bfsecret; var timestamp = Date.now().toString(); var method = 'GET'; var path = '/v1/me/getbalance'; var text = timestamp + method + path; var sign = crypto.createHmac('sha256', secret).update(text).digest('hex'); var options = { url: 'https://api.bitflyer.jp' + path, method: method, headers: { 'ACCESS-KEY': key, 'ACCESS-TIMESTAMP': timestamp, 'ACCESS-SIGN': sign } }; request(options, function (err, response, payload) { console.log(payload); }); |
これで、ご自身の残高を確認することが出来るのですが、「key」と「secret」という変数があることにお気づきでしょうか?
パブリックAPIとプライベートAPI
板情報などを取得するような認証を必要としないAPIを「パブリックAPI」と呼び、認証を必要とするものを「プライベートAPI」と呼びます。
今回は、プライベートAPIを呼び出しています。
そのためにはご自身の「API KEY」と「API SECRET」などと言われる認証情報が必要です。
それらを取得するためには、bitFlyerならば「bitFlyer Lightning」のページに行きます。
画面左上辺りのハンバーガーアイコン(Ξ)を選択し、メニューから「API」を開きます。
「API」を開くと次のような画面になりますので、必要な権限のみを選択し、「API Key」と「API Secret」を控えておいてください。絶対に他の人に漏れないようにご注意ください!
あともう少しです!
それらを控えたら、main.jsの中のprocess.env.bfkey, process.env.bfsecretで利用できるように環境変数にセットします。それを行なうには以下のようにexportコマンドを実行します。
お待たせしました。では実行しましょう!
package.jsonのscriptsに実行用コマンドを記述しているので、あとは「npm start」を実行するだけです!
わぉ!残高80!…円です。。
哀しいけれど、これで自分の取引残高を取得することが出来ました!
coincheckもやってみよう
ということで、coicheckでは出金履歴でも見てみましょうか…
コードは少し違いますが、基本的な考え方は似ています。リクエストヘッダー等が少々異なります。ACCESS-SIGNATURE は、 ACCESS-NONCE URLリクエストのボディを文字列にして連結したものを、HMAC-SHA256ハッシュ形式でAPI Keyを用いて署名したものとします。ccの出金履歴取得のためのコードも載せますね。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
var request = require('request'); var crypto = require('crypto'); var key = process.env.cckey; var secret = process.env.ccsecret; var timestamp = Date.now().toString(); var method = 'GET'; var path = 'https://coincheck.com/api/withdraws'; var text = timestamp + path; var sign = crypto.createHmac('sha256', secret).update(text).digest('hex'); var options = { url: 'https://coincheck.com/api/withdraws', method: method, headers: { "ACCESS-KEY": key, "ACCESS-NONCE": timestamp, "ACCESS-SIGNATURE": sign } }; request(options, function (err, response, payload) { console.log(payload); }); |
結果は…
こんな感じです。お疲れ様でした!!
ということで、今回は2つの仮想通貨取引所でプライベートAPIを用いて自分のデータの取得を試してみました。
これを応用すれば、システムトレード(アルゴリズミックトレード)等も出来てしまいそうな気がしますね!
以下の書籍や、Udemyの講座も参考になるかも知れません。
こちらはPythonを用いたシステムトレードの書籍です。こちらではZaifも取り扱っているようですね。
もう一つ、こちらは動画で学べるコースです。プログラミング言語としてはRubyを用いています。3時間程度で、Rubyの基礎から実際の売買までを行なうところまで学べます。ゆったりしているので、倍速でもご覧いただけるかと思います。学生さんで、プログラミングの講師もなさってるんですね。実は私も会計学を学び始めたばかりの学生でもあります。
気付いたら75個のコースに登録していましたが、React & Reduxのコースは特にオススメです。機械学習、データサイエンス、デザイン、Web開発、他にも沢山あって紹介しきれない程です…
最初に受講したのはこちらだったような気がします。都内で行われている「Python勉強会」でおなじみの辻さんが日本語版のトレーナーをされています。
…と、最後に脱線してしまいましたが、いかがだったでしょうか。
トレードをするもよし、ICOをするもよし、コミュニティ活動をするもよし。暗号通貨の世界への関わり方は人それぞれです。
(翻訳ばかりしていないで)暗号通貨の世界で何かを生み出したい。そんな皆さまの一助となれば幸いです… 何かご要望等がありましたらコメント欄に頂けたらと思います。
(もしかするとデスクトップアプリや、モバイルアプリの開発記事なども書くかも知れせん。予定は常に未定です。)