Skip to content

API de la BCN

BCN Extractor consume los servicios web públicos de la Biblioteca del Congreso Nacional de Chile (BCN). Esta página documenta cómo funcionan esos servicios para entender qué hace el extractor bajo el capó.

El endpoint principal que usa BCN Extractor para obtener las normas de una institución:

GET https://www.bcn.cl/leychile/navegar?i={id_norma}&f=XML

Este servicio retorna el texto completo de una norma en formato XML.

Para obtener qué normas tiene una institución:

GET https://www.bcn.cl/leychile/buscar?tipo_norma=&num_norma=&fecha_desde=&fecha_hasta=&id_organismo={id}&texto=&nro_boletin=&estado_dt=&promulgado=&exp_proy=&tipobusqueda=norm&sort_by=date_rank&asc_desc=desc

El parámetro clave es id_organismo que corresponde al ID de la institución.

Un documento XML típico de la BCN tiene esta estructura:

<?xml version="1.0" encoding="UTF-8"?>
<norma>
<metadatos>
<id>1234567</id>
<tipo_norma>
<nombre>Decreto Supremo</nombre>
<abreviatura>DS</abreviatura>
</tipo_norma>
<numero>42</numero>
<titulo>Decreto que aprueba reglamento...</titulo>
<estado>Vigente</estado>
<fecha_publicacion>15-MAY-2023</fecha_publicacion>
<fecha_promulgacion>20-ABR-2023</fecha_promulgacion>
<organismo>Ministerio de Salud</organismo>
<materias>
<materia>Salud pública</materia>
<materia>Reglamentos</materia>
</materias>
</metadatos>
<articulos>
<articulo numero="1">
<texto>Apruébase el siguiente reglamento...</texto>
</articulo>
<!-- ... -->
</articulos>
</norma>

El utils/norm_parser.py extrae de ese XML:

Campo XMLCampo en DBDescripción
metadatos/idnormas.idID único de la norma
metadatos/tipo_norma/nombretipos_normas.nombreTipo de norma
metadatos/numeronormas.numeroNúmero de la norma
metadatos/titulonormas.tituloTítulo completo
metadatos/estadonormas.estadovigente o derogada
metadatos/fecha_publicacionnormas.fecha_publicacionFecha de publicación
metadatos/organismonormas.organismoOrganismo emisor
metadatos/materiasnormas.metadata_jsonLista de materias en JSONB
articulos/*normas.contenido_textoTexto completo convertido a Markdown

La BCN no publica límites oficiales de su API, pero BCN Extractor implementa rate limiting conservador por defecto (BCN_RATE_LIMIT=1.0 segundo entre requests) para ser un buen ciudadano y evitar sobrecargar el servicio.

Terminal window
# En .env — ajustar con cuidado
BCN_RATE_LIMIT=1.0 # segundos entre requests
BCN_MAX_RETRIES=3 # reintentos en caso de error

El repositorio incluye el schema XSD del XML de la BCN en data/bcn_schema.xml para referencia. También hay ejemplos de respuesta reales en data/sample/.