Websocket для пригодных для использования данных в Python — получите цену из фида веб-сокета GDAX

Я пытаюсь получить последние данные о цене, что достаточно просто, используя опрос на конечной точке /ticker, т.е.

rawticker = requests.get('https://api.gdax.com/products/BTC-EUR/ticker')
json_data = json.loads(rawticker.text)
price = json_data['price']

но API GDAX не одобряет опрос. Как я могу получить ту же информацию, используя websocket. Как я могу заставить следующий код запускаться только один раз, а затем извлекать информацию о цене.

from websocket import WebSocketApp
from json import dumps, loads
from pprint import pprint

URL = "wss://ws-feed.gdax.com"

def on_message(_, message):
    """Callback executed when a message comes.
    Positional argument:
    message -- The message itself (string)
    """
    pprint(loads(message))
    print

def on_open(socket):
    """Callback executed at socket opening.
    Keyword argument:
    socket -- The websocket itself
    """
    params = {
        "type": "subscribe",
        "channels": [{"name": "ticker", "product_ids": ["BTC-EUR"]}]
    }
    socket.send(dumps(params))

def main():
    """Main function."""
    ws = WebSocketApp(URL, on_open=on_open, on_message=on_message)
    ws.run_forever()

if __name__ == '__main__':
    main()

Спасибо за любую помощь.


person Nazeer Bhamji    schedule 27.12.2017    source источник


Ответы (1)


Вытягивание не рекомендуется, если вы хотите получать обновления в реальном времени. В этом случае рекомендуется использовать веб-сокеты. Однако в вашем случае, запуская код один раз и выходя, можно использовать конечную точку pull.

Чтобы ответить на ваш вопрос в любом случае. Первым аргументом on_message является WebSocketApp, вы можете просто добавить эту строку, чтобы закрыть ее после получения первого сообщения.

def on_message(ws, message):
    """Callback executed when a message comes.
    Positional argument:
    message -- The message itself (string)
    """
    pprint(loads(message))
    ws.close()

Совет

Библиотека запросов имеет встроенный .json(), который вы можете использовать непосредственно при возврате .get().

import requests
rawticker = requests.get('https://api.gdax.com/products/BTC-EUR/ticker').json()
price = rawticker['price']
print(price)
person Nour Wolf    schedule 27.01.2018