始める無料で始める

APIのレート制限を守る

これまで学んだエラーハンドリングを実践してみましょう。この演習では、短時間にサーバーへ過剰なリクエストを送ってしまうことで発生する「レート制限エラー」に遭遇します。スクリプトが失敗しないよう、レート制限を回避する対策を実装して修正しましょう。

あなたの音楽ライブラリには3,500曲以上が含まれています。各トラックの Length プロパティを確認して、最も長いトラックを探してみます。

ただし問題があります。/tracks API は1ページあたり最大500件まで、かつ1秒あたり1リクエストというレート制限があります。現在のスクリプトは短時間にリクエストを送りすぎています。これを修正しましょう!

requeststime パッケージはすでにインポート済みで、次の変数を用意しています。

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

この演習はコースの一部です

Python で学ぶ API 入門

コースを見る

演習の手順

  • まずはコードを変更せずに実行してみてください。コンソールに 429 Client Error が表示され、短時間に過剰なリクエストを送っていることがわかります。
  • time パッケージの sleep メソッドを使い、while ループの最後に「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)
コードを編集して実行