Servicio de Información Meteorologica
📘 Introducción
Descripción
Este proyecto es una API de Clima Local implementada con Laravel 12, que ofrece un servicio RESTful para obtener información climática basada en coordenadas geográficas.
A diferencia de las soluciones que dependen de APIs externas, esta API consulta directamente una base de datos local que contiene registros históricos y precargados de datos climáticos.
La carga de datos en la base de datos se realiza mediante un proceso automatizado con N8N, el cual consulta periódicamente la API de CONAGUA y persiste la información localmente. La aplicación sigue principios de diseño limpio, utilizando Laravel Actions para la encapsulación de la lógica de negocio y Laravel API Resources para una transformación y presentación de datos consistente y limpia.
Objetivo
Proveer un servicio confiable y eficiente para la consulta de información climática basada en coordenadas geográficas, a través de una API RESTful construida con Laravel 12. Esta solución permite acceder a datos meteorológicos históricos y actualizados sin depender de fuentes externas, gracias a una base de datos local alimentada automáticamente desde la API de CONAGUA mediante N8N. El sistema garantiza respuestas consistentes y estructuradas, siguiendo principios de diseño limpio que facilitan su mantenimiento, escalabilidad e integración con otras aplicaciones o servicios institucionales.
Características Principales
- Obtención de datos climáticos actuales desde una base de datos local.
- Organización de la lógica de negocio mediante Actions.
- Serialización de respuestas API limpia y consistente con API Resources.
Tecnologías Utilizadas
- Laravel 12: Framework de PHP para el desarrollo web.
- PHP 8.2+.
- Composer: Gestor de dependencias de PHP.
- MySQL: Base de datos (configurada en
.env). - Carbon: Para el manejo de fechas y horas.
🔐 Autenticación
Actualmente, el servicio se encuentra accesible de forma abierta, sin requerimientos de autenticación, con el objetivo de facilitar su integración temprana y evaluación funcional.
No obstante, se contempla la implementación de un mecanismo de autenticación robusto en fases posteriores, orientado a controlar el acceso, registrar el consumo por usuario o sistema, y garantizar la seguridad de la información. Este mecanismo podría incluir autenticación mediante tokens (API Keys o JWT), adaptándose a las necesidades del entorno donde se integre el servicio.
🌐 Servicios Web
Entornos
La API de Clima Local está disponible en los siguientes entornos:
| Ambiente | URL |
|---|---|
| Pruebas | https://test-aplicaciones.tamaulipas.gob.mx/srv-clima/ |
| Producción | No disponible actualmente |
Endpoints de la API
Todos los endpoints están disponibles bajo el prefijo:/api/v1/
Enpoints disponibles
| Método | Endpoint | Descripción |
|---|---|---|
| GET | /api/v1/clima-actual |
Consulta el clima actual por coordenadas geográficas. |
| GET | /api/v1/clima-pronostico |
Consulta el pronóstico del clima para los próximos días. |
| GET | /api/v1/clima-pronostico/municipios |
Consulta el pronóstico del clima para los próximos días por municipios. |
📡 GET /api/v1/clima-actual
Descripción
Consulta el clima actual en función de las coordenadas geográficas proporcionadas. Utiliza los datos más recientes disponibles en la base de datos local.
Parámetros esperados (query string)
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
latitud |
float | Sí | Latitud en formato decimal. |
longitud |
float | Sí | Longitud en formato decimal. |
Ejemplo de petición
Ejemplo de respuesta exitosa (200 OK)
{
"error": false,
"status": 200,
"message": "Clima actual obtenido correctamente.",
"data": {
"id_estado": 28,
"id_municipio": 41,
"nombre_estado": "Tamaulipas",
"nombre_municipio": "Victoria",
"dia_local": "2025-06-24 00:00:00",
"numero_dia": 0,
"temperatura_maxima_c": "31.70",
"temperatura_minima_c": "18.90",
"descripcion_cielo": "Poco nuboso",
"probabilidad_precipitacion_porcentaje": 50,
"precipitacion_litros_m2": "14.70",
"velocidad_viento_kmh": "10.60",
"direccion_viento_cardinal": "Sureste",
"direccion_viento_grados": "135.00",
"cobertura_nubes_porcentaje": "7.75",
"latitud": "23.731100",
"longitud": "-99.151300",
"diferencia_utc": 6
},
"metadata": {
"Organization": "Agencia de Innovación e Inteligencia Digital de Tamaulipas",
"Department": "Departamento de Desarrollo de Soluciones Informáticas"
}
}
🌦️ GET /api/v1/clima-pronostico
Descripción
Devuelve el pronóstico del clima para los próximos días en la ubicación indicada. La información se obtiene de registros meteorológicos precargados en una base de datos local.
Parámetros esperados (query string)
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
latitud |
float | Sí | Latitud en formato decimal. |
longitud |
float | Sí | Longitud en formato decimal. |
Ejemplo de petición
Ejemplo de respuesta exitosa (200 OK)
{
"error": false,
"status": 200,
"message": "Clima obtenido correctamente.",
"data": [
{
"id_estado": 28,
"id_municipio": 41,
"nombre_estado": "Tamaulipas",
"nombre_municipio": "Victoria",
"dia_local": "2025-06-24 00:00:00",
"numero_dia": 0,
"temperatura_maxima_c": "31.70",
"temperatura_minima_c": "18.90",
"descripcion_cielo": "Poco nuboso",
"probabilidad_precipitacion_porcentaje": 50,
"precipitacion_litros_m2": "14.70",
"velocidad_viento_kmh": "10.60",
"direccion_viento_cardinal": "Sureste",
"direccion_viento_grados": "135.00",
"cobertura_nubes_porcentaje": "7.75",
"latitud": "23.731100",
"longitud": "-99.151300",
"diferencia_utc": 6
},
{
"id_estado": 28,
"id_municipio": 41,
"nombre_estado": "Tamaulipas",
"nombre_municipio": "Victoria",
"dia_local": "2025-06-25 00:00:00",
"numero_dia": 1,
"temperatura_maxima_c": "31.60",
"temperatura_minima_c": "19.30",
"descripcion_cielo": "Medio nublado",
"probabilidad_precipitacion_porcentaje": 0,
"precipitacion_litros_m2": "0.90",
"velocidad_viento_kmh": "11.60",
"direccion_viento_cardinal": "Sur",
"direccion_viento_grados": "180.00",
"cobertura_nubes_porcentaje": "63.76",
"latitud": "23.731100",
"longitud": "-99.151300",
"diferencia_utc": 6
},
{
"id_estado": 28,
"id_municipio": 41,
"nombre_estado": "Tamaulipas",
"nombre_municipio": "Victoria",
"dia_local": "2025-06-26 00:00:00",
"numero_dia": 2,
"temperatura_maxima_c": "31.10",
"temperatura_minima_c": "19.20",
"descripcion_cielo": "Medio nublado",
"probabilidad_precipitacion_porcentaje": 10,
"precipitacion_litros_m2": "1.60",
"velocidad_viento_kmh": "8.80",
"direccion_viento_cardinal": "Sureste",
"direccion_viento_grados": "135.00",
"cobertura_nubes_porcentaje": "60.21",
"latitud": "23.731100",
"longitud": "-99.151300",
"diferencia_utc": 6
},
{
"id_estado": 28,
"id_municipio": 41,
"nombre_estado": "Tamaulipas",
"nombre_municipio": "Victoria",
"dia_local": "2025-06-27 00:00:00",
"numero_dia": 3,
"temperatura_maxima_c": "31.80",
"temperatura_minima_c": "19.00",
"descripcion_cielo": "Cielo nublado",
"probabilidad_precipitacion_porcentaje": 10,
"precipitacion_litros_m2": "1.40",
"velocidad_viento_kmh": "9.60",
"direccion_viento_cardinal": "Sureste",
"direccion_viento_grados": "135.00",
"cobertura_nubes_porcentaje": "32.28",
"latitud": "23.731100",
"longitud": "-99.151300",
"diferencia_utc": 6
}
],
"metadata": {
"Organization": "Agencia de Innovación e Inteligencia Digital de Tamaulipas",
"Department": "Departamento de Desarrollo de Soluciones Informáticas"
}
}
🏘️ GET /api/v1/clima-pronostico/municipios
Descripción
Devuelve el pronóstico del clima para los próximos días de una lista de municipios específicos. La información se obtiene de registros meteorológicos precargados en una base de datos local.
Parámetros esperados (query string)
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
| municipios | string (comma-separated) or array | Sí | Lista de IDs de municipios (e.g., 41,20). |
Ejemplo de petición
GET /api/v1/clima-pronostico/municipios?municipios=42,41
Ejemplo de respuesta exitosa (200 OK)
{
"error": false,
"status": 200,
"message": "Clima por municipios obtenido correctamente.",
"data": {
"41": {
"nombre_municipio": "Victoria",
"nombre_estado": "Tamaulipas",
"latitud": 23.7311,
"longitud": -99.1513,
"pronostico": [
{
"dia_local": "2025-06-24",
"numero_dia": 0,
"temperatura_maxima_c": 31.7,
"temperatura_minima_c": 18.9,
"descripcion_cielo": "Poco nuboso",
"probabilidad_precipitacion_porcentaje": 50,
"precipitacion_litros_m2": 14.7,
"velocidad_viento_kmh": 10.6,
"direccion_viento_cardinal": "Sureste",
"direccion_viento_grados": "135.0",
"cobertura_nubes_porcentaje": "7.75",
"latitud": 23.7311,
"longitud": -99.1513,
"diferencia_utc": "6"
}
]
},
"42": {
"nombre_municipio": "Villagrán",
"nombre_estado": "Tamaulipas",
"latitud": 24.4732,
"longitud": -99.4881,
"pronostico": [
{
"dia_local": "2025-06-24",
"numero_dia": 0,
"temperatura_maxima_c": 34.3,
"temperatura_minima_c": 19.9,
"descripcion_cielo": "Despejado",
"probabilidad_precipitacion_porcentaje": 90,
"precipitacion_litros_m2": 6.4,
"velocidad_viento_kmh": 14.2,
"direccion_viento_cardinal": "Sureste",
"direccion_viento_grados": "135.0",
"cobertura_nubes_porcentaje": "5.61",
"latitud": 24.4732,
"longitud": -99.4881,
"diferencia_utc": "6"
}
]
}
},
"metadata": {
"Organization": "Agencia de Innovación e Inteligencia Digital de Tamaulipas",
"Department": "Departamento de Desarrollo de Soluciones Informáticas"
}
}
🧬 Tipos de datos
📌 ClimaActualResponse
Ambos endpoints (/api/v1/clima-actual y /api/v1/clima-pronostico) utilizan la misma estructura de datos para representar la información climática de un día determinado. La diferencia radica en la cantidad de registros: el primero devuelve un solo objeto (data), mientras que el segundo entrega un arreglo de objetos bajo data[], representando varios días consecutivos.
| Campo | Tipo | Fuente (CONAGUA) | Descripción |
|---|---|---|---|
id_estado |
int |
ides |
ID del estado. |
id_municipio |
int |
idmun |
ID del municipio. |
nombre_estado |
string |
nes |
Nombre del estado. |
nombre_municipio |
string |
nmun |
Nombre del municipio. |
dia_local |
string |
dloc |
Fecha y hora local en formato YYYY-MM-DD HH:MM:SS. |
numero_dia |
int |
ndia |
Número del día dentro del conjunto pronosticado (0 = hoy). |
temperatura_maxima_c |
string |
tmax |
Temperatura máxima esperada en °C. |
temperatura_minima_c |
string |
tmin |
Temperatura mínima esperada en °C. |
descripcion_cielo |
string |
desciel |
Descripción del cielo (Ej. "Poco nuboso"). |
probabilidad_precipitacion_porcentaje |
int |
probprec |
Porcentaje de probabilidad de precipitación. |
precipitacion_litros_m2 |
string |
prec |
Precipitación estimada en litros por metro cuadrado. |
velocidad_viento_kmh |
string |
velvien |
Velocidad del viento en km/h. |
direccion_viento_cardinal |
string |
dirvienc |
Dirección cardinal del viento (Ej. "N", "SE", "Oeste"). |
direccion_viento_grados |
string |
dirvieng |
Dirección del viento en grados (0–360). |
cobertura_nubes_porcentaje |
string |
cc |
Porcentaje estimado de cobertura nubosa. |
latitud |
string |
lat |
Latitud de la ubicación consultada. |
longitud |
string |
lon |
Longitud de la ubicación consultada. |
diferencia_utc |
int |
dh |
Diferencia horaria respecto a UTC (Ej. 6 para UTC-6). |
🔗 Referencias y Fuentes de Datos
La información climática proviene directamente de la API oficial de CONAGUA. Para consultar la documentación oficial y obtener mayor información técnica sobre los datos y servicios disponibles, visite: