Python Web套接字不会从Coinbase Pro API返回建议的数据

时间:2019-05-23 17:59:00

标签: python websocket coinbase-api

我正在尝试通过websocket获取股票行情通道数据。我得到一些数据的响应,但是我得到的数据与预期显示的数据不匹配。

我尝试做API指定的操作。 API(https://docs.pro.coinbase.com/#the-ticker-channel)表示要发送请求,如下所示:

params = {         “ type”:“订阅”,         “渠道”:[{“名称”:“ ticker”,“ product_ids”:[“ BTC-USD”]}] }

现在这有效,我得到了答复,但是我得到的答复是:

{
   “ type”:“ ticker”,    “序列”:9568995003,    “ product_id”:“ BTC-USD”,    “价格”:“ 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,     “序列”:3262786978,     “ time”:“ 2017-09-02T17:05:49.250000Z”,     “ product_id”:“ BTC-USD”,     “ price”:“ 4388.01000000”,     “ side”:“购买”,//接受方     “ 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和side标签。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

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

编辑:我认为我已经发现了为什么last_size没有包含在某些响应中的问题(尽管仍然不确定)。正如我在连续的while循环中运行时所意识到的那样,当打印json时,价格没有变化。仅当发生交易时,价格才会发生变化,因此会出现“ 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中已经需要的所有信息。

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