aemet-api
Version:
Cliente TypeScript para la API de AEMET (Agencia Estatal de Meteorología)
368 lines (367 loc) • 7.75 kB
TypeScript
/**
* Opciones para inicializar el cliente de AEMET
*/
export interface AemetOptions {
/**
* URL base de la API de AEMET. Por defecto: https://opendata.aemet.es/opendata/api
*/
baseUrl?: string;
/**
* Timeout para las peticiones en milisegundos. Por defecto: 10000 (10 segundos)
*/
timeout?: number;
}
/**
* Respuesta genérica de la API de AEMET
*/
export interface AemetResponse {
descripcion: string;
estado: number;
datos: string;
metadatos: string;
/**
* Número de intentos realizados para obtener la respuesta
*/
intentos?: number;
}
/**
* Información de predicción diaria simplificada
*/
export interface SimpleForecast {
value: string;
descripcion: string;
tmp: {
min: number;
max: number;
};
}
/**
* Respuesta de la predicción meteorológica simplificada
*/
export interface SimpleForecastResponse {
name: string;
province: string;
today: SimpleForecast;
tomorrow: SimpleForecast;
next2: SimpleForecast;
/**
* Número de intentos realizados para obtener la respuesta
*/
intentos?: number;
}
/**
* Respuesta completa de la predicción meteorológica
*/
export interface ForecastResponse extends SimpleForecastResponse {
forecast: any[];
}
/**
* Estados del cielo para la predicción
*/
export type SkyState = {
[key: string]: string;
};
/**
* Parámetros para solicitar valores climatológicos diarios
*/
export interface ClimateValuesParams {
/**
* Identificador de la estación meteorológica
*/
stationId: string;
/**
* Fecha de inicio para la consulta (formato: AAAA-MM-DD)
*/
startDate: string;
/**
* Fecha de fin para la consulta (formato: AAAA-MM-DD)
*/
endDate: string;
/**
* Código INE del municipio (5 dígitos)
* Si se especifica, se usará el endpoint de predicción horaria por municipio
*/
municipalityCode?: string;
}
/**
* Estación meteorológica
*/
export interface WeatherStation {
/**
* Indicativo de la estación
*/
indicativo: string;
/**
* Nombre de la estación
*/
nombre: string;
/**
* Provincia donde se encuentra la estación
*/
provincia: string;
/**
* Altitud de la estación (en metros)
*/
altitud: number;
/**
* Coordenadas geográficas (latitud y longitud)
*/
geoposicion?: {
latitud: number;
longitud: number;
};
}
/**
* Valor climatológico diario
*/
export interface ClimateValue {
/**
* Fecha de observación
*/
fecha: string;
/**
* Indicativo de la estación
*/
indicativo: string;
/**
* Nombre de la estación
*/
nombre: string;
/**
* Provincia
*/
provincia: string;
/**
* Altitud (metros)
*/
altitud: number;
/**
* Temperatura máxima (°C)
*/
tmax?: number;
/**
* Hora de la temperatura máxima (HHMM)
*/
horatmax?: string;
/**
* Temperatura mínima (°C)
*/
tmin?: number;
/**
* Hora de la temperatura mínima (HHMM)
*/
horatmin?: string;
/**
* Temperatura media (°C)
*/
tm?: number;
/**
* Precipitación diaria (mm)
*/
prec?: number;
/**
* Presión máxima al nivel de la estación (hPa)
*/
presMax?: number;
/**
* Presión mínima al nivel de la estación (hPa)
*/
presMin?: number;
/**
* Velocidad media del viento (m/s)
*/
velmedia?: number;
/**
* Velocidad máxima del viento (m/s)
*/
racha?: number;
/**
* Dirección del viento (grados)
*/
dir?: number;
/**
* Insolación diaria (horas)
*/
inso?: number;
/**
* Presencia de niebla durante el día (0/1)
*/
nieve?: number;
}
/**
* Respuesta con los valores climatológicos diarios
*/
export interface ClimateValuesResponse {
/**
* Información de la estación
*/
station: WeatherStation;
/**
* Valores climatológicos diarios
*/
values: ClimateValue[];
/**
* Datos crudos de la respuesta (para exploración)
*/
rawData?: any;
/**
* Número de intentos realizados para obtener la respuesta
*/
intentos?: number;
}
/**
* Respuesta con datos meteorológicos para una ubicación y hora específicas
*/
export interface WeatherByCoordinatesResponse {
/**
* Código del municipio
*/
municipalityCode: string;
/**
* Nombre del municipio
*/
name: string;
/**
* Provincia del municipio
*/
province: string;
/**
* Datos meteorológicos del periodo más cercano a la hora actual
*/
weatherData: {
/**
* Fecha y hora del periodo
*/
fecha: string;
/**
* Periodo horario (HH)
*/
periodo: string;
/**
* Estado del cielo
*/
estadoCielo: {
value: string;
descripcion: string;
};
/**
* Precipitación (mm)
*/
precipitacion: number;
/**
* Probabilidad de precipitación (%)
*/
probPrecipitacion: number;
/**
* Probabilidad de tormenta (%)
*/
probTormenta: number;
/**
* Nieve (mm)
*/
nieve: number;
/**
* Probabilidad de nieve (%)
*/
probNieve: number;
/**
* Temperatura (°C)
*/
temperatura: number;
/**
* Sensación térmica (°C)
*/
sensTermica: number;
/**
* Humedad relativa (%)
*/
humedadRelativa: number;
/**
* Viento
*/
viento: {
direccion: string;
velocidad: number;
rachaMax?: number;
};
};
/**
* Distancia en kilómetros al municipio más cercano
*/
distancia: number;
/**
* Número de intentos realizados para obtener la respuesta
*/
intentos?: number;
}
/**
* Coordenada [longitud, latitud] para los polígonos GeoJSON
*/
export type GeoJSONCoordinate = [number, number];
/**
* Polígono GeoJSON para una alerta meteorológica
*/
export interface GeoJSONPolygon {
type: "Polygon";
coordinates: GeoJSONCoordinate[][];
}
/**
* Propiedades de una alerta meteorológica en GeoJSON
*/
export interface AlertProperties {
/**
* Nivel de alerta (amarillo, naranja, rojo)
*/
nivel: string;
/**
* Tipo de fenómeno meteorológico
*/
fenomeno: string;
/**
* Descripción del área afectada
*/
areaDesc?: string;
/**
* Descripción del fenómeno
*/
descripcion?: string;
/**
* Probabilidad de ocurrencia
*/
probabilidad?: string;
/**
* Fecha y hora de inicio de la alerta
*/
onset?: string;
/**
* Fecha y hora de fin de la alerta
*/
expires?: string;
/**
* Fecha y hora en que la alerta entra en vigor
*/
effective?: string;
/**
* Otros metadatos adicionales
*/
[key: string]: any;
}
/**
* Feature GeoJSON para una alerta meteorológica
*/
export interface AlertFeature {
type: "Feature";
geometry: GeoJSONPolygon;
properties: AlertProperties;
}
/**
* FeatureCollection GeoJSON para todas las alertas meteorológicas
*/
export interface AlertsGeoJSON {
type: "FeatureCollection";
features: AlertFeature[];
/**
* Número de intentos realizados para obtener la respuesta
*/
intentos?: number;
}