Python 网络套接字没有 return 来自 coinbase pro 的建议数据 api

Python web socket doesn't return suggested data from coinbase pro api

我正在尝试通过 websocket 获取代码通道数据。我收到一些数据的响应,但是我收到的数据与它应该显示的不匹配。

我已经尝试按照 API 指定的方式进行操作。 API (https://docs.pro.coinbase.com/#the-ticker-channel) 表示发送请求如下:

参数={ "type": "subscribe", "channels": [{"name": "ticker", "product_ids": ["BTC-USD"]}] }

现在这有效了,我得到了回应,但是我得到的回应是:

{
"type":"ticker", "sequence":9568995003, "product_id":"BTC-USD", "price":"7779.00000000", "open_24h":"7895.99000000", "volume_24h":"19546.97986005", "low_24h":"7467.10000000", "high_24h":"7945.50000000", "volume_30d":"569908.80402872", "best_bid":"7775.66", "best_ask":"7778.81" }

当 api 表示输出应该是: { "type": "ticker", "trade_id": 20153558, "sequence": 3262786978, "time": "2017-09-02T17:05:49.250000Z", "product_id": "BTC-USD", "price": "4388.01000000", "side": "buy", // 吃单方 "last_size": "0.03000000", "best_bid": "4388", "best_ask": "4388.01" }

如您所见,我缺少 last_size 和侧面。我不确定我做错了什么。

from websocket import create_connection
import json

URL = "wss://ws-feed.pro.coinbase.com"

ws = create_connection(URL)

params = {
        "type": "subscribe",
        "channels": [{"name": "ticker", "product_ids": ["BTC-USD"]}]
}

def single():
    ws.send(json.dumps(params))

    result =  ws.recv()

    print(result)

single()

预期输出应包括 last_size 和侧标签。非常感谢任何帮助。

我自己一直在实现相同的代码,但我也没有在 json 中包含 last_size 和 side。我最好的猜测是正在发送的 json 对象没有检索此信息,据我所知,这意味着您将不得不在没有此信息的情况下离开。如果有人知道检索此信息的方法,请随时纠正我。

编辑:我想我已经发现了为什么 last_size 没有被包含在一些回复中的问题(尽管仍然不确定)。当 json 被打印时,价格没有变化,正如我在连续的 while 循环中 运行 时所意识到的那样。只有当交易发生时,价格才会发生变化,因此属于 'last_size' 类别。我将提供我传递的参数以及代码来说明我是如何得到这个结果的。

params = {"type": "subscribe", "product_ids": ["BTC-USD"],
"channels": ["heartbeat", {"name": "ticker", "product_ids": ["BTC-USD"]}]}

while True:
    ws.send(json.dumps(params))
    result = ws.recv()
    print(result)
    time.sleep(1)
    converted = json.loads(result)

如果您在价格未更改的情况下尝试访问 'last_size',您将收到 KeyError。我的建议是捕获此错误并忽略 json,因为您已经从之前返回的 json 中获得了所需的所有信息。

希望这有助于澄清您的问题,我的原始回复对 'side' 仍然有效,因为我无论如何都没有收到该信息。