Tutorial

Pasos iniciales para utilizar la biblioteca Requests de Python

PythonDevelopment

While this tutorial has content that we believe is of great benefit to our community, we have not yet tested or edited it to ensure you have an error-free learning experience. It's on our list, and we're working on it! You can help us out by using the "report an issue" button at the bottom of the tutorial.

Introducción

En muchas aplicaciones web, es habitual conectarse a varios servicios de terceros mediante API. Al utilizar estas API, puede acceder a datos como información meteorológica, resultados deportivos, listas de películas, tuits, resultados de motores de búsqueda e imágenes. También puede usar API para añadir funcionalidades a su aplicación. Entre los ejemplos se incluyen pagos, programaciones, correos electrónicos, traducciones, mapas y transferencias de archivos. Si tuviera que crear cualquiera de estos ejemplos por su cuenta, le tomaría muchísimo tiempo, pero con API pude tardar solo unos minutos en conectarse y acceder a sus características y datos.

En este artículo, aprenderá acerca de la biblioteca Requests de Python, que le permite enviar solicitudes HTTP en Python.

Además, dado que al usar una API se envían solicitudes HTTP y se reciben respuestas, Requests le permite usar API en Python. Demostraremos el uso de una API de traducción de idiomas para que pueda ver un ejemplo de su funcionamiento.

Descripción general rápida de solicitudes HTTP

La web funciona mediante solicitudes HTTP. Cada vez que navega a una página web, su navegador realiza varias solicitudes al servidor de esta. A continuación, el servidor responde con todos los datos necesarios para representar la página y, luego, su navegador la representa de modo que pueda verla.

El proceso genérico es el siguiente: un cliente (como un navegador o una secuencia de comandos de Python que utilice Requests) enviará algunos datos a una URL y, luego, el servidor situado en la URL leerá los datos, decidirá qué hacer con ellos y mostrará una respuesta al cliente. Por último, el cliente puede decidir qué debe hacer con los datos de la respuesta.

El método de solicitud está incluido en los datos que el cliente envía en una solicitud. Algunos métodos de solicitud frecuentes son GET, POST y PUT. Las solicitudes GET, en general, se utilizan únicamente para leer datos sin realizar modificaciones, mientras que las solicitudes POST y PUT se suelen usar para modificar datos en el servidor. Por ejemplo, la API Stripe le permite usar solicitudes POST para crear un nuevo cargo a fin de que un usuario pueda adquirir algo desde su aplicación.

Nota: En este artículo se abarcarán solo las solicitudes GET, dado que no modificaremos datos en un servidor.

Al enviar una solicitud desde una secuencia de comandos de Python o una aplicación web, usted, el desarrollador, puede decidir qué se envía en cada solicitud y qué hacer con la respuesta. Exploremos esto enviando una solicitud a Scotch.io y, luego, usando una API de traducción de idiomas.

Instalar Requests de Python

Antes de todo, debemos instalar la biblioteca. Instalaremos, entonces, Requests usando pip. Es recomendable crear un entorno virtual primero si aún no cuenta con uno.

  • pip install requests

Nuestra primera solicitud

Para comenzar, usaremos Requests para enviar una solicitud al sitio Scotch.io. Cree un archivo denominado script.py y añádale el código siguiente. En este artículo, la cantidad de código con el que trabajaremos será reducida; por lo tanto, cuando se realice algún cambio podrá actualizar el código existente en lugar de añadir nuevas líneas.

script.py
import requests

res = requests.get('https://scotch.io')

print(res)

Lo único que hace este código es enviar una solicitud GET a Scotch.io. Este es el mismo tipo de solicitud que envió su navegador para ver esta página, pero la única diferencia es que Requests no puede representar el HTML. Por lo tanto, en su lugar solo obtendrá el HTML sin procesar y el resto de la información de la respuesta.

En este caso, usaremos la función .get(). Sin embargo, Requests también le permite usar otras funciones, como .post() y .put(), para enviar estas solicitudes.

Puede ejecutarla con el archivo script.py.

  • python script.py

Recibirá esta respuesta: script run with output of `Response 200`

Códigos de estado

Lo primero que podemos hacer es verificar el código de estado. Los códigos HTTP van de “1XX” a “5XX”. Los códigos de estado frecuentes que probablemente haya visto son “200”, “404” y “500”.

A continuación, le ofrecemos una descripción general rápida del significado de cada código de estado:

  • 1XX: información
  • 2XX: éxito
  • 3XX: redireccionamiento
  • 4XX: error del cliente (usted cometió un error)
  • 5XX: error del servidor (se cometió un error en este)

En general, al realizar sus propias solicitudes lo que busca son códigos de estado del orden del 200.

Requests reconoce que los códigos de estado 4XX y 5XX son errores. Por lo tanto, si se muestran estos códigos de estado, el objeto de respuesta de la solicitud se evalúa como False.

Puede probar si se respondió correctamente una solicitud verificando si la respuesta es verdadera. Por ejemplo:

script.py
if res:
    print('Response OK')
else:
    print('Response Failed')

Resultado “Response 200” seguido de “Response OK”

El mensaje “Response Failed” solo aparecerá si se muestra un código de estado 400 o 500. Pruebe cambiar la URL por cualquier texto no tenga sentido para ver la falla de la respuesta y la aparición del estado 404.

Puede ver el código de estado directamente añadiendo lo siguiente:

script.py
print(res.status_code)

Con esto, verá el código de estado directamente para poder verificar el número.

Resultado de error con 404

Encabezados

Otro elemento que puede obtener de la respuesta son los encabezados. Puede consultarlos usando el diccionario de encabezados del objeto de respuesta.

script.py
print(res.headers)

Resultado con encabezados impresos en salida estándar

Los encabezados se envían junto con la solicitud y se muestran en la respuesta. Los encabezados se utilizan para que tanto el cliente como el servidor puedan interpretar los datos que se envían y se reciben en el envío o la respuesta.

Vemos los diversos encabezados que se muestran. En muchas ocasiones, no necesitará usar la información de encabezados directamente, pero se encuentra allí si la necesita.

El tipo de contenido suele ser el que necesita, dado que muestra el formato de los datos; por ejemplo, HTML, JSON, PDF y texto, entre otros. Sin embargo, Requests suele gestionar el tipo de contenido para que pueda acceder a los datos que se muestran.

Texto de respuesta

Por último, si examinamos res.text (que funciona para datos textuales, como la página HTML que visualizamos) podemos ver todo el HTML necesario para crear la página de inicio de Scotch. No se representará, pero podemos ver que parece pertenecer a Scotch. Si guardara esto en un archivo y lo abriera, vería algo similar al sitio de Scotch. En una situación real, se deben realizar varias solicitudes para que una página web cargue cosas como imágenes, secuencias de comandos y hojas de estilo. Por lo tanto, si guarda únicamente el HTML en un archivo, no se parecerá en absoluto a la página Scotch.io que ve en su navegador, dado que se realizó una sola solicitud para obtener datos HTML.

script.py
print(res.text)

Datos HTML impresos en la línea de comandos

Usar la API de traducción

Ahora, pasemos a algo más interesante. Usaremos la API de traducción de Yandex para realizar una solicitud de traducción de texto a otro idioma.

Para usar la API, primero, debe registrarse. Una vez que se haya registrado, diríjase a la API de traducción y cree una clave de API. Cuando tenga la clave de API, agréguela a su archivo como una constante. Este es el enlace en el que podrá encontrar todo lo mencionado: https://tech.yandex.com/translate/.

script.py
API_KEY = 'your yandex api key'

Necesitamos una clave de API para que Yandex pueda autenticarnos cada vez que queramos usar su API. La clave de API es una forma de autenticación ligera, dado que se añade al final de la URL de la solicitud al enviarla.

Para saber qué URL debemos enviar para usar la API, podemos consultar la documentación de Yandex.

Allí, veremos toda la información necesaria para aplicar su API de traducción en la traducción de texto.

Sintaxis de la solicitud para usar la API

Cuando vemos una URL con “&”, “?” y “=”, podemos estar seguros de que la URL se utiliza para solicitudes GET. Estos símbolos especifican los parámetros que se incluyen con la URL.

En general, todo lo que se encuentre entre corchetes ([]) será opcional. En este caso, el formato, las opciones y la devolución de llamada son opcionales, mientras que la clave, el texto y el idioma son obligatorios para la solicitud.

Añadiremos código para enviar a esa URL. Puede sustituir la primera solicitud que creamos por esta:

script.py
url = 'https://translate.yandex.net/api/v1.5/tr.json/translate'
res = requests.get(url)

Hay dos formas de añadir parámetros. Podemos añadirlos directamente al final de la URL o hacer que Requests lo haga por nosotros. Para hacer esto último, podemos crear un diccionario para nuestros parámetros. Los tres elementos que necesitamos son la clave, el texto y el idioma. Crearemos el diccionario usando la clave de API 'Hello' para el texto y 'en-es' como idioma, que significa que queremos traducir contenido del inglés al español.

Si necesita otros códigos de idiomas, puede consultarlos aquí. Busque la columna 639-1.

Creamos un diccionario de parámetros usando la función dict() y proporcionando las claves y los valores que queremos en nuestro diccionario.

script.py
params = dict(key=API_KEY, text='Hello', lang='en-es')

Ahora, pasaremos el diccionario de parámetros a la función .get().

script.py
res = requests.get(url, params=params)

Cuando pasemos los parámetros de esta forma, Requests procederá a añadir los parámetros a la URL por nosotros.

Ahora, añadiremos una instrucción de impresión para el texto de respuesta y veremos lo que se muestre en la respuesta.

script.py
print(res.text)

Diccionario de salida con los valores ingresados

Se ven tres elementos: El código de estado, que es exactamente el mismo de la respuesta, el idioma que especificamos y el texto traducido dentro de la lista. Por lo tanto, debe ver 'Hola' en el texto traducido.

Vuelva a probar con el código de idiomas en-fr. Ahora, debería ver 'Bonjour' en la respuesta.

script.py
params = dict(key=API_KEY, text='Hello', lang='en-fr')

Texto traducido al francés

Veamos los encabezados de esta respuesta en particular.

script.py
print(res.headers)

Encabezados impresos en el resultado

Obviamente, los encabezados serán distintos porque nos comunicamos con un servidor diferente, pero en este caso el tipo de contenido es application/json en lugar de text/html. Esto significa que los datos se pueden interpretar como JSON.

Cuando 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 que los datos se analicen como JSON, usaremos el método .json() en el objeto de respuesta.

Si lo imprime, verá que los datos tienen el mismo aspecto, pero el formato es ligeramente diferente.

script.py
json = res.json()
print(json)

Es distinto porque ya no es texto simple que usted obtiene de res.text. En este caso, es una versión impresa de un diccionario.

Supongamos que queremos acceder al texto. Puesto que ahora se trata de un diccionario, podemos usar la clave de texto.

script.py
print(json['text'])

Ahora solo vemos los datos de esa clave. En este caso, vemos una lista de un elemento; por lo tanto, si quisiéramos obtener ese texto en la lista directamente podríamos acceder a él mediante el índice.

script.py
print(json['text'][0])

“Bonjour” sin corchetes

Ahora, lo único que vemos es la palabra traducida.

Por supuesto, si modificamos nuestros parámetros obtendremos resultados distintos. Cambiaremos el texto que se traducirá de Hello a Goodbye, volveremos a fijar el español como idioma de destino y reenviaremos la solicitud.

script.py
params = dict(key=API_KEY, text='Goodbye', lang='en-es')

“Adiós” impreso en el resultado Pruebe traducir textos más largos en distintos idiomas para ver qué respuestas recibe de la API.

Casos de error en la API de traducción

Por último, veremos un caso de error. No siempre funciona todo bien. Por lo tanto, necesitamos saber cuándo ocurre un error.

Pruebe cambiar su clave de API eliminando un carácter. Cuando lo haga, su clave de API dejará de ser válida. Luego, intente enviar una solicitud.

Al observar el código de estado, esto es lo que verá:

script.py
print(res.status_code)

Error 403 Por lo tanto, cuando utilice la API será conveniente que verifique si todo está en orden o no para poder manejar los casos de error de acuerdo con las necesidades de su aplicación.

Conclusión

A continuación, se muestra lo que aprendió:

  • Cómo funcionan las solicitudes HTTP
  • Diversos códigos de estado posibles de una respuesta
  • Cómo enviar solicitudes y recibir respuestas usando la biblioteca Requests de Python
  • Cómo usar una API de traducción de idiomas para traducir texto
  • Cómo convertir respuestas de contenido application/JSON en diccionarios

Si desea ampliar sus posibilidades, consulte esta lista para ver los diferentes tipos de API disponibles e intente usarlos con Requests de Python.

0 Comments

Creative Commons License