開始使用免費開始

遵守 API 速率限制

來實作我們剛學到的錯誤處理吧。這題你會遇到「速率限制錯誤」(rate-limit error),也就是在短時間內對伺服器送出了太多請求。讓我們透過實作一個繞道方案來避開速率限制,避免指令碼失敗。

你的音樂庫裡有超過 3500 首曲目,現在要透過檢查每首曲目的 Length 屬性來找出最長的曲目。

但有個問題:/tracks API 的每頁最大上限為 500 筆,且速率限制是每秒 1 次請求。我們寫的指令碼在短時間內送出了太多請求。來修正它吧!

requeststime 套件都已經匯入,並且我們已為你建立以下變數:

longestTrackLength = 0
longestTrackTitle = ""
headers = {'Authorization': 'Bearer 8apDFHaNJMxy8Kt818aa6b4a0ed0514b5d3'}
page_number = 1

本練習屬於課程

Python API 入門

檢視課程

練習說明

  • 先在不更動程式碼的情況下執行練習。你會看到主控台輸出 429 Client Error,表示我們在短時間內送出了太多請求。
  • 修正指令碼:在 while 迴圈的結尾,使用 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)
編輯並執行程式碼