我正在尝试通过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标签。任何帮助将不胜感激。
答案 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中已经需要的所有信息。
希望这有助于澄清您的问题,我的原始回复对于“一方”仍然有效,因为无论如何我都没有收到过该信息。