Respetar los límites de la tasa API
Pongamos a prueba lo que hemos aprendido sobre la gestión de errores. En este ejercicio te encontrarás con un error de límite de velocidad, lo que significa que estás enviando demasiadas peticiones al servidor en poco tiempo. Arreglémoslo aplicando una solución para eludir el límite de velocidad y que nuestro script no falle.
Tu biblioteca musical contiene más de 3500 pistas de música, así que vamos a intentar encontrar la pista más larga comprobando la propiedad Length
de cada pista.
Pero hay un problema, la API /tracks
tiene un tamaño máximo de página de 500 elementos y tiene un límite de velocidad de 1 petición por segundo. El script que hemos escrito está enviando demasiadas peticiones al servidor en poco tiempo. ¡Arreglémoslo!
Los paquetes requests
y time
ya están importados, y hemos creado las siguientes variables para ti:
longestTrackLength = 0
longestTrackTitle = ""
headers = {'Authorization': 'Bearer 8apDFHaNJMxy8Kt818aa6b4a0ed0514b5d3'}
page_number = 1
Este ejercicio forma parte del curso
Introducción a las API en Python
Instrucciones de ejercicio
- Empieza ejecutando el ejercicio sin hacer cambios en el código, verás que la consola muestra un
429 Client Error
indicando que estamos enviando demasiadas peticiones al servidor en poco tiempo. - Arregla el script añadiendo una pausa de 3 segundos al final del bucle while utilizando el método
sleep
del paquetetime
.
Ejercicio interactivo práctico
Pruebe este ejercicio completando este código de muestra.
while True:
params = {'page': page_number, 'per_page': 500}
response = requests.get('http://localhost:3000/tracks', params=params, headers=headers)
response.raise_for_status()
response_data = response.json()
print(f'Fetching tracks page {page_number}')
if len(response_data['results']) == 0:
break
for track in response_data['results']:
if(track['Length'] > longestTrackLength):
longestTrackLength = track['Length']
longestTrackTitle = track['Name']
page_number = page_number + 1
# Add your fix here
____.____(3)
print('The longest track in my music library is: ' + longestTrackTitle)