Respecter les limites de taux de l'API
Mettons à l'épreuve ce que nous avons appris sur la gestion des erreurs. Dans cet exercice, vous rencontrerez une erreur de limitation de débit, ce qui signifie que vous envoyez trop de requêtes au serveur en peu de temps. Nous allons y remédier en mettant en œuvre une solution de contournement de la limite de débit afin que notre script n'échoue pas.
Votre bibliothèque musicale contient plus de 3500 morceaux de musique. Essayons de trouver le morceau le plus long en vérifiant la propriété Length
de chaque morceau.
Mais il y a un problème, l'API /tracks
a une taille de page maximale de 500 éléments et une limite de taux de 1 requête par seconde. Le script que nous avons écrit envoie trop de requêtes au serveur en peu de temps. Réparons-le !
Les paquets requests
et time
sont déjà importés et nous avons créé les variables suivantes pour vous :
longestTrackLength = 0
longestTrackTitle = ""
headers = {'Authorization': 'Bearer 8apDFHaNJMxy8Kt818aa6b4a0ed0514b5d3'}
page_number = 1
Cet exercice fait partie du cours
Introduction aux API en Python
Instructions
- Commencez par exécuter l'exercice sans modifier le code. Vous remarquerez que la console affiche un message
429 Client Error
indiquant que nous envoyons trop de requêtes au serveur en peu de temps. - Corrigez le script en ajoutant une pause de 3 secondes à la fin de la boucle while à l'aide de la méthode
sleep
du paquettime
.
Exercice interactif pratique
Essayez cet exercice en complétant cet exemple de code.
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)