如何在JohnnyCrazy的Spotify API客户端中使用offset参数获取完整播放列表曲目
解决Spotify API播放列表曲目分页获取的问题
嘿,这问题我刚好用JohnnyCrazy的Spotify客户端处理过,给你一步步讲清楚怎么搞定分页获取所有曲目!
首先得明确:Spotify API的播放列表曲目接口默认只返回最多100首(limit默认值是100,也是最大值),所以要拿到所有曲目,就得通过offset参数来翻页,每次往后偏移100条,直到没有更多内容为止。
你原来的代码里,playlist.Tracks.Items只包含第一页的内容,正确的做法是单独调用曲目列表的分页接口,循环获取每一页。下面是修改后的完整代码:
var spotify = new SpotifyClient(MyToken); int currentOffset = 0; const int pageSize = 100; // Spotify允许的最大单页数量 Paging<PlaylistTrack<IPlayableItem>> currentTrackPage; do { // 创建请求参数,指定当前偏移量和每页数量 var request = new PlaylistGetItemsRequest { Offset = currentOffset, Limit = pageSize }; // 获取当前页的曲目列表 currentTrackPage = await spotify.Playlists.GetItems(MyPlaylistID, request); // 遍历处理当前页的每一首曲目 foreach (PlaylistTrack<IPlayableItem> item in currentTrackPage.Items) { if (item.Track is FullTrack track) { Console.WriteLine($"{track.Name} - {track.Album.Name}"); } } // 更新偏移量,准备获取下一页 currentOffset += pageSize; // 当currentTrackPage.Next不为空时,说明还有更多曲目需要获取 } while (!string.IsNullOrEmpty(currentTrackPage.Next));
关键细节说明:
- 改用
Playlists.GetItems方法:这个方法专门用来获取播放列表的曲目分页,支持传入offset和limit参数,而你原来用的Playlists.Get返回的播放列表对象里的Tracks只包含第一页数据。 - 循环终止条件:通过检查
currentTrackPage.Next是否为空来判断是否还有下一页。Spotify会在返回的分页数据里提供Next标识,只要这个字段不为空,就代表还有未获取的曲目。 - 参数控制:
Limit设为100是因为这是Spotify API允许的最大值,这样能减少请求次数,提高效率。
这样就能完整获取播放列表里的所有曲目啦!
内容的提问来源于stack exchange,提问作者SideSky
相关产品推荐
相关产品推荐

