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
    No fields configured for Feature.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions