API moderna y optimizada construida con FastAPI para consultar horarios, rutas y paradas de Renfe Cercanías utilizando datos GTFS oficiales.
Incluye:
- Loader GTFS completo con validación, normalización y metadatos persistidos.
- Filtrado por fecha real usando
calendar.txtycalendar_dates.txt. - Endpoints REST con respuestas estandarizadas.
- Seguridad opcional mediante
X-API-Key. - Tests unitarios incluidos.
- Preparada para producción con Uvicorn y estructura profesional.
- Python 3.9+
- (Opcional pero recomendado) entorno virtual
venv - Archivo GTFS
fomento_transit.zip
git clone https://github.com/daespasa/cercanias-api.git
cd cercanias-apiPowerShell:
python -m venv .venv
.venv\Scripts\activateLinux/macOS:
python3 -m venv .venv
source .venv/bin/activatepip install -r requirements.txtPor defecto se espera:
data/
└── gtfs/
├── fomento_transit.zip
└── fomento_transit.meta (generado automáticamente)
Puedes cambiar estas rutas en el archivo .env:
GTFS_DATA_DIR=data/gtfs
GTFS_PATH=fomento_transit.zip
Para activar seguridad:
API_KEY=123456
Después deberás enviar:
X-API-Key: 123456
python run.pyCon recarga automática:
$env:UVICORN_RELOAD="true"
python run.pyuvicorn app:app --reload --host 0.0.0.0 --port 8000📍 Por defecto se ejecuta en:
📖 Documentación interactiva:
➡ http://127.0.0.1:8000/docs ➡ http://127.0.0.1:8000/redoc
Lista todas las paradas.
curl http://127.0.0.1:8000/stops/Detalles de una parada.
Lista de rutas.
Detalle de rutas + información GTFS.
Consulta de horarios combinando:
stop_timestripsroutescalendar(días activos)calendar_dates(excepciones)
Parámetros:
stop_idroute_iddate=YYYY-MM-DD
Ejemplo:
curl "http://127.0.0.1:8000/schedule/?stop_id=65000&date=2025-06-01"Metadatos del GTFS:
- ETAG
- Last-Modified
- Hash
- Fecha de carga
- Conteo de registros
Si API_KEY existe en .env, todos los endpoints requerirán:
X-API-Key: <tu_api_key>
Errores siguen el formato RFC 7807 Problem Details, por ejemplo:
{
"type": "about:blank",
"title": "Unauthorized",
"detail": "Missing or invalid API key",
"status": 401
}pip install -r requirements.txt
pytest -qLos tests incluyen:
- Mock del cargador GTFS
- Validación de endpoints
- Manejo de fechas y calendar.txt
- Metadatos
cercanias-api/
│
├── app/
│ ├── core/ # Loader GTFS + utilidades
│ ├── routers/ # Routers FastAPI
│ ├── models/ # Esquemas Pydantic
│ ├── deps/ # Dependencias inyectables (auth, manager…)
│ └── __init__.py # Crea la app FastAPI
│
├── data/
│ └── gtfs/ # ZIP + metadatos
│
├── tests/ # Tests unitarios
├── run.py # Lanzador de la API
├── requirements.txt
└── README.md
- Cache Redis opcional
- GTFS-RT (vehículos, alertas, retrasos)
- Endpoint de proximidad geográfica
- Históricos y agregaciones
- CLI:
cercanias-cli search --stop "Nord"
Pull Requests abiertas.
Si deseas colaborar:
git checkout -b feature/lo-que-sea
MIT — Libre para uso personal y comercial.