0% encontró este documento útil (0 votos)
8 vistas7 páginas

lp2 - Api Binance

El documento proporciona una introducción al consumo de datos desde APIs, centrándose en el uso del protocolo HTTP y la librería requests en Python. Se explora cómo interactuar con la API de Binance para obtener información en tiempo real sobre criptomonedas, incluyendo ejemplos prácticos de solicitudes GET. Además, se presentan ejercicios para aplicar los conocimientos adquiridos en la manipulación de datos de APIs.

Cargado por

linares
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
8 vistas7 páginas

lp2 - Api Binance

El documento proporciona una introducción al consumo de datos desde APIs, centrándose en el uso del protocolo HTTP y la librería requests en Python. Se explora cómo interactuar con la API de Binance para obtener información en tiempo real sobre criptomonedas, incluyendo ejemplos prácticos de solicitudes GET. Además, se presentan ejercicios para aplicar los conocimientos adquiridos en la manipulación de datos de APIs.

Cargado por

linares
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 7

IUTEPAL

Lenguaje de Programación 2
Ing. Paulo González

Consumo de datos desde una API

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.

El protocolo HTTP (Hypertext Transfer Protocol) es la base de la comunicación en la web. A


través de él, los clientes (como navegadores o aplicaciones) pueden solicitar y recibir datos de
servidores. En este documento, exploraremos los fundamentos de HTTP, los métodos más comunes
(como GET y POST), y cómo utilizarlos para interactuar con APIs públicas. Esto sentará las bases para
que puedas comprender y trabajar con cualquier API que encuentres en el futuro.

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.

Finalmente, culminaremos un proyecto práctico: la construcción de un monitor de precios en


tiempo real. Esta aplicación te permitirá consolidar todo lo aprendido, desde la configuración de un
entorno virtual hasta la implementación de solicitudes HTTP y el manejo de datos en tiempo real. Al
finalizar, no solo habrás adquirido habilidades técnicas valiosas, sino que también tendrás una
aplicación funcional que podrás expandir y personalizar según tus intereses. ¡Comencemos!
¿Qué es HTTP?
HTTP (Hypertext Transfer Protocol) es el protocolo fundamental que permite la comunicación en
la World Wide Web. Desarrollado a principios de los años 90, HTTP define cómo los clientes (como
navegadores web o aplicaciones) y los servidores intercambian información. Este protocolo es la base
sobre la cual se construyen la mayoría de las interacciones en Internet, desde cargar una página web
hasta enviar datos a un servidor.

El funcionamiento de HTTP se basa en un modelo de solicitud-respuesta. Un cliente envía una


solicitud (request) a un servidor, y este responde con los datos solicitados o un mensaje de error. Por
ejemplo, cuando escribes una URL en tu navegador, este envía una solicitud HTTP al servidor que aloja
la página, y el servidor responde con el contenido HTML que tu navegador renderiza.

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.

¿Qué es una API?


Una API (Application Programming Interface) es un conjunto de reglas y protocolos que permite
que diferentes aplicaciones se comuniquen entre sí. En esencia, una API actúa como un intermediario
que facilita la interacción entre un cliente (como una aplicación móvil o un sitio web) y un servidor (que
aloja los datos o la funcionalidad). Las APIs son fundamentales en el desarrollo moderno de software,
ya que permiten la integración de servicios y datos de manera eficiente.

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:

1.​ OpenWeatherMap: Datos meteorológicos.


2.​ GitHub API: Acceso a repositorios y datos de GitHub.
3.​ JSONPlaceholder: API de prueba para practicar.

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

Operaciones Básicas con requests


Los métodos más comunes de requests corresponden a los verbos HTTP:

requests.get(url, params={}, headers={}): Para solicitar datos de un recurso. Es el más común para APIs
públicas, donde:

●​ url: La dirección del recurso.


●​ params: Un diccionario de parámetros que se añaden a la URL como
?key=value&key2=value2.
●​ headers: Un diccionario de encabezados HTTP.

requests.post(url, data={}, json={}, headers={}): Para enviar datos y crear un nuevo recurso.

●​ data: Un diccionario o cadena para enviar datos de formulario.


●​ json: Un diccionario que se serializa automáticamente a JSON y se envía como cuerpo de
la solicitud.
●​ requests.put(url, ...): Para actualizar completamente un recurso existente.
●​ requests.delete(url, ...): Para eliminar un recurso.

El método requests devuelve un objeto Response que contiene toda la información de la


respuesta del servidor:

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).

response.json(): Si la respuesta es JSON, este método la parsea y devuelve un diccionario o lista


de Python. Si la respuesta no es JSON válido, levantará un json.JSONDecodeError.

response.headers: Un diccionario de los encabezados de la respuesta.

response.raise_for_status(): Un método conveniente que lanza una excepción HTTPError si el


código de estado de la respuesta indica un error (ej., 4xx o 5xx). Es muy útil para el manejo de errores.

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.

La API de Binance se divide generalmente en:

●​ 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.

Documentación de la API de Binance


Siempre hay que referirse a la documentación oficial de Binance para el uso de la API, ya que los
endpoints y sus respuestas pueden cambiar. Puedes encontrarla en Binance Spot API Documentation:
https://binance-docs.github.io/apidocs/spot/en/ .

Endpoints Públicos Comunes de Binance Spot API:

La URL base para los endpoints públicos de la API de Binance Spot es:
https://api.binance.com/api/v3/

Algunos endpoints públicos muy útiles son:

●​ /api/v3/ping: Prueba de conectividad al API. Devuelve un {} vacío si la conexión es exitosa.


●​ /api/v3/time: Obtiene la hora actual del servidor. Útil para verificar la sincronización de la
hora.
●​ /api/v3/exchangeInfo: Obtiene información de las reglas de intercambio, límites de tasas y
símbolos de trading disponibles.
●​ /api/v3/ticker/price: Obtiene el precio más reciente de un símbolo específico (ej.,
BTCUSDT). Requiere el parámetro symbol.
●​ /api/v3/depth: Obtiene el libro de órdenes (depth) de un símbolo. Requiere el parámetro
symbol.
●​ /api/v3/klines: Obtiene datos históricos de velas (candlesticks) para análisis técnico.
Requiere parámetros como symbol, interval (ej., 1m, 1h), y opcionalmente limit,
startTime, endTime.

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.

En estos ejemplos veremos cómo consumir información específicamente usando la Api de


Binance.

Ejemplo 1: Obtener el precio actual de un par de trading (GET)

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

response = requests.get(url, params=params)

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.

Ejemplo 2: Obtener información del mercado (GET)

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
}

response = requests.get(url, params=params)

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
}

response = requests.get(url, params=params)

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).

Ejercicio 2: Mostrar el libro de órdenes completo


Modifica el segundo ejemplo para mostrar todas las órdenes de compra y venta (elimina el parámetro
limit).

Ejercicio 3: Obtener datos de velas para un intervalo diferente


Modifica el tercer ejemplo para obtener datos de velas con un intervalo de 1 día (1d) en lugar de 1 hora.

También podría gustarte