代码之家  ›  专栏  ›  技术社区  ›  swifty

订阅bitFlyer WebSocket

  •  -2
  • swifty  · 技术社区  · 6 年前

    我已经建立了到多个加密货币交易所的websocket连接,但我很难连接到bitFlyer。

    我的代码如下:

    import websocket
    import json
    
    def on_message(ws, message):
        msg = json.loads(message)
        print(msg)
    
    def on_error(ws, error):
        print(error)
    
    def on_close(ws):
        print("### closed ###")
    
    def on_open(ws):
        ws.send(json.dumps({"method":"subscribe", "channel":"lightning_executions_FX_BTC_JPY"}))
    
    while True:   
        if __name__ == "__main__":
            #websocket.enableTrace(True)
            ws = websocket.WebSocketApp("wss://ws.lightstream.bitflyer.com/json-rpc",
                                        on_message=on_message,
                                        on_error=on_error,
                                        on_close=on_close)
            ws.on_open = on_open
            ws.run_forever()
    

    我尝试了许多on\u open()消息的变体,大多数结果都是 ### closed ### Invalid close opcode. 错误

    遗憾的是,他们的文档中不包含位于 HERE

    非常感谢您在发送正确信息方面提供的任何帮助。

    1 回复  |  直到 6 年前
        1
  •  3
  •   Nathan    6 年前

    我认为您发送的消息格式错误,请检查以下参考 https://lightning.bitflyer.jp/docs/playgroundrealtime ,我想它会解决的。

    # pip install websocket-client
    import websocket
    import json
    CHANNEL = "lightning_board_snapshot_<productCode>"
    
    def on_message(ws, message):
        message = json.loads(message)
        if message["method"] == "channelMessage":
            print("{} {}".format(message["params"]["channel"], message["params"]["message"]))
    
    def on_open(ws):
        ws.send(json.dumps({"method": "subscribe", "params": {"channel": CHANNEL}}))
    
    if __name__ == "__main__":
        // note: reconnection handling needed.
        ws = websocket.WebSocketApp("wss://ws.lightstream.bitflyer.com/json-rpc",
                                  on_message = on_message, on_open = on_open)
        ws.run_forever()