66 lines
2.0 KiB
Python
66 lines
2.0 KiB
Python
import os
|
||
import requests
|
||
import logging
|
||
|
||
# Configurar el logger principal
|
||
logging.basicConfig(
|
||
level=logging.INFO,
|
||
format="%(asctime)s [%(levelname)s] %(message)s"
|
||
)
|
||
|
||
API_KEY = os.getenv("WEATHER_API_KEY")
|
||
BASE_URL = "http://api.openweathermap.org/data/2.5/weather"
|
||
|
||
def fetch_weather(city):
|
||
"""Obtiene el clima de una ciudad desde OpenWeather."""
|
||
if not API_KEY:
|
||
logging.error("[WEATHER] No se encontró WEATHER_API_KEY en el entorno.")
|
||
return "Error: La API Key no está configurada."
|
||
|
||
params = {
|
||
"q": city,
|
||
"appid": API_KEY,
|
||
"units": "metric", # °C
|
||
"lang": "es"
|
||
}
|
||
|
||
try:
|
||
response = requests.get(BASE_URL, params=params, timeout=10)
|
||
data = response.json()
|
||
|
||
if response.status_code == 200 and "main" in data:
|
||
temp = data["main"].get("temp", "N/A")
|
||
desc = data["weather"][0].get("description", "N/A").capitalize()
|
||
humidity = data["main"].get("humidity", "N/A")
|
||
wind_speed = data["wind"].get("speed", "N/A")
|
||
|
||
return (
|
||
f"️ Clima en {city}: {temp}°C, {desc}\n"
|
||
f" Humedad: {humidity}%\n"
|
||
f" Viento: {wind_speed} m/s"
|
||
)
|
||
|
||
elif response.status_code == 404:
|
||
logging.warning(f"[WEATHER] Ciudad no encontrada: {city}")
|
||
return f"No se encontró información del clima para '{city}'."
|
||
|
||
else:
|
||
logging.error(f"[WEATHER] Error en la API. Código: {response.status_code}, data: {data}")
|
||
return "Error al obtener los datos del clima."
|
||
|
||
except requests.exceptions.RequestException as e:
|
||
logging.exception("[WEATHER] Error conectando con OpenWeather.")
|
||
return f"Error al conectar con OpenWeather: {e}"
|
||
|
||
def run(sender, *args):
|
||
if not args:
|
||
return help()
|
||
|
||
ciudad = " ".join(args)
|
||
return fetch_weather(ciudad)
|
||
|
||
def help():
|
||
return """.weather <ciudad> - Muestra el clima actual.
|
||
Ejemplo: .weather Madrid"""
|
||
|