CommencerCommencez gratuitement

Respecter les limites de débit des API

Mettons en pratique ce que nous avons appris sur la gestion des erreurs. Dans cet exercice, vous allez rencontrer une erreur de limitation de débit (rate limit) : cela signifie que vous envoyez trop de requêtes au serveur en un court laps de temps. Corrigeons cela en implémentant une solution de contournement pour respecter la limite de débit afin que notre script ne plante pas.

Votre bibliothèque musicale contient plus de 3 500 morceaux. Essayons de trouver le plus long en vérifiant la propriété Length de chaque piste.

Mais il y a un problème : l'API /tracks a une taille de page maximale de 500 éléments et impose une limite d'1 requête par seconde. Le script que nous avons écrit envoie trop de requêtes au serveur trop rapidement. Corrigeons-le !

Les packages 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

<cours>Introduction aux API en Python</cours>
Voir le cours

Instructions de l’exercice

  • Commencez par exécuter l'exercice sans modifier le code. Vous verrez que la console affiche une erreur 429 Client Error, indiquant que nous envoyons trop de requêtes au serveur en un court laps 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 package time.

Exercice interactif pratique

Essayez cet exercice en complétant ce code d’exemple.

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)
Modifier et exécuter le code