BitFlyerのWebSocketAPIサンプル

ビットコインの会社、BitFlyerのAPIについて調べてみました。
C#のサンプルコードを見てみると、StreamJsonRpcを使うらしい・・・。
うーん、またNuGetで入れるものを増やすのか。無しでできないものかね?
と思って、他のマーケットのサンプルを見つつ、書いてみました。
Publicの、板情報を取得する部分のみです。

※以下のプログラムは後日改定版が出ています。こちら

const string endpoint = "wss://ws.lightstream.bitflyer.com/json-rpc";
const string message = "{ \"method\" : \"subscribe\" , \"params\" : { \"channel\" : \"lightning_board_FX_BTC_JPY\"} , \"id\":null }";

using var clientWebSocket = new System.Net.WebSockets.ClientWebSocket();
clientWebSocket.Options.KeepAliveInterval = TimeSpan.Zero;

await clientWebSocket.ConnectAsync(new Uri(endpoint), CancellationToken.None);

var messageBytes = Encoding.UTF8.GetBytes(message);

await clientWebSocket.SendAsync(
    new ArraySegment<byte>(messageBytes),
    System.Net.WebSockets.WebSocketMessageType.Text,
    true,
    CancellationToken.None);

while (true)
{
    if (clientWebSocket.State != System.Net.WebSockets.WebSocketState.Open) { break; }

    var incomingData = new byte[8192];
    var result = await clientWebSocket.ReceiveAsync(new ArraySegment<byte>(incomingData), CancellationToken.None);
    if (result.Count > 0)
    {
        // incomingData , result.Countを使って何かする
    }
}

しかし、WebSocketのAPIは、各マーケットでずいぶん振る舞いが違いますね。
差分を送ってくるところ、板の中央部分を丸ごと送ってくるところ。
変更の度に送ってくるところ、定期的に送ってくるところ。
何なんでしょうね。この一貫性の無さは。不思議だ。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です