Respektování rate limitů API
Pojďme si vyzkoušet, co jsme se naučili o zpracování chyb. V tomto cvičení narazíš na chybu rate limitu, která znamená, že posíláš na server příliš mnoho požadavků za krátkou dobu. Opravíme to přidáním workaroundu, který rate limit obejde a zabrání pádu skriptu.
Tvoje hudební knihovna obsahuje přes 3 500 skladeb – zkusíme najít tu nejdelší tím, že u každé skladby zkontrolujeme vlastnost Length.
Je tu ale jeden problém: API /tracks má maximální velikost stránky 500 položek a rate limit 1 požadavek za sekundu. Skript, který jsme napsali, posílá na server příliš mnoho požadavků za krátkou dobu. Pojďme to napravit!
Balíčky requests a time jsou už naimportované a připravili jsme pro tebe následující proměnné:
longestTrackLength = 0
longestTrackTitle = ""
headers = {'Authorization': 'Bearer 8apDFHaNJMxy8Kt818aa6b4a0ed0514b5d3'}
page_number = 1
Toto cvičení je součástí kurzu
Úvod do API v Pythonu
Pokyny k cvičení
- Nejdřív spusť cvičení beze změn v kódu – všimneš si, že konzole zobrazí chybu
429 Client Error, která říká, že posíláme na server příliš mnoho požadavků za krátkou dobu. - Oprav skript tak, že na konec while-smyčky přidáš pauzu 3 sekundy pomocí metody
sleepz balíčkutime.
Interaktivní cvičení na vyzkoušení si v praxi
Vyzkoušejte si toto cvičení dokončením tohoto ukázkového kódu.
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)