少し前になりますが、先月のMeta2体験会に備えて仮想通貨周りを調べたことがありました。
(ここでは仮想通貨の取引所のHPを空間に浮かべるブラウザアプリをデモしました)
調べている中で、bitFlyerがPubNub経由で情報を公開していることがわかりました。また、PubNubはUnityでも使えることがわかったので、今回はbitFlyerのPubNub経由の情報をUnity表示する方法を整理しました。
なお、以下の環境で動作を確認しています。
- Mac OSX 10.12.6
- Unity2017.2.0f3
- PubNub Unity SDK 3.7.10
0. 仮想通貨のAPI概要
仮想通貨といえば、日本でも複数の取引所があり、その多くはAPIを提供しています。API | 仮想通貨ビットコイン(Bitcoin)の購入/販売所/取引所【bitFlyer(ビットフライヤー)】
取引所APIドキュメント | 仮想通貨取引所のCoincheck(コインチェック)
ZaifAPI ドキュメント — Zaif api document v1.1.1 ドキュメント
APIを使うと、現在の板情報、約定情報、Tickerなどが取得できます。プライベートキーを取得すると、注文や入出金なども可能になります。
今回はPubNubを介して仮想通貨の情報を公開している、BitFlyerのAPIを使わせていただきました。なお、この記事では、仮想通貨に関する個別用語の解説は省略させていただきます。
1. PubNubとは?
PubNub社のHPによると、強固な通信セキュリティが保証されたrealtime infrastructure-as-a-serviceです。About PubNub, The World's Only Global Data Stream Network | PubNub
Intelの紹介ページによると、2000社以上のパートナー企業を持ち、2億台以上のデバイスで使われているようです。
PubNub | Intel ソリューション・ディレクトリー
ざっくりいうと、PubNubというサービスを介することで、言語や開発環境が変わっても、2つ以上のデバイスの通信が簡単に実現できるという仕組みです。
HPを見ると、70以上のSDKに対応しているとあります。そのため、例えばPythonで書いたアプリケーションとC#で書いたアプリケーション間の通信も、PubNubを利用することで簡単に実現できます。
このようなイメージです。
双方のアプリケーションは、PubNubより発行されたPublishキー(情報を発信する)とSubscribeキー(情報を取得する)を使います。今回は、bitFlyerが一部の情報をPubNubを介して発信しています。そのため、bitFlyerが公開しているSubscribe Keyを使うことで、情報を取得できます。
2. Unityで使うための手順
2.1 GitHubよりサンプルプロジェクトを取得
以下のGitHubのHPから、Unityのサンプルプロジェクトをダウンロードします。GitHub - pubnub/unity: PubNub for Unity3D 5.x
2.2. bitflyerのTickerをUnityで表示する
Unity2017でプロジェクトを開き、ExampleSceneを開きます。PubnubExample.csを開いて、68行目に、bitFlyerのSubscribeKeyを入力します。(これで、Unity Editor起動毎にキー入力する手間が省けます)//L.68 2018/3/10時点 string subscribeKey = "sub-c-52a9ab50-291b-11e5-baaa-0619f8945a4f";
シーンを実行します。
Action → Subscribeと押していきます。
Channelに、取得したい情報を入れます。
bitFLyerの場合、2018/3/10時点では「板情報」、「板情報の差分」、「Ticker」、「約定」の情報を取得できます。
例えば、Tickerの場合、下記のようなChannel名を入れることができます。
BTC/JPY 板(現物): lightning_ticker_BTC_JPY
BTC/JPY FX 板: lightning_ticker_FX_BTC_JPY
ETH/BTC 板: lightning_ticker_ETH_BTC
Lightning Futures: lightning_board_snapshot_BTCJPY
ビットコインと日本円の板情報を取得したいときは、「lightning_ticker_BTC_JPY」をChannelに入力します。Subscribeボタンを押すと、このようにリアルタイムに情報を取得できます。今回はTickerを使いました。