Este proyecto es una API sencilla para almacenar lecturas de clima (temperature, humidity, etc.) usando la API de OpenWeather.
- PHP 8.1+ (o la versión compatible con tu proyecto)
- Composer
- MySQL (o cualquier DB compatible configurada en
.env) - Node.js + npm (opcional para assets)
- Clona el repo y entra en la carpeta:
git clone <repo-url>
cd weather-api- Instala dependencias PHP:
composer install- Copia el archivo de configuración de entorno y actualiza variables:
cp .env.example .envEdita .env y configura al menos:
DB_DATABASE,DB_USERNAME,DB_PASSWORD(tu conexión a MySQL)APP_URL(ej.: http://127.0.0.1:8000)OPENWEATHER_API_KEY(opcional: se usará una clave por defecto como fallback, pero es mejor configurarla aquí)
- Genera la APP KEY:
php artisan key:generate- Ejecuta migraciones para crear tablas (incluida
weathers):
php artisan migrate- (Opcional) Instala dependencias JS y compila si vas a usar assets:
npm install
npm run build- Inicia el servidor local:
php artisan servePor defecto escuchará en: http://127.0.0.1:8000.
GET /status— comprueba que la API está arriba (devuelve un JSON simple)GET /weather— devuelve todos los registros almacenaros en la DB, ordenados porcreated_atdescendenteGET /weather/fetch— obtiene datos actuales de OpenWeather y los almacena en la tablaweathers
Parámetros para /weather/fetch:
- Puedes usar
?city_name=Manizales&country_code=copara enviar separado el nombre de ciudad y el código del país. - O bien usar
?q=Manizales,co(estilo OpenWeather) — si no pasas parámetros se usaráManizales,copor defecto.
Guardar clima para Manizales, Colombia:
curl "http://127.0.0.1:8000/weather/fetch?city_name=Manizales&country_code=co"Usar q:
curl "http://127.0.0.1:8000/weather/fetch?q=Manizales,co"Obtener todas las lecturas almacenadas:
curl "http://127.0.0.1:8000/weather"- Crea una nueva colección (o request) en Postman/Apidog.
- Para
fetch:- Método: GET
- URL:
http://127.0.0.1:8000/weather/fetch - Query params:
city_name:Manizalescountry_code:co
- Envia la request; deberías recibir el JSON del registro creado con estado 201.
- Para listar registros:
- Método: GET
- URL:
http://127.0.0.1:8000/weather - Devuelve un array JSON con los últimos registros.
{
"id": 1,
"city": "Manizales",
"country": "CO",
"temperature": 14.2,
"humidity": 75,
"pressure": 1012,
"condition": "clear sky",
"visibility": 10000,
"collected_at": "2025-11-15T18:00:00Z",
"created_at": "2025-11-15T18:01:00Z",
"updated_at": "2025-11-15T18:01:00Z"
}- Si ves un error de tabla
Base table or view not found: 1146 Table 'weather.weather' doesn't existal consultar/weather— puede ser por una inconsistencia de nombre de tabla (Eloquent intentó usarweatheren singular). Asegúrate de:- Ejecuar
php artisan migratepara crear la tablaweathers. - En el
Weathermodel está declaradoprotected $table = 'weathers';(si prefieresweathersingular, adapta la migración o el modelo).
- Ejecuar
- Asegúrate de configurar la conexión DB en
.env. - Si no aparece
OPENWEATHER_API_KEY, la aplicación usa una clave por defecto como fallback, pero es recomendable configurar tu propia clave:- Consigue una API Key desde https://openweathermap.org
- Añádela a
.env:
OPENWEATHER_API_KEY=tu_clave_aqui
(RoadMap.sh link)[https://roadmap.sh/projects/weather-api-wrapper-service]