Skip to main content

BDNS Fetch

PyPI version License: GPL v3 Python 3.11+

🇬🇧 English version

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-fetch lo 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, no fechaConcesion/fechaDesde/fechaHasta (fecha de concesión) — son filtros independientes. Disponible en concesiones-busqueda, ayudasestado-busqueda, minimis-busqueda, partidospoliticos-busqueda.
  • terceros: el documento señala este endpoint como redundante — concesiones-busqueda ya devuelve toda la información del beneficiario. Usa concesiones-busqueda y evita terceros.

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

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)

Source distribution for bdns-fetch 1.3.0
File Size Uploaded
bdns_fetch-1.3.0.tar.gz 32.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for bdns-fetch 1.3.0
File Interpreter ABI Platform
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 log

Release 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

Release history Release notifications | RSS feed

This release

1.3.0 This release

2 release files

1.2.1

2 release files

1.2.0

2 release files

1.1.0

2 release files

1.0.1

2 release files

1.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page