lp2 - Api Binance
lp2 - Api Binance
Lenguaje de Programación 2
Ing. Paulo González
Introducción
En el mundo actual, la capacidad de acceder y manipular datos en tiempo real es una habilidad
esencial para cualquier desarrollador. Las APIs (Interfaces de Programación de Aplicaciones) se han
convertido en la columna vertebral de la comunicación entre aplicaciones, permitiendo que los sistemas
intercambien información de manera eficiente y segura. En este documento, nos adentraremos en el
mundo de las APIs, aprendiendo cómo funcionan, cómo interactuar con ellas y cómo aprovechar su
potencial para construir aplicaciones poderosas y dinámicas.
Una de las herramientas más populares para hacer solicitudes HTTP en Python es la librería
requests. Esta librería simplifica el proceso de enviar y recibir datos, permitiéndote concentrarte en la
lógica de tu aplicación en lugar de los detalles técnicos de la comunicación web. A lo largo de este
documento, aprenderás a usar requests para hacer llamadas a APIs, manejar respuestas y trabajar con
datos en formatos como JSON.
Como parte de nuestro enfoque práctico, nos conectaremos a la API de Binance, una de las
plataformas de intercambio de criptomonedas más grandes del mundo. A través de ejemplos y
ejercicios, aprenderás a obtener información en tiempo real sobre precios, libros de órdenes y datos
históricos de trading. Estos conocimientos no solo te permitirán entender cómo funcionan las APIs en
un contexto real, sino que también te prepararán para desarrollar tus propias aplicaciones que
consuman datos externos.
HTTP utiliza varios métodos para indicar el tipo de acción que se desea realizar. Los más
comunes son GET, que solicita datos de un recurso específico, y POST, que envía datos para crear o
actualizar un recurso. Otros métodos incluyen PUT (para actualizar recursos), DELETE (para eliminar
recursos) y PATCH (para modificar parcialmente un recurso). Cada método tiene un propósito
específico y se utiliza en diferentes contextos.
Aunque HTTP es un protocolo poderoso y versátil, tiene sus limitaciones. Por ejemplo, es un
protocolo sin estado (stateless), lo que significa que no guarda información sobre solicitudes previas.
Para manejar sesiones y mantener el estado, se utilizan técnicas como las cookies. Además, HTTP no
es seguro por sí mismo, por lo que se desarrolló HTTPS (HTTP Secure), que añade una capa de cifrado
mediante SSL/TLS para proteger la privacidad y la integridad de los datos.
En el contexto de la web, las APIs suelen utilizar HTTP como protocolo de comunicación. Estas
APIs, conocidas como APIs web o APIs REST, permiten a los desarrolladores acceder a datos y
funcionalidades de servidores externos mediante solicitudes HTTP. Por ejemplo, una API puede
proporcionar información meteorológica, datos financieros o incluso permitir el envío de mensajes a
través de una plataforma de redes sociales.
Las APIs están diseñadas para ser intuitivas y fáciles de usar. Por lo general, siguen un formato
estándar, como JSON (JavaScript Object Notation) o XML (eXtensible Markup Language), para
estructurar los datos que se envían y reciben. Esto permite que los desarrolladores integren
rápidamente servicios externos en sus aplicaciones sin necesidad de entender los detalles internos del
servidor.
Un ejemplo común de uso de APIs es el de las redes sociales. Plataformas como Twitter,
Facebook o Instagram ofrecen APIs que permiten a los desarrolladores acceder a datos públicos, como
publicaciones o perfiles de usuarios, y utilizarlos en sus propias aplicaciones. Esto no solo amplía las
capacidades de las aplicaciones, sino que también fomenta la innovación al permitir que los
desarrolladores creen nuevas funcionalidades basadas en servicios existentes. Ejemplos de APIs
públicas:
La librería requests
La librería requests es una de las herramientas más populares en Python para realizar solicitudes
HTTP. Su simplicidad y potencia la convierten en la opción preferida de los desarrolladores para
interactuar con APIs web, descargar contenido de Internet o enviar datos a servidores. Con requests,
puedes realizar operaciones comunes como solicitudes GET, POST, PUT y DELETE con solo unas pocas
líneas de código, lo que facilita enormemente el trabajo con servicios web.
Una de las principales ventajas de requests es su facilidad de uso. A diferencia de las bibliotecas
estándar de Python, como urllib, requests ofrece una sintaxis más intuitiva y funciones de alto nivel que
simplifican tareas como manejar parámetros de consulta, autenticación y manejo de errores. Por
ejemplo, para hacer una solicitud GET a una API, solo necesitas una línea de código: requests.get(url).
Además, requests maneja automáticamente la codificación de datos y la serialización de JSON, lo que
ahorra tiempo y esfuerzo.
Para utilizar requests, primero debes instalarla. Dado que es una librería externa, no viene incluida
en la instalación estándar de Python. Sin embargo, su instalación es sencilla gracias al gestor de
paquetes pip. Lo recomendable es instalarla dentro de un entorno virtual.
Instalación de requests
Al igual que otras librerías de terceros en Python, requests se instala usando pip, preferiblemente
dentro de un entorno virtual: pip install requests
requests.get(url, params={}, headers={}): Para solicitar datos de un recurso. Es el más común para APIs
públicas, donde:
requests.post(url, data={}, json={}, headers={}): Para enviar datos y crear un nuevo recurso.
response.status_code: El código de estado HTTP (ej., 200 OK, 404 Not Found, 500 Internal Server
Error).
response.text: El contenido de la respuesta como una cadena de texto (útil para HTML, XML).
API de Binance
Binance es una de las plataformas de intercambio de criptomonedas más grandes y populares
del mundo. Ofrecen una API que permite a los desarrolladores interactuar programáticamente con su
plataforma.
● API Pública (REST API - Endpoints de mercado): Estos endpoints no requieren autenticación y
permiten obtener datos de mercado en tiempo real, como precios, volúmenes de trading, libros de
órdenes, etc. Son ideales para análisis de datos, bots de monitoreo y herramientas de
visualización.
● API Privada (REST API - Endpoints de usuario/trading): Estos requieren autenticación (claves
API y firmas HMAC) y permiten realizar operaciones como consultar balances de cuenta, colocar
órdenes de compra/venta, ver el historial de transacciones, etc. Este documento se centrará
únicamente en la API Pública para mantener la simplicidad y la seguridad.
La URL base para los endpoints públicos de la API de Binance Spot es:
https://api.binance.com/api/v3/
Ejemplos prácticos
Teniendo nuestro entorno virtual y la librería requests instalada, es hora de escribir algunos
ejemplos, sin embargo es importante aclarar un detalle antes de realizar cualquier programa que
consuma datos de Apis de terceros: es muy importante documentarse y conocer cómo realizar las
llamadas y qué parámetros deben enviarse a la Api para que pueda funcionar correctamente, pues
cada una de ellas es una aplicación distinta, creada por un grupo de desarrollo distinto.
Vamos a obtener el precio actual de Bitcoin (BTC) en dólares estadounidenses (USDT) usando el
endpoint /api/v3/ticker/price.
import requests
url = "https://api.binance.com/api/v3/ticker/price"
params = {"symbol": "BTCUSDT"} # Par de trading: BTC/USDT
if response.status_code == 200:
data = response.json()
print(f"Precio de BTC/USDT: {data['price']}")
else:
print(f"Error: {response.status_code}")
El programa anterior permite obtener el precio actual de Bitcoin (BTC) frente al Tether (USDT)
directamente desde la API pública de Binance.
En resumen, el programa:
● Define la URL del endpoint de la API de Binance para obtener precios de tickers.
● Especifica el par de criptomonedas ("BTCUSDT") como parámetro de la solicitud.
● Realiza una solicitud HTTP GET a la API de Binance.
● Verifica si la solicitud fue exitosa (código de estado 200).
● Si es exitosa, parsea la respuesta JSON para extraer el precio de BTC/USDT.
● Finalmente, imprime el precio de BTC/USDT en la consola.
● En caso de que la solicitud no sea exitosa, imprime el código de error HTTP recibido.
Vamos a obtener información sobre el libro de órdenes (order book) para un par de trading
usando el endpoint /api/v3/depth.
url = "https://api.binance.com/api/v3/depth"
params = {
"symbol": "BTCUSDT", # Par de trading: BTC/USDT
"limit": 5 # Número de órdenes a mostrar
}
if response.status_code == 200:
data = response.json()
print("Órdenes de compra (Bids):")
for bid in data['bids']:
print(f"Precio: {bid[0]}, Cantidad: {bid[1]}")
print("\nÓrdenes de venta (Asks):")
for ask in data['asks']:
print(f"Precio: {ask[0]}, Cantidad: {ask[1]}")
else:
print(f"Error: {response.status_code}")
Ejemplo 3: Obtener datos de velas (Klines) (GET)
Las velas (Klines) son útiles para análisis técnico. Vamos a obtener datos de velas para el par
BTC/USDT usando el endpoint /api/v3/klines.
url = "https://api.binance.com/api/v3/klines"
params = {
"symbol": "BTCUSDT", # Par de trading: BTC/USDT
"interval": "1h", # Intervalo de tiempo: 1 hora
"limit": 5 # Número de velas a mostrar
}
if response.status_code == 200:
data = response.json()
for candle in data:
print(f"Fecha: {candle[0]}, Precio de apertura: {candle[1]}, Precio de cierre:
{candle[4]}")
else:
print(f"Error: {response.status_code}")
Ejercicios prácticos
Ejercicio 1: Obtener el precio de ETH/USDT
Modifica el primer ejemplo para obtener el precio de Ethereum (ETH) en lugar de Bitcoin (BTC).