Začněte nyníZačněte zdarma

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

Zobrazit kurz

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 sleep z balíčku time.

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)
Upravit a spustit kód