Respectarea limitelor de rată ale API-ului
Hai să punem în practică ce am învățat despre gestionarea erorilor. În acest exercițiu vei întâlni o eroare de limită de rată, ceea ce înseamnă că trimiți prea multe cereri către server într-un interval scurt de timp. Vom rezolva problema implementând o soluție care să ocolească această limită, astfel încât scriptul să nu eșueze.
Biblioteca ta muzicală conține peste 3.500 de piese, așa că vom încerca să o găsim pe cea mai lungă verificând proprietatea Length a fiecărei piese.
Există însă o problemă: API-ul /tracks are o dimensiune maximă de pagină de 500 de elemente și o limită de rată de 1 cerere pe secundă. Scriptul pe care l-am scris trimite prea multe cereri către server într-un interval prea scurt. Hai să remediem asta!
Pachetele requests și time sunt deja importate, iar noi am creat pentru tine următoarele variabile:
longestTrackLength = 0
longestTrackTitle = ""
headers = {'Authorization': 'Bearer 8apDFHaNJMxy8Kt818aa6b4a0ed0514b5d3'}
page_number = 1
Acest exercițiu face parte din cursul
Introducere în API-uri cu Python
Instrucțiuni pentru exercițiu
- Începe prin a rula exercițiul fără să modifici codul – vei observa că în consolă apare eroarea
429 Client Error, care indică faptul că trimitem prea multe cereri către server într-un interval scurt de timp. - Corectează scriptul adăugând o pauză de 3 secunde la sfârșitul buclei while, folosind metoda
sleepdin pachetultime.
Exercițiu interactiv practic
Încearcă acest exercițiu completând acest cod de exemplu.
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)