20. Clima
20. Clima con Python: Tutorial para Principiantes
☀️ Introducción: Tu asistente meteorológico personal
¡Imagina poder preguntarle a tu asistente cómo está el clima sin abrir tu teléfono! Vamos a enseñarle a tu asistente virtual a consultar el clima de cualquier ciudad. Es como tener un mini meteorólogo dentro de tu computadora.
¿Qué es una API?
API = Interfaz de Programación de Aplicaciones
Es como un "menú" que un sitio web ofrece para que otros programas puedan obtener información
Analoǵía: Un restaurante (sitio web) tiene un menú (API) que tú (tu programa) usas para pedir comida (información)
🌍 ¿Cómo funciona? Esquema visual
text
TU ASISTENTE → Pregunta "¿Cómo está el clima?"
↓
PYTHON → Usa la API de OpenWeather
↓
INTERNET → Consulta datos en tiempo real
↓
OPENWEATHER → Responde con datos del clima
↓
TU ASISTENTE → Dice: "Está soleado, 25°C"
🛠️ Lo que necesitaremos
1. Una cuenta en OpenWeatherMap
Es GRATIS para uso básico
Necesitamos una "API Key" (llave de acceso)
Es como una contraseña que identifica a tu programa
2. La librería requests
¡Ya viene con Python! No necesitas instalarla
Sirve para hacer peticiones a sitios web
Es como un "mensajero" que va y viene entre tu programa e internet
📋 Paso a paso detallado
Paso 1: Crear cuenta en OpenWeatherMap
Ve a openweathermap.org
Haz clic en "Sign Up" (Registrarse)
Completa el formulario
Confirma tu email
Es como abrir una cuenta en el banco:
Registrarte = Abrir cuenta
API Key = Tu tarjeta de débito
Consultar clima = Retirar dinero
Paso 2: Obtener tu API Key
Después de registrarte, ve a tu panel de control
Busca "API Keys" o "My API Keys"
Haz clic en "Generate" o "Create Key"
¡Guarda esta clave! Es tu contraseña única
⚠️ IMPORTANTE:
Nunca compartas tu API Key públicamente
Puede demorar unas horas en activarse
Si no funciona al inicio, espera un rato
Paso 3: Estructura de la URL de la API
La URL para consultar el clima tiene esta forma:
text
https://api.openweathermap.org/data/2.5/weather?q=CIUDAD&appid=TU_API_KEY&units=metric&lang=es
Partes importantes:
q=CIUDAD → Nombre de la ciudad
appid=TU_API_KEY → Tu clave de acceso
units=metric → Temperatura en Celsius
lang=es → Idioma español
✍️ Código completo explicado
Paso 1: Importar la librería
python
import requests # ← ¡Ya está incluida en Python!
¿Qué hace requests?
requests.get(URL) → Visita una página web
Devuelve la información que esa página muestra
Paso 2: Crear la función principal
python
def obtener_clima():
"""
Obtiene y dice el clima actual
"""
# 1. Configurar los datos
ciudad = "Santiago" # Puedes cambiar esta ciudad
api_key = "TU_API_KEY_AQUI" # ← ¡Pega tu clave aquí!
# 2. Construir la URL
url = f"https://api.openweathermap.org/data/2.5/weather?q={ciudad}&appid={api_key}&units=metric&lang=es"
# 3. Hacer la petición
respuesta = requests.get(url)
# 4. Convertir a formato JSON (fácil de leer)
datos = respuesta.json()
# 5. Extraer la información
temperatura = datos["main"]["temp"]
clima = datos["weather"][0]["description"]
# 6. Decir el resultado
hablar(f"La temperatura es de {temperatura} grados Celsius")
hablar(f"El clima está {clima}")
Paso 3: Entender la estructura de los datos
Cuando OpenWeather responde, envía datos en formato JSON:
python
# Ejemplo de lo que recibimos:
{
"main": {
"temp": 19.4, # Temperatura
"humidity": 65, # Humedad
"pressure": 1015 # Presión
},
"weather": [
{
"description": "cielo claro", # Descripción
"main": "Clear" # Resumen
}
],
"name": "Santiago" # Nombre de la ciudad
}
Para acceder a los datos:
datos["main"]["temp"] → Temperatura
datos["weather"][0]["description"] → Descripción del clima
Paso 4: Código completo mejorado
python
# ASISTENTE VIRTUAL - FUNCIÓN DEL CLIMA
import requests
import pyttsx3
# Configuración de voz
engine = pyttsx3.init()
def hablar(texto):
engine.say(texto)
engine.runAndWait()
def obtener_clima(ciudad="Santiago"):
"""
Obtiene el clima de una ciudad específica
Args:
ciudad (str): Nombre de la ciudad (por defecto: Santiago)
Returns:
str: Descripción del clima o mensaje de error
"""
# TU API KEY - ¡REMPLAZA ESTO!
api_key = "TU_API_KEY_AQUI" # Ejemplo: "a1b2c3d4e5f6g7h8i9j0"
# Verificar que tengamos API Key
if api_key == "TU_API_KEY_AQUI":
hablar("Primero configura tu API Key de OpenWeather")
return "API Key no configurada"
# Construir la URL
url = f"https://api.openweathermap.org/data/2.5/weather?q={ciudad}&appid={api_key}&units=metric&lang=es"
try:
# Hacer la petición
respuesta = requests.get(url)
# Verificar si la ciudad existe
if respuesta.status_code == 404:
hablar(f"No encontré la ciudad {ciudad}")
return f"Ciudad {ciudad} no encontrada"
# Verificar si hay error de API Key
if respuesta.status_code == 401:
hablar("Error con la API Key. Verifica que sea correcta")
return "Error de autenticación"
# Convertir respuesta a JSON
datos = respuesta.json()
# Extraer información
temperatura = datos["main"]["temp"]
clima = datos["weather"][0]["description"]
humedad = datos["main"]["humidity"]
ciudad_nombre = datos["name"]
# Preparar mensaje
mensaje = f"En {ciudad_nombre} hay {temperatura:.1f} grados. El clima está {clima}. Humedad: {humedad}%."
# Decir el mensaje
hablar(mensaje)
# También imprimirlo
print(f"🌤️ Clima en {ciudad_nombre}:")
print(f" Temperatura: {temperatura:.1f}°C")
print(f" Condición: {clima}")
print(f" Humedad: {humedad}%")
return mensaje
except Exception as e:
error_msg = f"Error al obtener clima: {e}"
hablar("No pude obtener el clima en este momento")
print(error_msg)
return error_msg
def clima_inteligente(comando):
"""
Versión inteligente que extrae la ciudad del comando
"""
# Lista de palabras clave para clima
palabras_clima = ["clima", "temperatura", "tiempo", "calor", "frío"]
# Extraer ciudad del comando
comando_lower = comando.lower()
# Opción 1: Clima por defecto (sin ciudad especificada)
if "clima" in comando_lower and len(comando_lower.split()) <= 3:
hablar("Consultando el clima actual...")
return obtener_clima() # Ciudad por defecto
# Opción 2: Con ciudad específica
# Ejemplo: "clima en Madrid" o "temperatura en Buenos Aires"
for palabra in palabras_clima:
if palabra in comando_lower:
# Extraer lo que viene después de "en"
if " en " in comando_lower:
partes = comando_lower.split(" en ")
if len(partes) > 1:
ciudad = partes[1].strip()
hablar(f"Consultando el clima en {ciudad}...")
return obtener_clima(ciudad)
# Opción 3: Preguntar por ciudad
hablar("¿De qué ciudad quieres saber el clima?")
# Aquí podrías agregar código para escuchar la respuesta
return "Ciudad no especificada"
# Función principal del asistente
def asistente_principal():
hablar("Asistente meteorológico activado")
while True:
# Suponiendo que tienes función para escuchar
comando = escuchar().lower()
if not comando:
continue
# Detectar comandos de clima
if any(palabra in comando for palabra in
["clima", "temperatura", "tiempo", "hace calor", "hace frío"]):
# Decir algo mientras procesa
hablar("Consultando información meteorológica...")
# Obtener clima
clima_inteligente(comando)
elif 'salir' in comando:
hablar("Hasta luego. ¡Que tengas buen día!")
break
# Diagrama visual del proceso:
"""
🎤 TÚ: "¿Cómo está el clima en Madrid?"
↓
🤖 ASISTENTE: Detecta "clima" y "Madrid"
↓
🔗 REQUESTS: Visita OpenWeather con la ciudad
↓
🌍 API: Responde con datos JSON
↓
📊 PROCESO: Extrae temperatura=22.5, clima="soleado"
↓
🔊 ASISTENTE: "En Madrid hay 22.5 grados. El clima está soleado"
↓
👂 TÚ: "¡Perfecto para salir!"
"""
🎯 Ejemplos de comandos que funcionan
🚨 Solución de problemas comunes
Problema 1: API Key no funciona
python
# Síntoma: Error 401
# Solución:
# 1. Espera 2-3 horas después de crear la cuenta
# 2. Verifica que copiaste toda la clave
# 3. Asegúrate de no tener espacios
Problema 2: Ciudad no encontrada
python
# Síntoma: Error 404
# Solución:
# 1. Escribe el nombre en inglés: "Madrid" no "Madrí"
# 2. Usa el formato: "Ciudad,País" → "London,UK"
# 3. Verifica ortografía
Problema 3: Temperatura en Kelvin (muy alta)
python
# Síntoma: Dice "290 grados"
# Solución: Agrega &units=metric a la URL
# Esto convierte a Celsius automáticamente
✨ Mejoras opcionales para tu código
1. Clima extendido:
python
def clima_extendido(ciudad):
# Incluye más información
datos = respuesta.json()
viento = datos["wind"]["speed"] # Velocidad del viento
presion = datos["main"]["pressure"] # Presión atmosférica
amanecer = datos["sys"]["sunrise"] # Hora del amanecer
mensaje = f"""Viento: {viento} km/h
Presión: {presion} hPa
Amanece a las {amanecer}"""
2. Multiples ciudades:
python
ciudades_favoritas = {
"casa": "Santiago",
"trabajo": "Madrid",
"playa": "Barcelona"
}
if "clima en casa" in comando:
obtener_clima(ciudades_favoritas["casa"])
3. Pronóstico:
python
# Para pronóstico de 5 días (necesita API Key pro)
url_pronostico = f"https://api.openweathermap.org/data/2.5/forecast?q={ciudad}&appid={api_key}"
📊 Resumen de parámetros de la URL
✅ Resumen clave
OpenWeatherMap = Servicio gratuito de clima
API Key = Tu llave de acceso única (¡guárdala!)
requests.get() = Obtiene datos de internet
.json() = Convierte respuesta a diccionario Python
&units=metric&lang=es = Celsius en español
📝 Cuestionario de repaso
Pregunta 1
¿Qué es una API Key?
a) Una contraseña para tu email
b) Un código que identifica tu programa ante un servicio
c) La temperatura en grados
d) Un tipo de variable en Python
Pregunta 2
¿Qué librería usamos para obtener datos de internet?
a) pyjokes
b) requests
c) weather
d) internet
Pregunta 3
¿Qué agregamos a la URL para obtener la temperatura en Celsius?
a) &celsius=true
b) &units=metric
c) &temp=c
d) &grados=celsius
Pregunta 4
Si OpenWeather responde con error 404, ¿qué significa?
a) API Key incorrecta
b) Ciudad no encontrada
c) Internet desconectado
d) Demasiadas consultas
Pregunta 5
¿Cómo accedemos a la descripción del clima en los datos JSON?
a) datos["weather"]["description"]
b) datos["clima"]
c) datos["weather"][0]["description"]
d) datos.tiempo.descripcion
Respuestas del cuestionario
b) Un código que identifica tu programa ante un servicio - Es como tu DNI para la API
b) requests - Viene incluida en Python, no necesita instalación
b) &units=metric - "metric" = sistema métrico (Celsius)
b) Ciudad no encontrada - Error 404 significa "no encontrado"
c) datos["weather"][0]["description"] - "weather" es una lista, por eso usamos [0]
🌦️ Reto final: Personaliza tu asistente climático
Desafío 1: Agrega recomendaciones
python
if temperatura > 30:
hablar("Hace mucho calor, lleva agua y protector solar")
elif temperatura < 10:
hablar("Hace frío, abrígate bien")
Desafío 2: Guarda historial
python
import datetime
historial = []
def guardar_clima(ciudad, temperatura):
fecha = datetime.datetime.now()
historial.append({
"fecha": fecha,
"ciudad": ciudad,
"temp": temperatura
})
Desafío 3: Compara ciudades
python
def comparar_climas(ciudad1, ciudad2):
temp1 = obtener_clima(ciudad1)
temp2 = obtener_clima(ciudad2)
hablar(f"{ciudad1} tiene {temp1}° y {ciudad2} tiene {temp2}°")
🎉 ¡Felicidades!
Ahora tu asistente puede:
✅ Consultar el clima en tiempo real
✅ Hablar en español
✅ Dar temperaturas en Celsius
✅ Trabajar con múltiples ciudades
Próximo paso: Agregar pronóstico del tiempo, alertas de lluvia, o integrar con tu calendario para sugerir ropa según el clima.
https://www.youtube.com/watch?v=Pj9KbAKpQyk
https://www.youtube.com/watch?v=-0tIy8wWtzE
https://www.youtube.com/watch?v=YqSSId7xfwU
https://www.youtube.com/watch?v=MjK-j7YJ5YI
https://www.youtube.com/watch?v=l2G8-iQYfoA
https://www.youtube.com/watch?v=t-YO0XeHczU
Comentarios
Publicar un comentario