Spotify API获取播放列表曲目时offset参数失效问题求助
问题根源与修复方案
1. 直接URL调用的端点错误
你调用的是播放列表详情端点(/playlists/{playlist_id}),这个端点的offset参数并不作用于曲目列表。正确获取播放列表曲目应该使用曲目列表专属端点:/playlists/{playlist_id}/tracks,该端点才支持offset和limit参数分页获取曲目。
修正后的URL请求:
r = requests.get(BASE_URL + 'playlists/' + playlist_id + "/tracks?offset=100&limit=100", headers=headers)
2. Spotipy库的fields参数错误
spotipy.playlist_tracks()方法返回的直接是曲目列表的items数组,而非包含tracks键的嵌套结构。你指定的fields=["tracks.items.track.name"]会过滤掉正确的偏移后数据,导致始终返回前100条。
修正后的Spotipy代码:
spotipy = sp.Spotify(client_credentials_manager=SpotifyClientCredentials(client_id, client_secret)) # 去掉fields中的tracks前缀 response = spotipy.playlist_tracks(playlist_id, fields=["items.track.name"], offset=400, limit=100)
3. Tekore库的fields参数错误
和Spotipy同理,tekore.playlist_items()方法返回的是曲目列表的直接数据,fields参数不需要加tracks.前缀。多余的前缀会导致接口返回的偏移后数据被过滤,最终只拿到默认的前100条对应字段。
修正后的Tekore代码:
app_token = tk.request_client_token(client_id, client_secret) tekore = tk.Spotify(app_token) # 去掉fields中的tracks前缀 playlist = tekore.playlist_items(playlist_id=playlist_id, fields=["items.track.name"], offset=300, limit=100)
额外注意事项
- 每次请求建议显式指定
limit=100(API默认值也是100,显式设置更清晰); - 分页时需根据接口返回的
total字段计算总页数,循环请求直到获取所有曲目; - 确保目标播放列表确实包含超过对应offset的曲目,避免请求不存在的偏移量。
内容的提问来源于stack exchange,提问作者Maed
相关产品推荐
相关产品推荐

