You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python调用Spotify API获取超百首歌播放列表时offset参数无效问题

Spotify API Offset参数失效的解决思路

首先排查参数传递方式是否正确:

  • Spotify的/playlists/{playlist_id}/tracks端点要求offset作为查询参数传递,而非请求体参数。如果你的代码把offset放在data或json参数里传给requests.get,API会忽略它,默认返回前100条。正确做法是将参数放在params字典中。

示例正确请求代码:

import requests

BASE_URL = "https://api.spotify.com/v1"
playlist_id = "你的播放列表ID"
access_token = "你的访问令牌"

headers = {"Authorization": f"Bearer {access_token}"}

def fetch_all_tracks():
    all_tracks = []
    offset = 0
    limit = 100  # API单次返回上限
    
    while True:
        # 构造查询参数
        params = {"offset": offset, "limit": limit}
        response = requests.get(
            f"{BASE_URL}/playlists/{playlist_id}/tracks",
            headers=headers,
            params=params
        )
        # 检查请求是否成功,抛出异常便于排查
        response.raise_for_status()
        data = response.json()
        
        # 打印返回的offset,确认API是否正确接收参数
        print(f"请求offset: {offset}, API返回offset: {data['offset']}")
        
        all_tracks.extend(data["items"])
        # 当返回条目数小于limit时,说明已获取全部歌曲
        if len(data["items"]) < limit:
            break
        offset += limit
    
    return all_tracks

接下来排查其他可能原因:

  • URL拼接错误:不要手动将offset拼进URL路径(比如.../tracks/offset=100),这种写法不符合API规范,会被忽略。
  • 令牌权限问题:虽然能获取前100条,但如果令牌缺少playlist-read-private或playlist-read-collaborative权限,部分私有播放列表可能返回异常数据。可以通过调用/me端点验证令牌权限。
  • 播放列表ID错误:确认传入的playlist_id是否对应目标播放列表,传错ID会导致获取错误播放列表的前100条,误以为offset无效。
  • 本地缓存逻辑:检查代码中是否有缓存前100条数据的逻辑,导致后续请求结果被覆盖或重复读取缓存。

最后验证API响应:

  • 打印response.json()的完整返回值,查看offset字段是否与你传入的一致。如果API返回的offset是0,说明参数未正确传递;如果返回offset正确但条目还是前100条,可尝试更换播放列表测试,排除特定播放列表的异常情况。

内容的提问来源于stack exchange,提问作者exch_cmmnt_memb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 14:37:11