Rispettare i limiti di frequenza delle API
Mettiamo alla prova quello che abbiamo imparato sulla gestione degli errori. In questo esercizio incontrerai un rate-limit error, ovvero stai inviando troppe richieste al server in un intervallo di tempo troppo breve. Risolviamolo implementando una soluzione per aggirare il limite di frequenza, così il nostro script non andrà in errore.
La tua libreria musicale contiene oltre 3500 brani, quindi proviamo a trovare il brano più lungo controllando la proprietà Length di ciascun brano.
C'è però un problema: l'API /tracks ha una dimensione massima della pagina di 500 elementi e un limite di 1 richiesta al secondo. Lo script che abbiamo scritto invia troppe richieste al server in poco tempo. Correggiamolo!
I pacchetti requests e time sono già importati e abbiamo creato per te le seguenti variabili:
longestTrackLength = 0
longestTrackTitle = ""
headers = {'Authorization': 'Bearer 8apDFHaNJMxy8Kt818aa6b4a0ed0514b5d3'}
page_number = 1
Questo esercizio fa parte del corso
Introduzione alle API in Python
Istruzioni dell'esercizio
- Inizia eseguendo l'esercizio senza modificare il codice: noterai che la console mostra un
429 Client Error, indicando che stiamo inviando troppe richieste al server in un tempo troppo breve. - Correggi lo script aggiungendo una pausa di 3 secondi alla fine del ciclo while usando il metodo
sleepdel pacchettotime.
Esercizio pratico interattivo
Prova a risolvere questo esercizio completando il codice di esempio.
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)