Servicio API para obtener valores de "Unidad Indexada" (UI) y "Unidad Reajustable" (UR) desde el Banco Central del Uruguay (BCU).
Este servicio proporciona endpoints REST para consultar valores actuales e históricos de las unidades UI y UR, con un sistema de caché incorporado para mejorar el rendimiento y reducir la carga en el sitio web del BCU.
- UI (Unidad Indexada): Unidad de cuenta indexada utilizada en Uruguay vinculada al Índice de Precios al Consumo (IPC).
- UR (Unidad Reajustable): Unidad ajustable utilizada en Uruguay para ciertas operaciones financieras y contratos.
- Python 3.9+
- Entorno virtual (recomendado)
-
Clonar el repositorio:
git clone https://github.com/tuusuario/cotizaciones_UI_UR_BCU.git cd cotizaciones_UI_UR_BCU -
Crear y activar un entorno virtual:
python -m venv venv # En Windows venv\Scripts\activate # En Linux/Mac source venv/bin/activate
-
Instalar dependencias:
pip install -r requirements.txt
-
Configurar entorno:
# Copiar el archivo de ejemplo cp .env.example .env # Editar .env si es necesario
Para desarrollo:
python run.pyPara producción:
gunicorn wsgi:applicationLa API cuenta con documentación interactiva mediante Swagger UI, accesible en la ruta /docs una vez que la aplicación está en ejecución.
GET /api/health
Comprobar si la API está funcionando correctamente.
Respuesta:
{
"status": "ok",
"version": "1.0.0"
}GET /api/info
Obtener información detallada sobre los endpoints disponibles.
GET /api/cotizacion/ui?fecha=YYYY-MM-DD
Obtener el valor de la UI para una fecha específica (por defecto usa la fecha actual si no se proporciona).
Ejemplo de solicitud:
GET /api/cotizacion/ui?fecha=2023-12-31
Ejemplo de respuesta:
{
"tipo": "UI",
"moneda": "UNIDAD INDEXADA",
"fecha": "2023-12-31",
"valor": 5.8642,
"metadata": {
"fuente": "Banco Central del Uruguay",
"fecha_consulta": "2023-12-31 15:30:45"
}
}GET /api/cotizacion/ur?fecha=YYYY-MM-DD
Obtener el valor de la UR para una fecha específica (por defecto usa la fecha actual si no se proporciona).
Ejemplo de solicitud:
GET /api/cotizacion/ur?fecha=2023-12-31
Ejemplo de respuesta:
{
"tipo": "UR",
"moneda": "UNIDAD REAJUSTABLE",
"fecha": "2023-12-31",
"valor": 1532.33,
"metadata": {
"fuente": "Banco Central del Uruguay",
"fecha_consulta": "2023-12-31 15:30:45"
}
}GET /api/historico/ui?inicio=YYYY-MM-DD&fin=YYYY-MM-DD
Obtener valores históricos de UI para un rango de fechas.
Ejemplo de solicitud:
GET /api/historico/ui?inicio=2023-01-01&fin=2023-01-31
Ejemplo de respuesta:
{
"tipo": "UI",
"moneda": "UNIDAD INDEXADA",
"fecha_inicio": "2023-01-01",
"fecha_fin": "2023-01-31",
"cotizaciones": [
{
"tipo": "UI",
"moneda": "UNIDAD INDEXADA",
"fecha": "2023-01-01",
"valor": 5.4321
},
{
"tipo": "UI",
"moneda": "UNIDAD INDEXADA",
"fecha": "2023-01-02",
"valor": 5.4325
}
// ... más cotizaciones
],
"metadata": {
"total_registros": 31,
"dias_solicitados": 31,
"fuente": "Banco Central del Uruguay"
}
}GET /api/historico/ur?inicio=YYYY-MM-DD&fin=YYYY-MM-DD
Obtener valores históricos de UR para un rango de fechas.
Ejemplo de solicitud:
GET /api/historico/ur?inicio=2023-01-01&fin=2023-01-31
Ejemplo de respuesta:
{
"tipo": "UR",
"moneda": "UNIDAD REAJUSTABLE",
"fecha_inicio": "2023-01-01",
"fecha_fin": "2023-01-31",
"cotizaciones": [
{
"tipo": "UR",
"moneda": "UNIDAD REAJUSTAB",
"fecha": "2023-01-01",
"valor": 1490.25
},
{
"tipo": "UR",
"moneda": "UNIDAD REAJUSTAB",
"fecha": "2023-01-02",
"valor": 1490.25
}
// ... más cotizaciones
],
"metadata": {
"total_registros": 31,
"dias_solicitados": 31,
"fuente": "Banco Central del Uruguay"
}
}- Web Scraping: Extrae datos directamente desde el sitio web del BCU
- Sistema de caché: Almacena datos obtenidos para minimizar peticiones y mejorar el rendimiento
- Manejo de errores: Sistema completo de manejo de errores y registro
- Documentación de API: Documentación interactiva con Swagger UI
La API implementa un sistema de caché basado en archivos para mejorar el rendimiento:
- Los archivos de caché se almacenan en el directorio
cache - El tiempo de expiración predeterminado es de 24 horas (configurable)
- Las claves de caché se generan basadas en los parámetros de la solicitud
├── app/ # Paquete de la aplicación
│ ├── api/ # Endpoints de la API
│ ├── scrapers/ # Web scrapers para extracción de datos
│ ├── services/ # Capa de servicios
│ └── utils/ # Funciones de utilidad
├── cache/ # Almacenamiento de caché
├── logs/ # Registros de la aplicación
├── .env # Variables de entorno
├── .env.example # Archivo de ejemplo de variables de entorno
├── requirements.txt # Dependencias
├── run.py # Servidor de desarrollo
└── wsgi.py # Punto de entrada WSGI para producción
La API incluye documentación interactiva mediante Swagger UI. Para acceder a la documentación:
- Inicia la aplicación
- Navega a
http://localhost:5000/docs
La documentación te permite:
- Ver todos los endpoints disponibles
- Probar las solicitudes directamente desde el navegador
- Ver los esquemas de respuesta y formatos esperados
La especificación Swagger está disponible en /api/swagger.json y contiene la siguiente estructura:
{
"swagger": "2.0",
"info": {
"title": "BCU Exchange Rate API",
"description": "API for retrieving UI and UR values from the Central Bank of Uruguay",
"version": "1.0.0"
},
"basePath": "/api",
"schemes": ["http", "https"],
"paths": {
"/health": {...},
"/info": {...},
"/cotizacion/{tipo_unidad}": {...},
"/historico/{tipo_unidad}": {...}
}
}- Haz un fork del repositorio
- Crea tu rama de características (
git checkout -b feature/nueva-caracteristica) - Haz commit de tus cambios (
git commit -m 'Añadir nueva característica') - Haz push a la rama (
git push origin feature/nueva-caracteristica) - Abre un Pull Request
Este proyecto está licenciado bajo la Licencia MIT - ver el archivo LICENSE para más detalles.