我正在尝试订阅 Bitfinex.com websocket API公共频道BTCUSD
。
代码如下:
from websocket import create_connection
ws = create_connection("wss://api2.bitfinex.com:3000/ws")
ws.connect("wss://api2.bitfinex.com:3000/ws")
ws.send("LTCBTC")
while True:
result = ws.recv()
print ("Received '%s'" % result)
ws.close()
我相信订阅公共频道ws.send("BTCUSD")
是什么? 我收到一条消息,我认为正在确认订阅({"event":"info","version":1}
,但之后我没有收到数据流。我错过了什么?
文档说所有消息都是JSON编码的。
消息编码
通过Bitfinex的websocket通道发送和接收的每条消息都以JSON格式编码
您需要导入json
库来编码和解码您的消息。
文档提到了三个公共频道:book
、trades
和ticker
.
如果要订阅频道,则需要发送订阅事件。
根据文档,订阅LTCBTC交易的示例:
ws.send(json.dumps({
"event":"subscribe",
"channel":"trades",
"channel":"LTCBTC"
})
然后,还需要分析传入的 JSON 编码消息。
result = ws.recv()
result = json.loads(result)
我更喜欢在打开时发送参数并添加 ssl 以防止错误
import websocket
import ssl
import json
SOCKET = 'wss://api-pub.bitfinex.com/ws/2'
params = {
"event": "subscribe",
"channel": "book",
"pair": "BTCUSD",
"prec": "P0"
}
def on_open(ws):
print('Opened Connection')
ws.send(json.dumps(params))
def on_close(ws):
print('Closed Connection')
def on_message(ws, message):
print (message)
def on_error(ws, err):
print("Got a an error: ", err)
ws = websocket.WebSocketApp(SOCKET, on_open = on_open, on_close = on_close, on_message = on_message,on_error=on_error)
ws.run_forever(sslopt={"cert_reqs": ssl.CERT_NONE})