Skip to content

Instantly share code, notes, and snippets.

@tanaikech
Created January 15, 2018 00:54
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save tanaikech/77481c2621dc7429449194c0f1dbd58c to your computer and use it in GitHub Desktop.
Save tanaikech/77481c2621dc7429449194c0f1dbd58c to your computer and use it in GitHub Desktop.
Zaif API for Google Apps Script

Zaif API for Google Apps Script

This sample script is for using Zaif API by Google Apps Script.

The following go script is a sample at Zaif API.

package main

import (
    "fmt"
    "time"
    "strconv"
    "crypto/hmac"
    "crypto/sha512"
    "io/ioutil"
    "net/http"
    "encoding/hex"
    "net/url"
    "strings"
)

var key = "<your_key>"
var secret = "<your_secret>"

func main() {

    uri := "https://api.zaif.jp/tapi"
    values := url.Values{}
    values.Add("method", "get_info")
    values.Add("nonce", strconv.FormatInt(time.Now().Unix(), 10))

    encodedParams := values.Encode()
    req, _ := http.NewRequest("POST", uri, strings.NewReader(encodedParams))

    hash := hmac.New(sha512.New, []byte(secret))
    hash.Write([]byte(encodedParams))
    signature := hex.EncodeToString(hash.Sum(nil))

    req.Header.Add("Key", key)
    req.Header.Add("Sign", signature)
    client := new(http.Client)
    resp, _ := client.Do(req)
    defer resp.Body.Close()

    byteArray, _ := ioutil.ReadAll(resp.Body)
    fmt.Println(string(byteArray))
}

When this is converted to GAS, the script is as follows.

function main(){
  var key = "### your key ###";
  var secret = "### your secret ###";

  var nonce = (new Date().getTime() / 1000).toFixed(0);
  var params = "method=get_info&nonce=" + nonce;
  var sign = Utilities.computeHmacSignature(Utilities.MacAlgorithm.HMAC_SHA_512, params, secret);
  sign = sign.map(function(e) {return ("0" + (e & 0xFF).toString(16)).slice(-2)}).join("");
  var options = {
    method: "post",
    headers: {
      "key": key,
      "sign": sign
    },
    muteHttpExceptions: true
  };
  var res = UrlFetchApp.fetch("https://api.zaif.jp/tapi", options);
  Logger.log(res.getContentText())
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment