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!
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file bdns_fetch-1.3.0.tar.gz.
File metadata
- Download URL: bdns_fetch-1.3.0.tar.gz
- Upload date:
- Size: 32.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2a4d75295df33c9168f8c1bcf35faec9d949dfcd62d32e830e3e8f39a84520d7
|
|
| MD5 |
fc5a0364032c977fa53fcdc76bfb441b
|
|
| BLAKE2b-256 |
8e6ba07c4b20057c798bf8f8f86506008c67877ec393ede80e1c0550b4b76d68
|
Provenance
The following attestation bundles were made for bdns_fetch-1.3.0.tar.gz:
Publisher:
ci-cd.yml on cruzlorite/bdns-fetch
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
bdns_fetch-1.3.0.tar.gz -
Subject digest:
2a4d75295df33c9168f8c1bcf35faec9d949dfcd62d32e830e3e8f39a84520d7 - Sigstore transparency entry: 2071178083
- Sigstore integration time:
-
Permalink:
cruzlorite/bdns-fetch@663adddc66f7bd6b68fecf7447288559cfc7aa09 -
Branch / Tag:
refs/tags/v1.3.0 - Owner: https://github.com/cruzlorite
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci-cd.yml@663adddc66f7bd6b68fecf7447288559cfc7aa09 -
Trigger Event:
push
-
Statement type:
File details
Details for the file bdns_fetch-1.3.0-py3-none-any.whl.
File metadata
- Download URL: bdns_fetch-1.3.0-py3-none-any.whl
- Upload date:
- Size: 37.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1fcb6fd0337b0fdf5a181f62e77fd62b8e28210a9237f4217170937cf8630cb9
|
|
| MD5 |
c3fd5bff838d35a345e9bac7b8492296
|
|
| BLAKE2b-256 |
afc91e274f17db5bcc3a5e1c75e85ec512f20f526eac2f5dda81809463080d1d
|
Provenance
The following attestation bundles were made for bdns_fetch-1.3.0-py3-none-any.whl:
Publisher:
ci-cd.yml on cruzlorite/bdns-fetch
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
bdns_fetch-1.3.0-py3-none-any.whl -
Subject digest:
1fcb6fd0337b0fdf5a181f62e77fd62b8e28210a9237f4217170937cf8630cb9 - Sigstore transparency entry: 2071178154
- Sigstore integration time:
-
Permalink:
cruzlorite/bdns-fetch@663adddc66f7bd6b68fecf7447288559cfc7aa09 -
Branch / Tag:
refs/tags/v1.3.0 - Owner: https://github.com/cruzlorite
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
ci-cd.yml@663adddc66f7bd6b68fecf7447288559cfc7aa09 -
Trigger Event:
push
-
Statement type: