API rate limits का पालन करना
आइए एरर हैंडलिंग पर सीखी हुई बातों को परखते हैं। इस अभ्यास में आपको एक rate-limit error मिलेगा, जिसका मतलब है कि आप बहुत कम समय में सर्वर को बहुत ज़्यादा रिक्वेस्ट भेज रहे हैं। आइए एक वर्कअराउंड लागू करके rate limit को बायपास करें ताकि हमारा स्क्रिप्ट फेल न हो।
आपकी म्यूज़िक लाइब्रेरी में 3500 से अधिक ट्रैक हैं, तो चलिए Length प्रॉपर्टी देखकर सबसे लंबा ट्रैक ढूँढते हैं।
लेकिन एक दिक्कत है: /tracks API की अधिकतम पेज साइज 500 आइटम है और rate-limit 1 रिक्वेस्ट प्रति सेकंड है। जो स्क्रिप्ट हमने लिखी है, वह कम समय में सर्वर को बहुत ज़्यादा रिक्वेस्ट भेज रही है। इसे ठीक करते हैं!
requests और time पैकेज पहले से इम्पोर्ट हैं, और हमने आपके लिए ये वैरिएबल बनाए हैं:
longestTrackLength = 0
longestTrackTitle = ""
headers = {'Authorization': 'Bearer 8apDFHaNJMxy8Kt818aa6b4a0ed0514b5d3'}
page_number = 1
यह अभ्यास पाठ्यक्रम का हिस्सा है
Python में APIs परिचय
अभ्यास निर्देश
- बिना कोड बदले अभ्यास को पहले चलाएँ। आप देखेंगे कि कंसोल में
429 Client Errorआता है, जो दर्शाता है कि हम बहुत कम समय में सर्वर को बहुत ज़्यादा रिक्वेस्ट भेज रहे हैं। - स्क्रिप्ट को ठीक करें: while-loop के अंत में
timeपैकेज केsleepमेथड का उपयोग करके 3 सेकंड का विराम जोड़ें.
इंटरैक्टिव व्यावहारिक अभ्यास
इस अभ्यास को इस नमूना कोड को पूरा करके आज़माएँ।
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)