Einhaltung der API-Grenzwerte
Lass uns das, was wir über Fehlerbehandlung gelernt haben, auf die Probe stellen. In dieser Übung wirst du auf einen Fehler bei der Ratenbegrenzung stoßen, was bedeutet, dass du in kurzer Zeit zu viele Anfragen an den Server schickst. Beheben wir das Problem, indem wir einen Workaround implementieren, um die Ratenbegrenzung zu umgehen, damit unser Skript nicht fehlschlägt.
Deine Musikbibliothek enthält über 3500 Lernpfade, also lass uns versuchen, den längsten Lernpfad zu finden, indem wir die Length
Eigenschaft jedes Lernpfads überprüfen.
Aber es gibt ein Problem: Die /tracks
API hat eine maximale Seitengröße von 500 Einträgen und ein Ratenlimit von 1 Anfrage pro Sekunde. Das Skript, das wir geschrieben haben, sendet in kurzer Zeit zu viele Anfragen an den Server. Bringen wir es in Ordnung!
Die Pakete requests
und time
sind bereits importiert, und wir haben die folgenden Variablen für dich erstellt:
longestTrackLength = 0
longestTrackTitle = ""
headers = {'Authorization': 'Bearer 8apDFHaNJMxy8Kt818aa6b4a0ed0514b5d3'}
page_number = 1
Diese Übung ist Teil des Kurses
Einführung in APIs in Python
Anleitung zur Übung
- Beginne damit, die Übung ohne Änderungen am Code auszuführen. Du wirst feststellen, dass die Konsole eine
429 Client Error
ausgibt, die anzeigt, dass wir in kurzer Zeit zu viele Anfragen an den Server senden. - Repariere das Skript, indem du eine 3-Sekunden-Pause am Ende der while-Schleife mit der Methode
sleep
aus dem Pakettime
einfügst.
Interaktive Übung
Versuche dich an dieser Übung, indem du diesen Beispielcode vervollständigst.
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)