开始使用免费开始使用

遵守 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)
编辑并运行代码