UnityからOANDA APIを叩いて為替レートを取得する

伊勢志摩サミット,6月FOMC,Brexitの行方,ゴールドの買い時, 色々気になる今日この頃ですね。

そんなこんなでシストレで有名な[OANDAが公開している為替トレーディング用API](http://developer.oanda.com/docs/jp/)を、学習がてらUnityから叩いてみました。

## 追記: デモ口座の利用期限30日間になりました

[【重要】デモ口座の利用期限およびオーダーブックインジケーター、APIの利用条件変更について](https://www.oanda.jp/info/755)

## 準備

### OANDA APIを叩けるようにする

OANDAでデモ口座(無料)を作成してトークンを発行すればSandbox環境を叩けるようになります。Sandboxだけの利用でしたら特に入金等は必要ないみたいです。

**手順**

http://www.oanda.jp/api/ にアクセスしてデモ口座を開設

↓

https://www.oanda.jp/trade/practice/login.do?success にアクセスしてログイン

↓

`APIアクセスの管理` から personal access token を発行

↓

[APIの動作確認ツール](http://developer.oanda.com/rest-live/console/)で疎通の確認を行なう

一番わかりやすいので `/accounts` を選択

![](https://cloud.githubusercontent.com/assets/518782/15449113/820b9e68-1faf-11e6-89aa-7819fb251ae8.png)

リクエストヘッダーに `personal access token` を設定して叩く

![](https://cloud.githubusercontent.com/assets/518782/15449119/9b9acb1a-1faf-11e6-821d-14f1578db239.png)

これで200が返ってくれば開通済みです。

※詳しくは http://www.oanda.jp/api/ ページ下部に記載されている「お手続きの流れ」を確認

### Unity側準備

今回は叩けるかどうかを確認したいだけなので、シーン上に空のGameObjectを生成し実装対象のスクリプトをアタッチしておきます。

それと、Jsonのパース用に[SimpleJSON](http://wiki.unity3d.com/index.php/SimpleJSON)をダウンロードしてpackageも追加しておきます。

## APIを叩いてみる

ユーロポンド,ドル円,豪ドルドルの現在レートを取得しようと思います。以下のエンドポイントを指定してGETで叩きます。

`https://api-fxpractice.oanda.com/v1/prices?instruments=EUR_GBP%2CUSD_JPY%2CAUD_USD`

成功すれば以下のようなレスポンスが返ってきます。

```json

{
  "prices": [
    {
      "instrument": "EUR_GBP",
      "time": "2016-05-20T20:59:58.466984Z",
      "bid": 0.77345,
      "ask": 0.77445,
      "status": "halted"
    },
    {
      "instrument": "USD_JPY",
      "time": "2016-05-20T20:59:58.466604Z",
      "bid": 110.065,
      "ask": 110.165,
      "status": "halted"
    },
    {
      "instrument": "AUD_USD",
      "time": "2016-05-20T20:59:58.464942Z",
      "bid": 0.72203,
      "ask": 0.72242,
      "status": "halted"
    }
  ]
}
```

実装していきます。

UnityWebRequestで指定のエンドポイントを叩き、リクエストヘッダーにアクセストークンを追加するだけの簡単なスクリプトです。

※コード内のトークンは適宜変更

```csharp

using UnityEngine;
using System.Collections;
using UnityEngine.Networking;
using UnityEngine.Experimental.Networking;
using System.Text;
using SimpleJSON;

public class OANDAClient : MonoBehaviour {

	private JSONNode jsonData;
	private string accessToken = "insert personal access token";

	void Start () {
		StartCoroutine(Fetch());
	}

	void Update () {

	}

	public IEnumerator Fetch() {
		// ユーロポンド,ドル円,豪ドルドル を取得
		string url = "https://api-fxpractice.oanda.com/v1/prices?instruments=EUR_GBP%2CUSD_JPY%2CAUD_USD";

		using (UnityWebRequest request = UnityWebRequest.Get (url)) {

			request.SetRequestHeader("Authorization","Bearer " + accessToken);

			yield return request.Send ();

			string jsonText = request.downloadHandler.text;

			if (request.responseCode == 200) {
				jsonData = JSONNode.Parse(jsonText);
				// 銘柄名
				string instrument = (string)jsonData["prices"][0]["instrument"];
				// bid
				string bid = (string)jsonData["prices"][0]["bid"];

				Debug.Log ("Success");
			} else {
				Debug.Log ("Error");
			}

		};
	}
}

```

デバッガで取得が確認できました。

![](https://cloud.githubusercontent.com/assets/518782/15449329/88a8795c-1fb5-11e6-95ad-e6369599b0b7.png)

## まとめ

OANDA APIは [Jiji というオープンソースのシストレフレームワーク](https://github.com/unageanu/jiji2)で使われていたり、日本語ドキュメント等もあったり色々面白そうです。

目指すは[Cityが発表したHoloLensのアプリ](http://8ninths.com/case-study/citi-holographic-workstation/)のような為替トレード用アプリを作って役立てていければなと思います。

![](https://cloud.githubusercontent.com/assets/518782/15449357/6eb30d4a-1fb6-11e6-97bf-c1718dab6a19.png)