我是 API 的新手,想尝试一下 Spotify API。
我使用 JohnnyCrazy 的 Spotify API 客户端,到目前为止它运行得很好。 使用令牌进行身份验证也有效。
作为测试,我想显示给定播放列表的所有歌曲,但发现请求限制为 100 首歌曲。 要获取下一首歌曲,我必须使用查询参数
offset
,正如我在 Spotify 开发者网站上读到的那样。
我现在的问题是如何使用 Spotify API 客户端在代码中包含
offset
参数。
这是我的代码:
var spotify = new SpotifyClient(MyToken);
var playlist = await spotify.Playlists.Get(MyPlaylistURI);
foreach (PlaylistTrack<IPlayableItem> item in playlist.Tracks.Items)
{
if (item.Track is FullTrack track)
{
Console.WriteLine(track.Name, track.Album.Name);
}
}
编辑:MyPlaylistURI 只是播放列表 ID。我的错
根据文档,
offset
是一个查询参数,这意味着您可以将其附加到URI,即
var MyPlaylistURI = "https://uri-you-are-using?offset=100"
var spotify = new SpotifyClient(MyToken);
var playlist = await spotify.Playlists.Get(MyPlaylistURI);
当然,您不会对偏移量进行硬编码。这只是为了展示如何包含该参数。
要获取具有给定偏移量的播放列表的曲目,您需要参数化来自 Playlists.GetItems() 的请求。检查其重载会提示您可以按如下方式执行此操作:
var request = new PlaylistGetItemsRequest() { Offset = 100 };
Paging<PlaylistTrack<IPlayableItem>> tracksPaging = await SpotifyClient.Playlists.GetItems(playlistId, request);
然而,这并不是获取所有曲目的最简单方法,因为根据播放列表的长度,您可能需要多次迭代偏移量。
相反,该库提供了有效的分页功能:
Paging<PlaylistTrack<IPlayableItem>> tracksPaging = await SpotifyClient.Playlists.GetItems(playlistId, request);
IList<PlaylistTrack<IPlayableItem>> tracksAll = await SpotifyClient.PaginateAll(tracksPaging);
瞧,来自单个等待的播放列表上所有 IPlayableItems 的 IList。