我正在尝试使用最近的价格数据,这可以通过在/ ticker端点上进行轮询来实现,即

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


但是GDAX API会阻止轮询。我如何使用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()


谢谢你的帮助。

最佳答案

当您要进行实时更新时,不建议拉取。在这种情况下,建议使用Web套接字。但是,就您而言,只运行一次代码然后退出,则可以使用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)

关于python - Websocket到Python中的可用数据-从GDAX Websocket提要中获取价格,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47999982/

10-15 23:39