Spotify API仅返回部分用户播放列表,求排查原因
问题原因及解决方案
核心问题是没有处理Spotify API的分页机制。你当前的代码只发起了单次请求,而Spotify API设置limit=50后每次最多返回50个播放列表。如果你的库中播放列表总数超过50,单次请求只能拿到其中一页内容,剩下的需要通过分页请求逐步获取。
具体解决步骤
Spotify API的返回结果包含两个关键字段:
total:用户库中播放列表的总数量next:下一页结果的请求URL(若还有未返回内容,该字段不为null)
你需要循环发起请求,直到next为null,或者请求的offset超过total,才能获取全部播放列表。
修改后的代码示例(以/me/playlists接口为例)
def get_all_user_playlists(self): headers = {"Authorization": f"Bearer {self.access_token}"} all_playlists = [] endpoint = "https://api.spotify.com/v1/me/playlists?limit=50" while endpoint: response = requests.get(endpoint, headers=headers).json() # 将当前页的播放列表合并到总列表 all_playlists.extend(response.get("items", [])) # 获取下一页的请求地址 endpoint = response.get("next") return all_playlists
关键说明
- 无需手动计算
offset,直接使用返回结果中的next字段即可,它已自动包含正确的分页参数 - 每次请求后将当前页的
items合并到总列表,直到没有下一页内容为止 - 即使你之前指定了
offset,也需要循环处理才能拿到后续所有分页的内容
额外验证点
虽然你已确认权限正确,仍可再检查access_token对应的权限是否包含playlist-read-private和playlist-read-collaborative——这两个权限是获取私有、协作播放列表的必要条件(官网"try it"功能会自动申请全权限,因此能拿到全部内容)。
内容的提问来源于stack exchange,提问作者Matthew
相关产品推荐
相关产品推荐

