Consumir Apis

← Condicionales Crud Python - Sqlite →
Tabla de contenido 馃搫

Instalar Request

Antes que todo, debemos instalar la biblioteca requests, entonces procedemos con la instalaci贸n usando pip:

1
pip install requests

Haciendo solicitudes

Para comenzar, usaremos el la biblioteca que acabamos de instalar para enviar una solicitud al sitio JSONPlaceholder que es un servicio gratis para consumir una API REST. Para ello creamos un script llamado script.py y a帽adimos las siguiente lineas:

script.py
1
2
3
4
5
import requests

respuesta = requests.get("https://enidev911.github.io/fullstack-python/")

print(respuesta)

Si ahora ejecutamos nuestro script:

1
python script.py

C贸digos de estado

Lo primero que podemos hacer es verificar el c贸digo de estado. Los c贸digos de estados HTTP van desde 1XX a 5XX. Los c贸digos de estados frecuentes que probablemente veamos son 200, 404, 500.

A continuaci贸n, veamos el significado de los c贸digos de estados seg煤n su denominaci贸n:

  • 1XX: informaci贸n
  • 2XX: 茅xito
  • 3XX: redireccionamiento
  • 4XX: error del cliente
  • 5XX: error del servidor

Encabezados

Otro elemento que podemos obtener de la respuesta son los encabezados. Podemos acceder a trav茅s de un diccionaro Python que se encuentra en la propiedad headers del objeto de respuesta:

1
2
print(respuesta.headers) # {'Date': 'Wed, 01 May 2024 13:37:15 GMT', 'Content-Type': 'application/json; charset=utf-8', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'Report-To': '{"group":"heroku-nel","max_age":3600,"endpoints":[{"url":"https://nel.heroku.com/reports?ts=1714495292&sid=e11707d5-02a7-43ef-b45e-2cf4d2036f7d&s=%2FCC1PKoKy0QWpcf2ZYFyAFxs6vdiUDXoaLAFUSb9Rak%3D"}]}', 'Reporting-Endpoints': 'heroku-nel=https://nel.heroku.com/reports?ts=1714495292&sid=e11707d5-02a7-43ef-b45e-2cf4d2036f7d&s=%2FCC1PKoKy0QWpcf2ZYFyAFxs6vdiUDXoaLAFUSb9Rak%3D', 'Nel': '{"report_to":"heroku-nel","max_age":3600,"success_fraction":0.005,"failure_fraction":0.05,"response_headers":["Via"]}', 'X-Powered-By': 'Express', 'X-Ratelimit-Limit': '1000', 'X-Ratelimit-Remaining': '999', 'X-Ratelimit-Reset': '1714495323', 'Vary': 'Origin, Accept-Encoding', 'Access-Control-Allow-Credentials': 'true', 'Cache-Control': 'max-age=43200', 'Pragma': 'no-cache', 'Expires': '-1', 'X-Content-Type-Options': 'nosniff', 'Etag': 'W/"6b80-Ybsq/K6GwwqrYkAsFxqDXGC7DoM"', 'Content-Encoding': 'gzip', 'Via': '1.1 vegur', 'CF-Cache-Status': 'HIT', 'Age': '4386', 'Server': 'cloudflare', 'CF-RAY': '87d02a4a4f921e7c-EZE', 'alt-svc': 'h3=":443"; ma=86400'}
print(respuesta.headers["Content-Type"]) # application/json; charset=utf-8

En muchas ocasiones, quiz谩s no necesitemos usar la informaci贸n de encabezado directamente, pero se encuentra all铆 si se requiere.

Transformando a JSON

Ahora si sabemos que application/json es el tipo de contenido de la respuesta, podemos hacer que Requests convierta la respuesta en un diccionario y una lista para que podamos acceder a los datos con mayor facilidad.

Para ello necesitamos que los datos se analicen como JSON, y eso lo logramos usando el m茅todo .json() en el objeto de respuesta.

1
2
3
json = respuesta.json() 
print(json) # [{'id': 1, 'name': 'Leanne Graham', 'username': 'Bret', 'email': 'Sincere@april.biz', 'address': {'street': 'Kulas Light', 'suite': 'Apt. 556', 'city': 'Gwenborough', 'zipcode': '92998-3874', 'geo': {'lat': '-37.3159', 'lng': '81.1496'}}, 'phone': '1-770-736-8031 x56442', 'website': 'hildegard.org', 'company': {'name': 'Romaguera-Crona', 'catchPhrase': 'Multi-layered client-server neural-net', 'bs': 'harness real-time e-markets'}}, {...}, {...}, {...}, {....}]
print(type(json)) # <class 'list'>

Como podemos observar ya no es un texto simple como en el caso de respuesta.text. En este caso nos dice que se trata de una lista.

Al tratarse de una lista entonces supongamos que queremos mostrar s贸lo el primer elemento. Para ello debemos hacerlo a trav茅s de los corchetes [] indicando 麓su 铆ndice que en esta caso sabemos que las listas comienzan con el 铆ndice 0:

1
print(json[0]) # {'id': 1, 'name': 'Leanne Graham', 'username': 'Bret', 'email': 'Sincere@april.biz', 'address': {'street': 'Kulas Light', 'suite': 'Apt. 556', 'city': 'Gwenborough', 'zipcode': '92998-3874', 'geo': {'lat': '-37.3159', 'lng': '81.1496'}}, 'phone': '1-770-736-8031 x56442', 'website': 'hildegard.org', 'company': {'name': 'Romaguera-Crona', 'catchPhrase': 'Multi-layered client-server neural-net', 'bs': 'harness real-time e-markets'}}

Como obtenemos un diccionario, ahora supongamos que solo queremos los datos de una clave en espec铆fico. En este caso como se trata de una lista de usuarios digamos que queremos saber el nombre del primer usuario:

1
print(json[0]['name']) # 'Leanne Graham'
← Condicionales Crud Python - Sqlite →