Empieza por las capacidades. Recorre todos los enlaces pagination.next; un segmento no equivale al periodo completo. Las consultas no requieren JavaScript ni autenticación.
Para tiempo actual, vuelve a abrir /api/now y compara observation_time con la hora real. generated_at solo fecha esta respuesta. Si la herramienta no puede navegar, no inventes valores.
{
"fields": {
"temperature": {
"unit": "°C",
"description": "Temperatura media"
},
"temperature_min": {
"unit": "°C",
"description": "Temperatura mínima"
},
"temperature_max": {
"unit": "°C",
"description": "Temperatura máxima"
},
"feels_like": {
"unit": "°C",
"description": "Sensación"
},
"humidity": {
"unit": "%",
"description": "Humedad media"
},
"humidity_min": {
"unit": "%",
"description": "Humedad mínima"
},
"humidity_max": {
"unit": "%",
"description": "Humedad máxima"
},
"pressure": {
"unit": "hPa",
"description": "Presión media publicada"
},
"pressure_min": {
"unit": "hPa",
"description": "Presión mínima"
},
"pressure_max": {
"unit": "hPa",
"description": "Presión máxima"
},
"wind_speed": {
"unit": "km/h",
"description": "Velocidad media"
},
"wind_speed_max": {
"unit": "km/h",
"description": "Velocidad máxima"
},
"wind_gust": {
"unit": "km/h",
"description": "Racha máxima"
},
"wind_direction": {
"unit": "°",
"description": "Dirección de procedencia"
},
"dew_point": {
"unit": "°C",
"description": "Rocío"
},
"rain_total": {
"unit": "mm",
"description": "Contador diario acumulativo"
},
"rain_amount": {
"unit": "mm",
"description": "Precipitación del intervalo"
},
"rain_rate": {
"unit": "mm/h",
"description": "Intensidad máxima"
},
"solar_radiation": {
"unit": "W/m²",
"description": "Radiación máxima publicada"
},
"uv": {
"unit": "UV index",
"description": "UV máximo publicado"
},
"wind_speed_min": {
"unit": "km/h",
"description": "Viento mínimo"
},
"wind_gust_min": {
"unit": "km/h",
"description": "Racha mínima"
},
"wind_gust_avg": {
"unit": "km/h",
"description": "Racha media"
},
"dew_point_min": {
"unit": "°C",
"description": "Rocío mínimo"
},
"dew_point_max": {
"unit": "°C",
"description": "Rocío máximo"
},
"heat_index": {
"unit": "°C",
"description": "Índice de calor"
},
"wind_chill": {
"unit": "°C",
"description": "Enfriamiento por viento"
}
},
"resolutions": {
"raw": "Registros originales publicados, normalmente agregados ~5 min",
"5min": "Alias de raw; no se interpola ni simula cadencia",
"hourly": "Agregación de registros disponibles; dirección circular",
"daily": "Resumen por día local; extremos y contador diario",
"monthly": "Agregación de diarios; se explicita días con datos"
},
"seasons": {
"winter": "Diciembre del año anterior a febrero del año nombrado; invierno 2025-2026: 2025-12-01 a 2026-02-28",
"spring": "01 marzo–31 mayo",
"summer": "01 junio–31 agosto",
"autumn": "01 septiembre–30 noviembre",
"arbitrary_ranges": true
},
"quality": {
"missing": "null no equivale a cero. Días sin datos y días sin importar se distinguen.",
"rain": "Máximo contador por día; se suman una sola vez los días. Reinicios impiden confirmar el total. rain_amount intradiario es diferencia; primer intervalo sin antecedente = null.",
"wind": "Media circular no ponderada; calmas conocidas excluidas; resultante casi nula => dirección null.",
"nights": "00–08 Europe/Madrid, no ocaso–amanecer. Solo noches completas para recuentos concluyentes.",
"time": "Europe/Madrid con desfase UTC; modelos en UTC. La hora de generación no es la de observación.",
"freshness": "Usar observation_time, data_age_seconds y status de /api/now; nunca presentar una copia antigua como actual.",
"coverage": "Porcentaje de días con datos y cobertura nominal de ranuras de 5 min separados; no garantía de exactitud del sensor."
},
"exports": {
"formats": [
"csv",
"json"
],
"requires_imported_range": true,
"default_max_days_single_response": 1095,
"default_max_records_single_response": 1000,
"larger_periods": "HTTP 413 con lista completa parts. Cliente incluido une todo en un archivo; EXPORT_MAX_DAYS y EXPORT_MAX_RECORDS configurables según recursos aprobados.",
"stream_errors": "Descarta archivos interrumpidos. JSON solo es completo si termina con complete:true. CSV conserva errores como fallo de transporte, no añade filas ficticias."
},
"limitations": [
"El proveedor no garantiza conservar todo el histórico; la fecha de instalación sigue desconocida.",
"Sin ARCHIVE/importación no se ofrecen falsos resúmenes completos; history puede consultar WU por segmentos.",
"Visores Windy requieren JavaScript y no aportan rejilla numérica a esta API.",
"IFS/AIFS no publican run en la API usada; se informa null.",
"MP4 satélite, interacción con mapas, zoom y preferencias locales son funciones de navegador.",
"La navegación de ChatGPT depende de sus herramientas; OpenAPI no conecta automáticamente un chat normal."
]
}