Saltar a contenido

🤖 Crawler INIA - Recolección de Datos Agroclimáticos

El archivo crawlerINIA.js es un módulo que se encarga de obtener datos semanales de ETo y precipitación desde el sitio web de agrometeorologia.cl. Esta información es esencial para generar recomendaciones de riego precisas.


🧩 Tecnologías Usadas

  • puppeteer: automatiza la navegación en sitios web para simular un usuario real.
  • cheerio: permite hacer scraping de forma similar a jQuery (si se necesitara).
  • JSON remoto: se extraen datos desde el API pública de estaciones con estructura STACK-DAY.

🧠 Lógica General del Crawler

  1. Se recibe el estacion_id y estacion_api como parámetros desde el frontend.
  2. Se navega al sitio y se selecciona la estación meteorológica correspondiente.
  3. Se obtiene el JSON con los valores diarios de ETo y Precipitación.
  4. Se extraen:
  5. Fechas
  6. Suma total de ETo (EToTotal)
  7. Total de precipitación
  8. Semana de inicio y fin (semana_inicio, semana_fin)
  9. Se devuelve un objeto JSON con los resultados listos para ser utilizados por el frontend.

📦 Archivo crawlerINIA.js

Funciones exportadas

  • obtenerDatosETo(estacion_id, estacion_api) → para /api/eto
  • obtenerClimaSemanal(estacion_id, estacion_api) → para /api/clima-semanal

Ambas funciones son utilizadas desde server.js como middlewares de endpoints GET.


🔌 Ejemplo de Consumo

Desde Angular (servicio CrawlerService):

this.http.get(`/api/eto?estacion_id=1234&estacion_api=INIA`).subscribe(...)

Desde backend (en server.js):

const { obtenerDatosETo } = require("./crawlerINIA");
app.get("/api/eto", async (req, res) => {
  const data = await obtenerDatosETo(estacion_id, api);
  res.json(data);
});

🚧 Consideraciones

  • Algunas estaciones requieren esperar a que el formulario se procese. Se maneja con waitForSelector().
  • Si faltan muchos valores de ETo, el sistema los reemplaza por el promedio (máximo 2 datos faltantes).
  • Si hay más de 2 valores faltantes, el sistema cancela la generación automática y sugiere ingresar manualmente.
  • El JSON interceptado de INIA entrega valores de los últimos 7 días.
  • Para no repetir el scraping se creó un proceso diario que descarga items-ET.json e items-resumen.json interceptando las páginas con puppeteer y los almacena en la tabla crawler_cache. Los endpoints consultan esta caché y sólo ejecutan Puppeteer si no existe registro del día. El script backend/cacheDaily.js puede programarse con cron o Cloud Scheduler para refrescar estos datos. Las páginas de origen se definen en las variables de entorno ET_URL y RESUMEN_URL.

## 🧪 Próximas Mejoras

  • Validaciones extras para estaciones nuevas.
  • Registro de logs de uso del crawler.
  • Usar una API proporcionada directamente por INIA