Misión 3 · Lección 9

Consumo de APIs Externas en Flask

Objetivos

Librerías para consumo de APIs

pip install requests

Petición GET

import requests

@app.route("/clima")
def clima():
    r = requests.get("https://api.weatherapi.com/v1/current.json",
                     params={"key": "API_KEY", "q": "Bogotá"})
    data = r.json()
    return f"Temperatura: {data['current']['temp_c']}°C"

Petición POST

r = requests.post("https://jsonplaceholder.typicode.com/posts",
                  json={"title": "nuevo", "body": "contenido"})
print(r.json())

Mostrar datos en un template

@app.route("/usuarios")
def usuarios():
    r = requests.get("https://jsonplaceholder.typicode.com/users")
    data = r.json()
    return render_template("usuarios.html", usuarios=data)
<ul>
{% for u in usuarios %}
  <li>{{ u["name"] }} - {{ u["email"] }}</li>
{% endfor %}
</ul>

Manejo de Errores

try:
    r = requests.get("https://api.invalida.com/data", timeout=5)
    r.raise_for_status()
except requests.exceptions.RequestException as e:
    print("Error:", e)

Buenas Prácticas

Ejemplo completo

@app.route("/pokemon/<nombre>")
def pokemon(nombre):
    url = f"https://pokeapi.co/api/v2/pokemon/{nombre}"
    r = requests.get(url)
    data = r.json()
    return render_template("pokemon.html", poke=data)

Extensiones útiles

Ejercicio Guiado

  1. Instala la librería requests.
  2. Crea una ruta que consulte usuarios de jsonplaceholder.typicode.com.
  3. Muestra los datos en un template HTML.
  4. Agrega manejo de errores si la API no responde.