En esta segundo articulo del blog, vamos a crear un WebSocket que conecte con la API de Binance.
Seguramente tú ya lo sabes, pero en el momento de realizar este ejercicio no tenia claro lo que era un WebSocket, así que si tú ya lo sabes, puedes saltarte este apartado.
Qué es un WebSocket?
Un WebSockets es una sesión de comunicación interactiva entre el navegador del usuario y un servidor. Usando esta sesión con la API de Binance, puedo enviar mensajes a un servidor y recibir respuestas controladas por eventos.
Antes de empezar
# Importar libreriasimport binancefrom binance.client import Client# Cargar claves de variables de OS y crear objeto Clienteimport osapi_key = os.environ.get('binance_api')api_secret = os.environ.get('binance_secret')client = Client(api_key, api_secret)# si quieres usar la API de TESTNET en vez de la del entorno realclient.API_URL = 'https://testnet.binance.vision/api'
En la última línea se usa para acceder a la API de Testnet de Binance en vez de la del entorno real.
Crear un WebSocket para obtener el último precio
El websocket de Binance permite que solo con enviar un comando se cree un canal que reciba el último precio de un token.
Primero vamos a necesitar importar la clase ThreadedSocketManager y la función sleep del modulo de time .
from time import sleep
from binance import ThreadedWebsocketManager
El siguiente paso es crear un diccionario que alojara los datos del último precio e indicará si existe algun problema con el websocket.
btc_price = {'error':False}
def btc_trade_history(msg): ''' define how to process incoming WebSocket messages ''' if msg['e'] != 'error': print(msg['c']) btc_price['last'] = msg['c'] btc_price['bid'] = msg['b'] btc_price['last'] = msg['a'] btc_price['error'] = False else: btc_price['error'] = True
Estamos almacenando algunos elementos en el diccionario para poder acceder a los datos fuera de la funcion btc_trade_history y esta es la manera en que accederermos a los datos del websocket.
El último paso es crear una función que le indique al socket que hacer cuando reciba la información, para este primer ejemplo tan solo imprimeros el último precio de Bitcoin en pantalla.
bsm = ThreadedWebsocketManager() bsm.start() bsm.start_symbol_ticker_socket(callback=btc_trade_history, symbol='BTCUSDT')
Estamos llamando a la función start_symbol_ticker que tiene una salida similar a la función get_symbol_ticker que vimos en la entrada anterior , pero esta vez recibiremos un flujo de datos del último precio del ticker que hemos escogido (BTCUSDT).
Para parar el canal tienes que usar la función stop().
bsm.stop()
Si quieres escoger otro ticker tan solo tienes que cambiar el parametro symbol . Por ejemplo, si quieres ver el precio de Ethereum en Dolares $ :
bsm.start_symbol_ticker_socket(callback=btc_trade_history, symbol='ETHUSDT')
El WebSocket puede proporcionar multiples datos, si quieres ver el detalle de las opciones y parametros disponibles puedes verlos usando el comando help() o bien consultar la documentación.
help(ThreadedWebsocketManager)
Y si has seguido leyendo hasta aquí, muchas gracias!
Links:
http://acodigo.blogspot.com/2021/01/python-binance-api.html
https://algotrading101.com/learn/binance-python-api-guide/
https://python-binance.readthedocs.io/en/latest/websockets.html
No hay comentarios:
Publicar un comentario