Веб-сокет Python не возвращает рекомендуемые данные из coinbase pro api - PullRequest
0 голосов
/ 23 мая 2019

Я пытаюсь получить данные канала тикера через веб-сокет.Я получаю ответ с некоторыми данными, однако данные, которые я получаю, не соответствуют тому, что предполагается показать.

Я пытался делать то, что указывает API.API (https://docs.pro.coinbase.com/#the-ticker-channel) говорит об отправке запроса следующим образом:

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

Теперь это работает, и я получаю ответ, однако я получаю ответ:

{
" type ":"тикер "," 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 говорит, что вывод должен быть: {"тип ":" ticker "," trade_id ": 20153558," sequence ": 3262786978," time ":" 2017-09-02T17: 05: 49.250000Z "," product_id ":" BTC-USD "," price ":"4388.01000000", "side": "buy", // Сторона Taker "last_size": "0.03000000", "best_bid": "4388", "best_ask": "4388.01"}

Как вы можете видеть, Мне не хватает last_size и side. Я не уверен в том, что делаю неправильно.

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 и боковые теги.Любая помощь с благодарностью.

1 Ответ

0 голосов
/ 26 июня 2019

Я сам внедряю тот же код, и я также не получаю last_size и сторону, включенную в json. Мое лучшее предположение состоит в том, что отправляемый объект 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)

Вы получите KeyError, если попытаетесь получить доступ к 'last_size', если цена не изменилась. Я бы посоветовал поймать эту ошибку и игнорировать этот json, поскольку у вас есть вся информация, которая вам уже нужна из json, возвращенного ранее.

Надеюсь, это поможет прояснить вашу проблему, мой первоначальный ответ по-прежнему действителен для "стороны", так как я так и не натолкнулся на получение этой информации.

...