El widget del tiempo es un componente JavaScript independiente que consulta la API pública de el-tiempo.net y renderiza una tarjeta meteorológica completa directamente en el navegador del usuario. Todo el ciclo de vida —petición a la API, transformación de datos y generación de HTML— ocurre en el cliente, sin ninguna intervención del servidor PHP.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/jpbarbatic/webapp/llms.txt
Use this file to discover all available pages before exploring further.
Arquitectura del widget
El widget está implementado en el archivopublic/assets/weather-widget.js como una clase ES6 WeatherWidget. Es completamente autocontenida: no depende de jQuery ni de ninguna otra librería JavaScript externa. La única dependencia de presentación es la hoja de estilos Weather Icons (weather-icons.min.css), que se carga mediante un CDN, y assets/weather.css para estilos de layout propios del proyecto.
Constructor y opciones
| Parámetro | Tipo | Descripción |
|---|---|---|
containerSelector | string | Selector CSS del elemento HTML donde se renderizará el widget (p. ej. '#weather-widget'). Si el elemento no existe en el DOM, el constructor registra un error en consola y aborta. |
options | object | Objeto de configuración opcional. |
options.provincia | string | Código numérico de la provincia según la codificación de el-tiempo.net. Valor por defecto: '29' (Málaga). |
options.municipio | string | Código numérico del municipio. Valor por defecto: '29094' (Málaga capital). |
this.data = null —donde se almacenará la respuesta de la API— y carga el mapa completo de iconos this.weatherIcons (ver sección Mapeo de iconos).
Si el selector no coincide con ningún elemento del DOM, el widget registra el siguiente mensaje en consola y no realiza ninguna acción adicional:
Inicialización
El widget se inicializa enhtml/dashboard/dashboard.script.php mediante una IIFE (función auto-invocada) para evitar contaminar el ámbito global con la variable widget:
widget.load() dispara la petición a la API. Mientras se recibe la respuesta, el método renderLoading() muestra un spinner de Bootstrap en el contenedor.
Llamada a la API
El métodoload() construye la URL de la API concatenando los códigos de provincia y municipio configurados:
| Elemento | Detalle |
|---|---|
| Endpoint | https://api.el-tiempo.net/json/v3/provincias/{provincia}/municipios/{municipio} |
| Método HTTP | GET |
| Formato de respuesta | JSON |
| Campo JSON | Uso en el widget |
|---|---|
municipio.NOMBRE | Nombre del municipio mostrado en la cabecera |
municipio.NOMBRE_PROVINCIA | Nombre de la provincia |
temperatura_actual | Temperatura actual en °C |
stateSky.id / stateSky.description | Código e identificador textual del estado del cielo |
temperaturas.max / temperaturas.min | Temperaturas máxima y mínima del día |
humedad | Porcentaje de humedad relativa |
viento | Velocidad del viento en km/h |
precipitacion | Precipitación en mm |
pronostico.hoy | Objeto con arrays hora a hora: temperatura, estado_cielo, prob_precipitacion |
proximos_dias | Array de objetos con previsión para los próximos días |
origin.productor | Fuente de los datos (habitualmente AEMET) |
Renderizado
Una vez recibida la respuesta,render() construye una tarjeta Bootstrap con cuatro secciones:
Cabecera de la tarjeta
Muestra el nombre del municipio y la provincia, el icono del estado actual del cielo y la temperatura en tiempo real en formato
display-3.Métricas rápidas
Cuatro tarjetas métricas (
metric-card) con: temperatura máxima/mínima, humedad, velocidad del viento y precipitación.Pronóstico por horas (renderHourlyForecast)
Franja deslizable horizontal que muestra cada hora restante del día en curso, desde la hora actual hasta las 23:00. Cada celda incluye la hora, el icono del cielo, la temperatura y, si es mayor que
0, la probabilidad de precipitación.Mapeo de iconos
El métodogetWeatherIcon(code) traduce el código numérico de estado del cielo de el-tiempo.net a la clase CSS correspondiente de la librería Weather Icons. Algunos ejemplos representativos:
| Código | Clase CSS | Descripción |
|---|---|---|
11 | wi-day-sunny | Despejado (día) |
11n | wi-night-clear | Despejado (noche) |
14 | wi-cloudy | Nuboso |
21 | wi-fog | Niebla |
33 | wi-rain | Nuboso con lluvia |
35 | wi-thunderstorm | Cubierto con tormenta |
53 | wi-snow | Nieve |
wi-thermometer. Esta misma lógica aplica para el bloque de horas y para los días siguientes.
Ejemplo de uso
El siguiente fragmento reproduce exactamente la inicialización que aparece enhtml/dashboard/dashboard.script.php y puede reutilizarse en cualquier otra vista que incluya los mismos assets:
provincia y municipio por los códigos correspondientes de el-tiempo.net.
El widget requiere conexión a Internet en el momento de la carga de la página para contactar con
api.el-tiempo.net. Si la petición falla (servidor no disponible, código de estado HTTP distinto de 2xx o error de red), el método renderError() sustituye el spinner por un mensaje de alerta de Bootstrap con la descripción del error. No existe caché local ni mecanismo de reintento automático.