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' 仍然有效,因为我无论如何都没有收到该信息。
我正在尝试通过 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' 仍然有效,因为我无论如何都没有收到该信息。