BDNS Fetch
Cliente Python y CLI para la API REST de la BDNS. Cubre los 29 endpoints disponibles con soporte completo de parámetros, paginación automática y reintentos configurables.
Instalación
pip install bdns-fetch
o desde el repositorio:
git clone https://github.com/cruzlorite/bdns-fetch.git
cd bdns-fetch
pip install .
Uso
Cliente Python
from bdns.fetch.client import BDNSClient
client = BDNSClient()
for org in client.fetch_organos(idAdmon="C"):
print(org["codigo"], "-", org["descripcion"])
Búsqueda paginada:
resultados = client.fetch_ayudasestado_busqueda(
descripcion="investigación",
pageSize=1000,
num_pages=5,
from_page=0,
)
for item in resultados:
print(item)
Descarga de documentos binarios:
pdf_bytes = client.fetch_convocatorias_pdf(id=608268, vpd="A07")
with open("convocatoria.pdf", "wb") as f:
f.write(pdf_bytes)
Configuración del cliente:
client = BDNSClient(
max_retries=5, # reintentos por petición fallida
wait_time=2, # segundos entre reintentos
max_workers=10, # hilos concurrentes para paginación
return_raw=False, # True devuelve objetos de página completos
)
CLI
# Ver ayuda
bdns-fetch --help
bdns-fetch <comando> --help
# Guardar a fichero
bdns-fetch --output-file organos.jsonl organos --idAdmon C
# Búsqueda con filtros
bdns-fetch --output-file resultado.jsonl ayudasestado-busqueda \
--descripcion "innovación" --fechaDesde "2023-01-01" --fechaHasta "2024-12-31"
# Paginación
bdns-fetch concesiones-busqueda --num-pages 0 --pageSize 10000
# Salida a stdout (por defecto)
bdns-fetch convocatorias-ultimas | jq .
Opciones globales:
| Opción | Alias | Por defecto | Descripción |
|---|---|---|---|
--output-file |
-o |
- (stdout) |
Fichero de salida en formato JSONL |
--max-retries |
-mr |
3 |
Reintentos por petición fallida |
--wait-time |
-wt |
2 |
Segundos entre reintentos |
--max-workers |
-mw |
5 |
Hilos concurrentes para paginación |
--return-raw |
-rr |
false |
Devolver objetos de página completos |
--verbose |
-v |
false |
Log detallado de peticiones HTTP |
Comandos disponibles
| Comando | Método cliente |
|---|---|
actividades |
fetch_actividades |
sectores |
fetch_sectores |
regiones |
fetch_regiones |
finalidades |
fetch_finalidades |
beneficiarios |
fetch_beneficiarios |
instrumentos |
fetch_instrumentos |
reglamentos |
fetch_reglamentos |
objetivos |
fetch_objetivos |
organos |
fetch_organos |
organos-agrupacion |
fetch_organos_agrupacion |
organos-codigo |
fetch_organos_codigo |
organos-codigoadmin |
fetch_organos_codigoadmin |
convocatorias |
fetch_convocatorias |
convocatorias-busqueda |
fetch_convocatorias_busqueda |
convocatorias-ultimas |
fetch_convocatorias_ultimas |
convocatorias-documentos |
fetch_convocatorias_documentos |
convocatorias-pdf |
fetch_convocatorias_pdf |
concesiones-busqueda |
fetch_concesiones_busqueda |
ayudasestado-busqueda |
fetch_ayudasestado_busqueda |
minimis-busqueda |
fetch_minimis_busqueda |
grandesbeneficiarios-anios |
fetch_grandesbeneficiarios_anios |
grandesbeneficiarios-busqueda |
fetch_grandesbeneficiarios_busqueda |
planesestrategicos |
fetch_planesestrategicos |
planesestrategicos-busqueda |
fetch_planesestrategicos_busqueda |
planesestrategicos-documentos |
fetch_planesestrategicos_documentos |
planesestrategicos-vigencia |
fetch_planesestrategicos_vigencia |
partidospoliticos-busqueda |
fetch_partidospoliticos_busqueda |
sanciones-busqueda |
fetch_sanciones_busqueda |
terceros |
fetch_terceros |
Buenas prácticas (oficiales)
Según el documento oficial "Buenas prácticas API SNPSAP":
- Límite de peticiones: máximo 10 peticiones GET/segundo por IP.
bdns-fetchlo aplica internamente con un limitador tipo token-bucket compartido entre todas las peticiones HTTP, independientemente de--max-workers. - Sincronización incremental: usa
fechaRegInicio/fechaRegFin(fecha de registro) para detectar altas/cambios, nofechaConcesion/fechaDesde/fechaHasta(fecha de concesión) — son filtros independientes. Disponible enconcesiones-busqueda,ayudasestado-busqueda,minimis-busqueda,partidospoliticos-busqueda. terceros: el documento señala este endpoint como redundante —concesiones-busquedaya devuelve toda la información del beneficiario. Usaconcesiones-busqueday evitaterceros.
Limitaciones
- No implementa los endpoints de exportación (CSV/XLSX) ni los de configuración del portal.
- Los resultados de paginación concurrente no están ordenados por número de página.
Licencia y enlaces
- Licencia: GNU General Public License v3.0
- API oficial: https://www.infosubvenciones.es/bdnstrans/api
- Portal BDNS: https://www.infosubvenciones.es
- PyPI: https://pypi.org/project/bdns-fetch
Para más información sobre los datos disponibles, consulta el portal oficial.
bdns-fetch es software libre. ¡Las contribuciones son bienvenidas!
Metadata
Release files for bdns-fetch 1.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| bdns_fetch-1.3.0.tar.gz | 32.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| bdns_fetch-1.3.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 69.8 kB
Release files / bdns_fetch-1.3.0.tar.gz
| Download URL | bdns_fetch-1.3.0.tar.gz |
|---|---|
| Size | 32.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2a4d75295df33c9168f8c1bcf35faec9d949dfcd62d32e830e3e8f39a84520d7
|
|
BLAKE2b-256 checksum How to use checksums |
8e6ba07c4b20057c798bf8f8f86506008c67877ec393ede80e1c0550b4b76d68
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 4, 2026.
Transparency logRelease files / bdns_fetch-1.3.0-py3-none-any.whl
| Download URL | bdns_fetch-1.3.0-py3-none-any.whl |
|---|---|
| Size | 37.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1fcb6fd0337b0fdf5a181f62e77fd62b8e28210a9237f4217170937cf8630cb9
|
|
BLAKE2b-256 checksum How to use checksums |
afc91e274f17db5bcc3a5e1c75e85ec512f20f526eac2f5dda81809463080d1d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 4, 2026.
Transparency log