Integración de Python con News API usando parámetros dinámicos
Clase 9 de 25 • Curso de Python: Entornos virtuales, PEP8 y Manejo de Errores
Resumen
Conecta Python a News API de forma segura y clara: usa parámetros dinámicos, construye un query string fiable con las utilidades estándar de Python y procesa la respuesta en json sin perder tiempo en errores típicos. Aquí verás cómo incorporar tu API key, realizar un request robusto con urllib y convertir los bytes en un diccionario listo para usar.
¿Cómo obtener y proteger tu API key de News API?
Obtener la API key es el primer paso. Se solicita en newsapi.org completando un formulario y pulsando submit. Cópiala y úsala por ahora como constante en el código.
- No hacerla pública ni subirla al repositorio.
- Tratarla como una llave de acceso.
- Guardarla temporalmente como constante para fines educativos.
La documentación oficial (Get Started, Searching for news articles) indica la URL base y que la API key se pasa como parámetro. Esa guía define el formato correcto del request.
¿Cómo construir la URL y el query string en Python?
La recomendación es evitar concatenar cadenas a mano. Usa las herramientas de Python: urllib.parse.urlencode para formatear parámetros y urllib.request para abrir la URL con un timeout controlado. Así la URL final es válida y el servidor entiende el GET.
- Usar urllib.parse para generar el query string.
- Añadir parámetros como la q de búsqueda y la apiKey.
- Construir la URL final uniendo base y parámetros.
¿Qué hace urllib.parse.urlencode?
Convierte un diccionario de parámetros en un query string seguro para una URL. Evita errores de encoding y respeta el formato esperado por la API.
import json
from urllib import parse, request
API_KEY = "TU_API_KEY"
BASE_URL = "BASE_URL_DE_NEWS_API" # URL base indicada en la documentación de búsqueda.
def fetch_news(api_key: str, query: str, timeout: int = 10):
params = {
"q": query,
"apiKey": api_key,
}
query_string = parse.urlencode(params)
url = f"{BASE_URL}?{query_string}"
# Enviar el request con administrador de contexto.
with request.urlopen(url, timeout=timeout) as resp:
data_bytes = resp.read() # Respuesta cruda en bytes.
# Decodificar y parsear json.
data_text = data_bytes.decode("utf-8")
data = json.loads(data_text)
return data
¿Cómo enviar el request con urllib.request y with?
Con el administrador de contexto with se maneja el response y se lee el contenido con seguridad. El timeout evita esperas indefinidas.
- Abrir la URL con
request.urlopen
y pasar timeout. - Leer los bytes con
.read()
. - Mantener el código claro y cercano a la función de fetch.
¿Cómo decodificar la respuesta y procesar artículos en json?
La respuesta llega como bytes. Hay que aplicar decode('utf-8') y luego json.loads para obtener un diccionario. Desde ahí, acceder a llaves como status
, totalResults
y especialmente articles
para listar títulos.
- Decodificar a texto con UTF-8.
- Convertir a diccionario con json.loads.
- Inspeccionar llaves con
keys()
para entender la estructura. - Iterar
articles
y mostrartitle
.
# Ejecución de prueba
response_data = fetch_news(API_KEY, "Python")
print(list(response_data.keys())) # Ver llaves disponibles.
articles = response_data["articles"] # Acceso a la lista de artículos.
for article in articles:
print(article["title"]) # Imprimir solo el título.
Consejos prácticos que marcan diferencia:
- Imprimir solo los primeros caracteres al inicio para validar el formato.
- Mostrar el query string y la URL final para depurar.
- Usar herramientas estándar de Python en lugar de armar URLs a mano.
- Limpiar prints una vez que el flujo funcione.
¿Quieres profundizar o adaptar filtros de búsqueda? Explora la documentación de la API y comenta qué parámetros te gustaría incorporar a la función.