3. Probando la API de TasteDive¶
TasteDive es una herramienta que:
le ayuda a descubrir nueva música, películas, programas de televisión, libros, autores, juegos, podcasts y personas con intereses compartidos. – TasteDive
En el siguiente ejercicio usaremos la API de TasteDive para buscar obras o artistas similares a otra de nuestra elección. La documentación de la API de TasteDive.
En este caso, utilizaremos la librería requests
para hacer la solicitud a la API. La url base
es "https://tastedive.com/api/similar"
. A esta url se le va a pasar un parámetro q
con el
valor de la artista Ariana Grande. Al final la url se va a ver de la siguiente forma: "https://tastedive.com/api/similar?q=ariana+grande"
.
Note que después de la url base se escribe un ?
para indicar que siguen los parámetros.
import requests
import json
api_url = "https://tastedive.com/api/similar"
proxy = "https://cors.bridged.cc/"
# Los parámetros que se le pasaran a la url los escribimos dentro de un diccionario
parametros = {"q": "ariana grande"}
# Solicitamos a la api los datos
respuesta = requests.get(proxy + api_url, params=parametros)
# Ahora imprimimos la url
print(respuesta.url)
print()
# Transformamos los datos de formato json a Python
datos = json.loads(respuesta.text)
print(datos)
Activity: 3.1 ActiveCode (ac_l45_3a)
En el ejemplo anterior pudo apreciar que la API regresa un texto, que si lo pasamos por json.loads
se transforma a un diccionario de Python. Sin embargo, no es del todo legible. Esto se puede solucionar con
json.dumps
.
Ahora vamos a solicitar información de la banda Coldplay. Esta vez vamos a imprimir los datos de forma
que sean legibles. Esto lo hacemos con el argumento indent
de la función dumps
de json
.
Vamos a usar urllib
para hacer la solicitud.
import urllib.request
import urllib.parse
import json
api_url = "https://tastedive.com/api/similar?"
proxy = "https://cors.bridged.cc/"
# La siguiente línea es para los parámetros de la url.
parametros = urllib.parse.urlencode({"q": "coldplay"})
solicitud = urllib.request.urlopen(proxy + api_url + parametros)
datos = json.loads(solicitud.read())
# Imprimimos los datos de forma legible para un usuario
print(json.dumps(datos, indent=4))
# Podemos ver que la api arrojó 20 resultados relacionados con
# la solicitud
print(len(datos["Similar"]["Results"]))
Activity: 3.2 ActiveCode (ac_l45_3b)
El siguiente ejercicio viene con calificación automática.
Ahora va a preguntar a TasteDive por la película Coco. Entonces el diccionario parametros
debe tener el
valor "Coco"
asignado a la llave "q"
. Además, esta vez solo queremos 5 resultados en vez de 20. Para
esto existe un parámetro llamado "limit"
, que puede ser asignado al número de resultados que se necesiten.
Otro parámetro que le pasará a la url será "info"
y tendrá el valor de 1. Lo que hará esto es que los
resultados vendrán con un texto extra con información sobre la película.
Primero, va a solicitar a la API lo descrito anteriormente, y guardará esto en la variable solicitud
. En
otra variable, solicitud_url
, guarde la url de la solicitud. Después asignará los datos a la variable datos
.
Después va asignar a la variable resultados
el número de resultados que arrojó la solicitud
(como se hizo en el ejemplo anterior). Como pusimos un límite, este número debe coincidir con el límite.
Ahora va a crear la lista peliculas_similares
. Dentro de datos
usted tiene un diccionario de diccionarios
y listas. Lo que hará será buscar los conjuntos dentro de los cuales se encuentren los nombres de las películas
similares a Coco, y va a agregar a peliculas_similares
el nombre de esas películas. En total deben ser 5.
Pista: los datos de las películas se encuentran dentro de datos["Similar"]["Results"]
, y la llave para
acceder a ellas es "Name"
.
Por último, va a buscar el número de veces que aparece la palabra "Pixar"
en los textos de información de las
películas relacionadas a Coco. Ese número lo va a guardar en la variable pixar
. Pista: "wTeaser"
es la
llave que guarda el texto. Esta llave se encuentra en el mismo diccionario que el nombre de las películas.
import requests
import json
api_url = "https://tastedive.com/api/similar"
proxy = "https://cors.bridged.cc/"
# Agregue los parámetros
parametros = {}
# Complete el código
solicitud =
solicitud_url =
datos =
# Asigne la variable resultados
# print(f"resultados: {resultados}")
# Cree peliculas_similares
# Utilice un ciclo for para encontrar las peliculas similares y agregarlas
# a la variable correspondiente
# print(f"Pelis: {peliculas_similares} len: {len(peliculas_similares)}")
Activity: 3.3 ActiveCode (ac_l45_3c)