GitHub no solamente almacena codigo en sus Repos
Conecta Python con el mundo real usando APIs
Aprende a hablar con servicios externos desde tu c贸digo: qu茅 es una API, c贸mo funciona el protocolo HTTP y c贸mo extraer datos reales de GitHub con solo unas pocas l铆neas.
Conceptos clave
Antes de escribir una sola l铆nea de c贸digo, conviene tener claros estos cuatro t茅rminos. Los ver谩s mencionados en cada proyecto que consuma datos externos.
Application Programming Interface. Un contrato que define c贸mo dos programas pueden comunicarse entre s铆. Es el "men煤" de lo que un servicio te deja pedir.
El protocolo que usan los navegadores y tu c贸digo para enviar y recibir informaci贸n por internet. Toda API web habla HTTP.
JavaScript Object Notation. El formato de texto m谩s com煤n para intercambiar datos entre una API y tu programa. Python lo convierte en un diccionario autom谩ticamente.
La URL espec铆fica a la que le haces la petici贸n.
Cada endpoint representa un recurso distinto, por ejemplo
/repos/torvalds/linux.
C贸digos de estado HTTP
Cada vez que haces una petici贸n, el servidor te responde con un n煤mero de tres d铆gitos que resume qu茅 pas贸. Son el sem谩foro de las APIs.
| C贸digo | Nombre | Qu茅 significa |
|---|---|---|
| 200 | OK | Todo sali贸 bien. La respuesta incluye los datos que pediste. |
| 201 | Created | Se cre贸 un recurso nuevo con 茅xito. |
| 400 | Bad Request | Tu petici贸n tiene errores de formato o faltan par谩metros. |
| 401 | Unauthorized | No enviaste credenciales o son inv谩lidas. |
| 404 | Not Found | El recurso que pediste no existe en esa URL. |
| 500 | Server Error | El fallo es del lado del servidor, no de tu c贸digo. |
Tu primera petici贸n a la API de GitHub
La librer铆a requests hace todo el trabajo pesado. Instalaci贸n r谩pida desde tu terminal:
Con la librer铆a instalada, esta es la petici贸n m谩s b谩sica:
# 1. Haces la petici贸n al endpoint
r = requests.get( "https://api.github.com/repos/torvalds/linux" )
# 2. C贸digo de estado
print( f"Estado: {r.status_code}" )
# 3. Contenido JSON → diccionario Python
print( r.json() )
¿Qu茅 ocurre bajo el cap贸?
Cuando llamas a
requests.get(),
Python abre una conexi贸n con los servidores de GitHub,
env铆a una petici贸n HTTP GET y espera la respuesta.
El objeto r contiene el c贸digo de estado,
las cabeceras y el cuerpo con los datos.
Propiedades del objeto Response
El objeto que devuelve
requests.get()
tiene varios atributos y m茅todos 煤tiles:
| Propiedad / M茅todo | Tipo | Para qu茅 sirve |
|---|---|---|
r.status_code |
int | C贸digo num茅rico de la respuesta. |
r.json() |
dict / list | Convierte el cuerpo JSON a un objeto Python. |
r.text |
str | Cuerpo de la respuesta como texto. |
r.headers |
dict | Cabeceras HTTP que mand贸 el servidor. |
r.url |
str | URL final de la petici贸n. |
r.ok |
bool | True si el c贸digo es menor a 400. |
Ejemplo completo: reporte del repositorio de Linux
Este script extrae los campos m谩s interesantes y los muestra de forma organizada en tu terminal.
url = "https://api.github.com/repos/torvalds/linux"
try:
r = requests.get( url, timeout=10 )
r.raise_for_status()
datos = r.json()
print( "-" * 50 )
print( f"REPOSITORIO: {datos['full_name'].upper()}" )
print( "-" * 50 )
# Popularidad
print( f"⭐ Estrellas: {datos['stargazers_count']:,}" )
print( f"馃憗️ Observadores: {datos['subscribers_count']:,}" )
print( f"馃嵈 Forks: {datos['forks_count']:,}" )
print( f"馃悰 Issues abiertos: {datos['open_issues_count']:,}" )
# Detalles
descripcion = datos.get( "description" ) or "No disponible"
licencia = (
datos[ "license" ][ "name" ]
if datos.get( "license" )
else "No especificada"
)
sitio_web = datos.get( "homepage" ) or "No disponible"
print( f"馃摑 Descripci贸n: {descripcion}" )
print( f"⚖️ Licencia: {licencia}" )
print( f"馃寪 Sitio web: {sitio_web}" )
# Fechas
print( f"馃搮 Creado: {datos['created_at']}" )
print( f"馃攧 脷ltima push: {datos['pushed_at']}" )
print( "-" * 50 )
except requests.exceptions.HTTPError as e:
print( f"❌ Error HTTP: {e}" )
except requests.exceptions.ConnectionError:
print( "❌ No hay conexi贸n a Internet." )
except requests.exceptions.Timeout:
print( "❌ La petici贸n tard贸 demasiado." )
except requests.exceptions.RequestException as e:
print( f"❌ Error al realizar la petici贸n: {e}" )
Resultado en tu terminal
Explora qu茅 m谩s puedes pedir
La API de GitHub devuelve docenas de campos por repositorio. Para ver todas las claves disponibles puedes utilizar:
print( "\n馃搵 Claves disponibles:" )
for clave in sorted( datos.keys() ):
print( f" → {clave}" )
Algunos de los campos m谩s 煤tiles que encontrar谩s:
Resumen
Con tres l铆neas de Python puedes comenzar a hablar con pr谩cticamente cualquier API:
import requests
— la librer铆a que gestiona las conexiones HTTP por ti.
requests.get(url)
— env铆a la petici贸n y espera la respuesta.
r.json()
— convierte la respuesta en un diccionario Python.
Comentarios
Publicar un comentario