Scraping de Open Data utilizando GitHub
Tags: scraping, github, opendata, spanish
Published: 2024-06-01 10:48:01

El **dato** se ha convertido en un elemento fundamental para parametrizar el mundo que nos rodea. En esta era de la información surge también el concepto de **Datos Abiertos** u **Open Data**, una filosofía que busca de forma libre y para todo el mundo que se pueda consumir distintos tipos de datos sin restricciones de derechos de autor, patentes u otros mecanismos de control.

Diversos portales orientados a esta práctica, tanto de entidades públicas como privadas, publican y actualizan información de diversa índole con cierta periodicidad. Esto permite a ciudadanos, investigadores y organizaciones **desarrollar aplicaciones o nuevas soluciones**. A fin de cuentas, el dato se puede considerar un punto de partida sobre el que envolver ciertas capas de abstracción para que le den sentido en un contexto específico.

En ocasiones, estos datos no están historificados, es decir, se obtienen al momento y cuando se actualizan la información anterior no puede volver a ser consultada. Este post nace de la curiosidad y necesidad de poder visualizar la información en varios puntos temporales para ver su evolución.

Simon Willison define el **git scraping**[1] como la técnica para versionar en un repositorio las variaciones de un recurso, como pueda ser la respuesta de un endpoint. Su motivación principal para desarrollar este tipo de sistema fue tener un registro histórico y actualizado sobre incendios en California, proporcionado por Mozilla.

A raíz de esta idea nace **Flat Data**[2], de GitHub Next. Este proyecto permite automatizar la captura de datos de un recurso aprovechando la infraestructura que otorga **GitHub **para ejecutar **tareas programadas **y actualizar un repositorio con dicha información.

Para hacer un análogo del proyecto de Simon Willison, con apoyo del catálogo abierto de incendios activos de la NASA[3] se puede diseñar fácilmente un **scraper para obtener los datos **relativos a incendios en Europa de los últimos 7 días, con una frecuencia de refresco diaria.

```
name: Flat

on:
  push:
    branches:
      - main
  workflow_dispatch:
  schedule:
    - cron: '0 0 * * *'

jobs:
  scheduled:
    runs-on: ubuntu-latest
    steps:
      - name: Setup deno
        uses: denoland/setup-deno@main
        with:
          deno-version: v1.10.x
      - name: Check out repo
        uses: actions/checkout@v2
      - name: Fetch data
        uses: githubocto/flat@v3
        with:
          http_url: "https://firms.modaps.eosdis.nasa.gov/data/active_fire/modis-c6.1/csv/MODIS_C6_1_Europe_7d.csv"
          downloaded_filename: "europe_fire_7d.csv"
```

Antes de que se ejecute, conviene revisar que en las GitHub Actions del repositorio se den **permisos de escritura para evitar un error 403** a la hora de hacer commit del contenido. Desde una URL https://github.com/{USERNAME}/{REPOSITORY}/settings/actions podemos configurar estos permisos haciendo scroll hasta el final, como se indica en la siguiente imagen.

![Configuración de escritura para workflows en las GH Actions](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x0277xvv45w6f0tcw256.png)

Una vez ejecutada la GitHub Action, en el repositorio aparecerá esta información y de manera automática se irá refrescando, **manteniendo versiones anteriores para su consulta por cualquier usuario en cualquier momento**. 

![Repositorio de ejemplo de Flat Data](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5fc3h8qdhfpditz32x5p.png)

El código de referencia se encuentra disponible en este enlace: https://github.com/javi-aranda/flat-data-example/

---

**Referencias:**

- [1] Git Scraping: https://simonwillison.net/2020/Oct/9/git-scraping/
- [2] Flat Data: https://githubnext.com/projects/flat-data
- [3] Catálogo de incendios de la NASA: https://firms.modaps.eosdis.nasa.gov/active_fire/#firms-txt