Hatena::ブログ(Diary)

My Life as a Mock Quant このページをアンテナに追加 RSSフィード Twitter

2018-01-07

bitFlyer LightningのAPIをRから使う

| 17:45 | bitFlyer LightningのAPIをRから使うを含むブックマーク

"何でもRでやるおじさん日本代表(タヒチ在住)"として、いい加減書いておかねばならないと思った。

まずは、APIキーを頑張って以下から取得してください。

そして、その情報とbitFlyerURLをなんでもいいんだけど適当な変数に入れておく。

BITFLYER_KEY <- "<your key>"
BITFLYER_SECRET <- "<your secret>"
BITFLYER_URL <- "https://api.bitflyer.jp"

で、早速データを取得する。

まず、PublicのAPIの場合だが、この場合、APIキーの情報はいらない。

例えばBitcoinの板情報はこんな感じで取得+Rっぽく処理しておくといいだろう。

必要になるhttr, dplyr, purrrパッケージは適当にインストールしておいてください。

> content <- httr::content(httr::GET(paste0(BITFLYER_URL, "/v1/board")))
> dfl <- purrr::map(content[-1], ~ dplyr::bind_rows(.x))
> dfl
$bids
# A tibble: 3,387 x 2
     price   size
     <dbl>  <dbl>
 1 1974375 0.0060
 2 1974370 1.0013
 3 1974020 0.3000
 4 1974000 0.1090
 5 1973982 0.0010
 6 1973981 0.0010
 7 1973825 1.5000
 8 1973557 0.0020
 9 1973100 0.0100
10 1973010 0.2000
# ... with 3,377 more rows

$asks
# A tibble: 1,686 x 2
     price      size
     <dbl>     <dbl>
 1 1975486 0.0090000
 2 1975490 0.2390648
 3 1975491 1.4850191
 4 1976989 0.0010000
 5 1977000 1.0549186
 6 1977003 0.3000000
 7 1977781 2.0000000
 8 1978000 0.1999200
 9 1978100 0.6500000
10 1978117 1.1134800
# ... with 1,676 more rows

ちょっと面倒なのはPrivate APIで、これは公式ドキュメントに以下のようにせにゃならんと書いてある

公式サンプルがNode.jsだったので、これをRで書き直した。

以下の例だと自分の口座情報が取得できます。

digestパッケージはまた別途入れておいてください。

# APIのパス
path <- "/v1/me/getbalance"
# unix time stamp
timestamp <- as.numeric(Sys.time())
# 作れと言われてるSign
sign <- digest::hmac(paste0(timestamp, "GET", path), key=BITFLYER_SECRET, algo="sha256", serialize=FALSE)
# ヘッダーに突っ込んでおくる
header <- httr::add_headers(
  `ACCESS-KEY`=BITFLYER_KEY,
  `ACCESS-TIMESTAMP`=timestamp,
  `ACCESS-SIGN`=sign,
  `Content-Type`="application/json"
)
httr::content(httr::GET(paste0(BITFLYER_URL, path), header))

次は発注すっか。