如何连接到用户数据流币安?
How to connect to User Data Stream Binance?
我需要收听用户数据流,只要有订单事件 - 订单执行、取消等 - 我希望能够收听这些事件并创建通知。
所以我得到了我的“listenKey”,我不确定它是否以正确的方式完成,但我执行了这段代码,它给了我类似 listenKey 的东西。
获取listenKey的代码:
def get_listen_key_by_REST(binance_api_key):
url = 'https://api.binance.com/api/v1/userDataStream'
response = requests.post(url, headers={'X-MBX-APIKEY': binance_api_key})
json = response.json()
return json['listenKey']
print(get_listen_key_by_REST(API_KEY))
以及监听用户数据流的代码 - 这不起作用,我没有得到 json 响应。
socket = f"wss://fstream-auth.binance.com/ws/btcusdt@markPrice?listenKey=<listenKeyhere>"
def on_message(ws, message):
json_message = json.loads(message)
print(json_message)
def on_close(ws):
print(f"Connection Closed")
# restart()
def on_error(ws, error):
print(f"Error")
print(error)
ws = websocket.WebSocketApp(socket, on_message=on_message, on_close=on_close, on_error=on_error)
我已经阅读文档无济于事。如果有人能指出正确的方向,我将不胜感激。
我只是自己解决了这个问题,并且能够让我的工作正常进行,所以我会尽力为您提供指导。我相信您在创建 WebSocket 对象后只是缺少这行代码:
ws.run_forever()
它可能无法正常工作的其他一些原因;如果您想检测期货账户上的订单,则需要使用期货端点。我认为您使用的是现货交易(不确定)。
url = 'https://fapi.binance.com'
以防万一您不清楚。您必须更换:
<listenkeyhere>
在套接字 url 中使用您的侦听键、尖括号和所有内容。
您可以从文档 here 创建一个基本的异步用户套接字连接以及 Binance API 的其他有用信息。这是一个简单的例子:
import asyncio
from binance import AsyncClient, BinanceSocketManager
async def main():
client = await AsyncClient.create(api_key, api_secret, tld='us')
bm = BinanceSocketManager(client)
# start any sockets here, i.e a trade socket
ts = bm.user_socket()
# then start receiving messages
async with ts as tscm:
while True:
res = await tscm.recv()
print(res)
await client.close_connection()
if __name__ == "__main__":
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
我需要收听用户数据流,只要有订单事件 - 订单执行、取消等 - 我希望能够收听这些事件并创建通知。
所以我得到了我的“listenKey”,我不确定它是否以正确的方式完成,但我执行了这段代码,它给了我类似 listenKey 的东西。
获取listenKey的代码:
def get_listen_key_by_REST(binance_api_key):
url = 'https://api.binance.com/api/v1/userDataStream'
response = requests.post(url, headers={'X-MBX-APIKEY': binance_api_key})
json = response.json()
return json['listenKey']
print(get_listen_key_by_REST(API_KEY))
以及监听用户数据流的代码 - 这不起作用,我没有得到 json 响应。
socket = f"wss://fstream-auth.binance.com/ws/btcusdt@markPrice?listenKey=<listenKeyhere>"
def on_message(ws, message):
json_message = json.loads(message)
print(json_message)
def on_close(ws):
print(f"Connection Closed")
# restart()
def on_error(ws, error):
print(f"Error")
print(error)
ws = websocket.WebSocketApp(socket, on_message=on_message, on_close=on_close, on_error=on_error)
我已经阅读文档无济于事。如果有人能指出正确的方向,我将不胜感激。
我只是自己解决了这个问题,并且能够让我的工作正常进行,所以我会尽力为您提供指导。我相信您在创建 WebSocket 对象后只是缺少这行代码:
ws.run_forever()
它可能无法正常工作的其他一些原因;如果您想检测期货账户上的订单,则需要使用期货端点。我认为您使用的是现货交易(不确定)。
url = 'https://fapi.binance.com'
以防万一您不清楚。您必须更换:
<listenkeyhere>
在套接字 url 中使用您的侦听键、尖括号和所有内容。
您可以从文档 here 创建一个基本的异步用户套接字连接以及 Binance API 的其他有用信息。这是一个简单的例子:
import asyncio
from binance import AsyncClient, BinanceSocketManager
async def main():
client = await AsyncClient.create(api_key, api_secret, tld='us')
bm = BinanceSocketManager(client)
# start any sockets here, i.e a trade socket
ts = bm.user_socket()
# then start receiving messages
async with ts as tscm:
while True:
res = await tscm.recv()
print(res)
await client.close_connection()
if __name__ == "__main__":
loop = asyncio.get_event_loop()
loop.run_until_complete(main())