稼ぐ電子工作

趣味の電子工作をするために電子工作で稼ぐブログ。

ラズパイで仮想通貨取引 APIの使用 取得編

bitbank の API の使い方は https://github.com/bitbankinc/bitbank-api-docs にまとめられています。 親切に日本語・英語,両方のドキュメントがあります。

注文発注や資産確認に用いる rest-api の方は使用例付きで書かれているので, 使用例をコピペして実行するだけなのですが, 価格情報を取得したりする public-api は使用例はないようです。 エンドポイント URL にパラメータをつけて GET するだけなので簡単に試せます。

ティッカー情報の取得はあとの取引ロジックで何度も使うので, シェルスクリプトの関数として定義しておきます。

エンドポイント URL の定義

エンドポイント URL は何度も用いるので変数に入れておきます。

api_pub_url="https://public.bitbank.cc"

public-api アクセス関数

ドキュメントに示されたパラメータを path として与えると, 情報を取得する関数です。

api_pub_req() {
  local path="$1"
  [ "${path}" != "" ] || return 1
  curl -m 10 -s ${api_pub_url}${path}
}

通貨ペアの検証

パラメータとして渡す通貨ペアが正しいか検証する関数です。 誤った通貨ペアを与えたときにプログラムが誤動作しないように, 誤った通貨ペアを弾きます。

exist_pair() {
  local pair="$1"
  case $pair in
    btc_jpy)
      return 0;;
    xrp_jpy)
      return 0;;
    xrp_btc)
      return 0;;
    ltc_jpy)
      return 0;;
    ltc_btc)
      return 0;;
    eth_jpy)
      return 0;;
    eth_btc)
      return 0;;
    mona_jpy)
      return 0;;
    mona_btc)
      return 0;;
    bcc_jpy)
      return 0;;
    bcc_btc)
      return 0;;
    xlm_jpy)
      return 0;;
    xlm_btc)
      return 0;;
    qtum_jpy|qtum_btc|bat_jpy|bat_btc)
      return 0;;
    *)
      echo "Invalid pair." >&2
      return 1;;
  esac
}

ティッカー情報の取得

public-api の一例として,ティッカー情報を取得してみます。 引数に通過ペアを指定すると,ティッカー情報を取得できます。 存在しない通貨ペアを指定すると何もせずに終了します。

api_getTicker() {
  local pair="$1"
  exist_pair ${pair} || return 1
  api_pub_req "/${pair}/ticker"
}

取得したティッカー情報の分解

ティッカー情報を含め,API からの応答は JSON で返ってくるので, JSON 文字列を分解してほしい情報を取り出します。 jq というコマンドを用いると,JSON から目的の値を取り出せます。 しかもシェルスクリプトで使いやすいようにスペース区切りで出力してくれます。

取得したティッカー情報から 以下をスペース区切りで取得します。

  • 現在の買い注文最高値 .buy
  • 最新取引価格 .last
  • 現在の売り注文の最安値 .sell

今回取得するデータは数値なのですが, 文字列として認識され,余計な ' がついた状態で出力されます。 sed コマンドで ' を取り除いて出力します。

jq -r ".data | [.buy,.last,.sell]|@sh" | sed "s/'//g") | sed "s/'//g"

一連の動作

ビットコインのティッカー情報を取得し,次の処理にわたすため, スペース区切りにする一連の流れです。

pair="btc_jpy"
ret=$(api_getTicker ${pair} |\
    jq -r ".data | [.buy,.last,.sell]|@sh" | sed "s/'//g")
if [ "${ret}" = "" ]; then
    ret="ERROR ERROR ERROR"
fi

API からエラーが返ってきた場合,価格情報は取得できず, 空文字列になります。 この場合,あとの処理が誤動作しないように ERROR を返して判別できるようにしました。

次回は API を用いて注文発注します。 pkeisrebpys.hatenablog.com

前回 pkeisrebpys.hatenablog.com

概要 pkeisrebpys.hatenablog.com