Skip to content

Crawler automatizado de fuentes autorizadas para la API #25

Description

@ArielParra

Qué hay que hacer

Crear un crawler que extraiga y actualice automáticamente datos de fuentes
autorizadas (becas, certificados, oportunidades, etc.) y los sincronice
con la API estática, ejecutándose de forma quincenal via CI/CD.

Por qué

Actualmente los datos de la API se actualizan solo cuando alguien abre un
PR manualmente. Hay fuentes oficiales que publican convocatorias, fechas
límite y nuevas certificaciones de forma regular — mantenerlas actualizadas
a mano es inviable a largo plazo.

Implementación

  • Lenguaje: Python con httpx + BeautifulSoup o playwright para sitios con JS
  • Un scraper por fuente, independientes entre sí
  • Output: JSON validado contra el esquema de la API
  • Ejecución: GitHub Actions con cron quincenal (0 9 1,15 * *)
  • Si hay cambios detectados → PR automático a la API con los datos nuevos
  • Si una fuente falla → issue automático en el repo notificando el error

Flujo

GitHub Actions (quincenal)
  → ejecuta crawlers por fuente
  → valida JSON contra esquema de la API
  → compara con datos existentes
  → si hay cambios → abre PR automático a la API
  → si hay errores → abre issue automático en el repo
  → revisión humana antes de merge

Seguridad y ética

  • Solo crawlear fuentes explícitamente autorizadas (lista en crawlers/sources.yml)
  • Respetar robots.txt de cada fuente
  • Rate limiting entre requests para no sobrecargar servidores
  • Ningún dato personal o privado se extrae ni almacena
  • User-agent identificable como bot del club

Estructura del repo

crawlers/
├── sources.yml         # lista de fuentes autorizadas y configuración
├── delfin.py
├── youth_europa.py
├── oracle.py
├── icpc.py
└── utils/
    ├── validator.py    # valida JSON contra esquema de la API
    └── differ.py       # detecta cambios vs datos existentes
.github/workflows/
└── crawler.yml         # cron quincenal + apertura de PR/issue automático

Listo cuando...

  • sources.yml con lista inicial de fuentes autorizadas
  • Al menos 3 crawlers funcionando (Delfín, Youth Europa, Oracle)
  • Validación de JSON contra esquema de la API antes de proponer cambios
  • GitHub Actions ejecuta el cron quincenal correctamente
  • PR automático se abre cuando hay datos nuevos o actualizados
  • Issue automático se abre cuando una fuente falla o cambia su estructura
  • README del crawler documenta cómo agregar una fuente nueva
  • Revisión humana requerida antes de merge (no auto-merge)
  • robots.txt respetado en todos los crawlers

Relaciones

  • Depende de → Migración de datos a la API
  • Relacionado con → CI/CD links rotos y recursos desactualizados
  • Relacionado con → Sección de oportunidades nacionales e internacionales
  • Relacionado con → Sección de becas y certificaciones

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions