回答編集履歴

1 ゼロ梅をsliceを使った方法に変更

umyu

umyu score 5790

2018/04/07 14:15  投稿

初めてこのAPIを使いましたが勉強になりました。
[ZAIF API 共通情報](http://techbureau-api-document.readthedocs.io/ja/latest/trade/1_common.html)
> 注意
その他のメソッド毎の固有のパラメータも全てPOSTパラメータにて送信してください。
nonceパラメータの値は実効毎に増分されていないとエラーが発生します。また増分量は少数点以下の値にも対応しております。
ポイントは`payload`で`POST`パラメータを送信する必要があるという点でしょうか。
あと`signature` も下記コードでは`urlencode`してませんが、対応する必要があるかもです。
```JavaScript
var keys = {
   'api': 'APIキー',
   'secret': 'secretキー'
};
function get_nonce(){
 return (new Date().getTime() / 1000).toFixed(0);
}
function to_byteshex(data) {
   return data.map(function(e) {
       var v = (e < 0 ? e + 256 : e).toString(16);
       return v.length == 1 ? "0" + v : v;
       return ('00' + v).slice(-2);
   }).join("");
}
function create_postHeader(keys){
 var signature = 'method=get_info&nonce=' + get_nonce();
 Logger.log(signature);
 var sign = Utilities.computeHmacSignature(Utilities.MacAlgorithm.HMAC_SHA_512, signature, keys.secret);
 return {
       'method': 'post',
       'Content-Type': 'application/x-www-form-urlencoded',
       'headers': {
         'sign': to_byteshex(sign),
         'key': keys.api
       },
   'payload': signature
 };
}
function myFunction() {
 var options = create_postHeader(keys);
 Logger.log(options);
 const endpoint = 'https://api.zaif.jp/tapi';
 var response = UrlFetchApp.fetch(endpoint, options);
 Logger.log("#############################");
 Logger.log(response);
 Logger.log("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
 Logger.log(response.getContentText());
}
```
◇余談
1,実行ログはメニューの表示→ログで表示できます。
2,動作確認済みの[公式のPytho/Swit/Go語のサンプルコードが](http://techbureau-api-document.readthedocs.io/ja/latest/trade/3_how_to_implement/index.html)ここにあるので、
npmで[json-server](https://github.com/typicode/json-server)を立てて、[Fidder](https://www.telerik.com/fiddler)でリクエストを確認してみてくださいな。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る