UNPKG

aemet-api

Version:

Cliente TypeScript para la API de AEMET (Agencia Estatal de Meteorología)

143 lines (142 loc) 6.19 kB
"use strict"; /** * Ejemplo de uso del método getAlertsGeoJSON para obtener alertas meteorológicas en formato GeoJSON * * Para ejecutar este ejemplo: * 1. Configura tu API key en un archivo .env en la raíz del proyecto * 2. Ejecuta: npx ts-node src/examples/alerts-geojson.ts */ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); Object.defineProperty(exports, "__esModule", { value: true }); const aemet_1 = require("../aemet"); const dotenv = __importStar(require("dotenv")); // Cargar variables de entorno desde .env dotenv.config(); // Recuperar la API key desde las variables de entorno const apiKey = process.env.AEMET_API_KEY; if (!apiKey) { console.error('Error: No se ha encontrado la API key de AEMET.'); console.error('Crea un archivo .env en la raíz del proyecto con el siguiente contenido:'); console.error('AEMET_API_KEY=tu_api_key'); process.exit(1); } // Inicializar el cliente de AEMET const aemet = new aemet_1.Aemet(apiKey); /** * Función principal para obtener y procesar las alertas */ async function obtenerAlertasMeteorologicas() { try { console.log('Obteniendo alertas meteorológicas en formato GeoJSON...'); const alertas = await aemet.getAlertsGeoJSON(); console.log(`\n✅ Se han encontrado ${alertas.features.length} alertas meteorológicas.`); // Mostrar información sobre las alertas console.log('\n📊 Resumen de alertas:'); // Contadores por nivel de alerta const contadoresNivel = { amarillo: 0, naranja: 0, rojo: 0, desconocido: 0 }; // Contadores por tipo de fenómeno const fenomenos = new Map(); // Procesar cada alerta alertas.features.forEach((feature) => { // Incrementar contador de nivel const nivel = feature.properties.nivel.toLowerCase(); if (nivel === 'amarillo' || nivel === 'naranja' || nivel === 'rojo') { contadoresNivel[nivel]++; } else { contadoresNivel.desconocido++; } // Extraer tipo de fenómeno (la primera parte antes del ';') const fenomeno = feature.properties.fenomeno.split(';')[0]; if (fenomeno) { fenomenos.set(fenomeno, (fenomenos.get(fenomeno) || 0) + 1); } }); // Mostrar contadores por nivel console.log('\n🚨 Alertas por nivel:'); console.log(` - Nivel rojo: ${contadoresNivel.rojo}`); console.log(` - Nivel naranja: ${contadoresNivel.naranja}`); console.log(` - Nivel amarillo: ${contadoresNivel.amarillo}`); if (contadoresNivel.desconocido > 0) { console.log(` - Nivel desconocido: ${contadoresNivel.desconocido}`); } // Mostrar contadores por fenómeno console.log('\n🌩️ Alertas por fenómeno:'); fenomenos.forEach((count, fenomeno) => { console.log(` - ${fenomeno}: ${count}`); }); // Mostrar detalles de alertas de nivel rojo o naranja (las más graves) const alertasGraves = alertas.features.filter(feature => ['rojo', 'naranja'].includes(feature.properties.nivel.toLowerCase())); if (alertasGraves.length > 0) { console.log('\n⚠️ Detalles de alertas graves (nivel rojo o naranja):'); alertasGraves.forEach((alerta, index) => { console.log(`\n[${index + 1}] Alerta ${alerta.properties.nivel.toUpperCase()}`); console.log(` - Fenómeno: ${alerta.properties.fenomeno}`); console.log(` - Área: ${alerta.properties.areaDesc || 'No especificada'}`); console.log(` - Descripción: ${alerta.properties.descripcion || 'No disponible'}`); console.log(` - Probabilidad: ${alerta.properties.probabilidad || 'No especificada'}`); // Formatear fechas si están disponibles if (alerta.properties.onset) { const inicio = new Date(alerta.properties.onset); console.log(` - Inicio: ${inicio.toLocaleString('es-ES')}`); } if (alerta.properties.expires) { const fin = new Date(alerta.properties.expires); console.log(` - Fin: ${fin.toLocaleString('es-ES')}`); } }); } else { console.log('\n✅ No hay alertas de nivel rojo o naranja actualmente.'); } } catch (error) { console.error('❌ Error al obtener las alertas meteorológicas:'); if (error instanceof Error) { console.error(error.message); } else { console.error(error); } process.exit(1); } } // Ejecutar la función principal obtenerAlertasMeteorologicas();