Explora cómo se reparte el dinero público a los medios de comunicación en el País Vasco.
Este repositorio contiene el código fuente y la documentación del sitio web gobiernovasco.marketing, así como las memorias oficiales del Gobierno Vasco, el intérprete (parser) programado para extraer de ellas los datos de las campañas de publicidad institucional, y estos datos ya extraídos en forma JSON.
Un proyecto de Jaime Gómez-Obregón que puedes apoyar en Patreon.
Clona el proyecto desde GitHub e instala node
18 o superior y yarn
en tu sistema, si acaso no lo están ya.
Si es la primera vez que arrancas el proyecto, instala antes sus dependencias:
yarn install
Y lanza finalmente el entorno de desarrollo:
npm run serve
El proyecto se abrirá en una nueva pestaña en tu navegador.
En Visual Studio Code el comando npm run serve
se lanzará automáticamente al abrir la carpeta del proyecto.
Se hace automáticamente en Netlify con cada push
a la rama main
.
Para obtener la clasificación de contratistas ordenados por su volumen de contratación:
const totals = database.records
.filter(({ year }) => year === 2023)
.flatMap(({ outlets }) => outlets)
.reduce((previous, { canonical, name, euros }) => {
const outlet = canonical ?? name
previous[outlet] = previous[outlet] ? previous[outlet] + euros : euros
return previous
}, {})
const ranking = Object.entries(totals)
.sort((a, b) => (a[1] < b[1] ? 1 : -1))
.map(([outlet, euros]) => [
outlet,
euros.toLocaleString('es-ES', { style: 'currency', currency: 'EUR' }),
])
.slice(0, 25)
console.table(ranking)
Para obtener el gasto total de un año:
const sum = database.records
.filter(({ euros, year }) => year === 2023 && euros)
.reduce((sum, current) => sum + current.euros, 0)
console.log(sum)
No es necesario porque el documento JSON con todos los datos extraídos de las memorias institucionales está incorporado al repositorio.
Pero para reprocesar los ficheros originales PDF del Gobierno Vasco, instala pdftohtml
0.40 en tu sistema y conviértelos a su versión HTML aproximada:
./bin/convert.sh
Después, corre el intérprete que los toma y emite por stdout
la estructura de datos JSON resultante:
npm run --silent parse > httpdocs/datos/campañas.json
Por último, es recomendable revisar que todos los tests pasan satisfactoriamente:
npm run test