Descarga y descomprime automáticamente archivos .zip desde la página web configurable (DNIT) y proporciona una API REST para consultar RUCs.
- 🔍 Busca enlaces a archivos
.zipen la página web - ⬇️ Descarga múltiples archivos automáticamente
- 📦 Descomprime y unifica archivos
.txten CSV - 🔧 Validación automática de CSV con eliminación de errores
- 🗃️ Crea base de datos SQLite con los datos
- 🌐 API REST para consulta de RUCs
- 📊 Búsqueda por RUC exacto o razón social
# Clonar o copiar el proyecto
cd ruc-dnit
# Instalar dependencias
pip install -r requirements.txt# Básico
python -m src.main https://example.com
# Con directorio de salida personalizado
python -m src.main https://example.com -o ./mis_archivos
# Sin sobrescribir archivos existentes
python -m src.main https://example.com --no-overwrite- Edita
config.ini:
[DEFAULT]
url = https://example.com
output_dir = ./downloads
overwrite = true- Ejecuta:
python -m src.main- Crea un archivo
.env:
cp .env.example .env- Edita
.env:
ZIP_DOWNLOAD_URL=https://example.com
ZIP_OUTPUT_DIR=./downloads- Ejecuta:
python -m src.main --env# Usando el script instalado
ruc-api
# O directamente con Python
python -m src.apiPor defecto, la API corre en http://localhost:8000
Información de la API
curl http://localhost:8000/Busca un RUC exacto
curl http://localhost:8000/ruc/3634374Respuesta:
{
"ruc": "1234567-8",
"razon_social": "JUAN PEREZ",
"estado": "ACTIVO"
}Busca por RUC o razón social
# Buscar por parte de la razón social
curl "http://localhost:8000/buscar?query=JUAN"
# Buscar por RUC
curl "http://localhost:8000/buscar?query=1234567"
# Limitar resultados
curl "http://localhost:8000/buscar?query=JUAN&limit=5"Respuesta:
{
"resultados": [
{
"ruc": "1234567-8",
"razon_social": "JUAN PEREZ",
"estado": "ACTIVO"
}
],
"total": 1
}Verifica el estado de la API y la base de datos
curl http://localhost:8000/healthRespuesta:
{
"status": "healthy",
"database": "connected",
"database_path": "C:\\dev\\python\\ruc-dnit\\data\\ruc.sqlite"
}La API incluye documentación automática de Swagger/OpenAPI:
- Swagger UI: http://localhost:8000/docs
- ReDoc: http://localhost:8000/redoc
El proceso de validación del CSV incluye:
- Detección de líneas con errores (columnas incorrectas)
- Creación de archivo
error.csvcon las líneas problemáticas - Eliminación automática de líneas con "CANCELADO" y columnas incorrectas
- Generación de archivo limpio para SQLite
Archivo de errores (data/error.csv):
numero_linea: posición original de la líneacontenido_linea: contenido de la línea eliminadamotivo_error: descripción del problema
zip-downloader/
├── src/
│ ├── __init__.py
│ ├── downloader.py # Lógica de descarga/descompresión/unificación
│ ├── api.py # API REST FastAPI
│ └── main.py # Interfaz CLI
├── data/
│ ├── ruc.csv # CSV unificado y validado
│ ├── ruc.sqlite # Base de datos SQLite
│ └── error.csv # Líneas eliminadas por errores
├── config.ini # Configuración por archivo
├── api.ini # Configuración de la API
├── .env.example # Plantilla variables de entorno
├── requirements.txt # Dependencias
├── pyproject.toml # Metadata del proyecto
└── README.md
requests>=2.31.0- Descarga de archivosbeautifulsoup4>=4.12.0- Parsing HTMLpython-dotenv>=1.0.0- Variables de entornofastapi>=0.109.0- API RESTuvicorn>=0.27.0- Servidor ASGI
- Los archivos
.zipse eliminan después de descomprimirse - La base de datos SQLite se sobrescribe en cada ejecución
- El RUC se retorna concatenado con el dígito verificador:
{ruc}-{dv} - La API soporta hasta 100 resultados por búsqueda
- Daniel Cáceres
- Correo: dccaceres@gmail.com
Este proyecto está bajo la licencia MIT.