我将 C# .NET 与 YouTubeAPI-Nuget 包一起使用,但这不应该那么重要,因为我可以应用每种语言的概念。
我需要经常获取一个频道的所有播放列表(特别是登录频道,使用“我的”参数)以及每个播放列表的每个视频,我已经尝试尽可能少地这样做,但它仍然必须经常发生。
问题是这需要很长时间,因为我首先必须获取所有播放列表(每 50 个播放列表调用 1 个 API),然后每个播放列表获取每个视频(每个播放列表每 50 个视频调用 1 个 API)。>
所以这可以很快地繁殖。对于 39 个播放列表,每个播放列表都小于 50 个视频,每次都需要几秒钟。
所以我的问题是:有没有更好/更有效的方法?
我的优化:
我目前如何做的代码示例:
private async Task InitPlaylists()
{
var playlists = new Dictionary<string, string>();
var page = "";
while (true)
{
var request = _youTubeService.Playlists.List("snippet");
request.Mine = true;
request.PageToken = page;
request.MaxResults = 50;
var result = await request.ExecuteAsync();
foreach (var playlist in result.Items) playlists.Add(playlist.Id, playlist.Snippet.Title);
if (result.NextPageToken == null) break;
page = result.NextPageToken;
}
foreach (var (id, title) in playlists)
{
var videos = new List<PlaylistItem>();
page = "";
while (true)
{
var listRequest = _youTubeService.PlaylistItems.List("id,snippet");
listRequest.PageToken = page;
listRequest.MaxResults = 50;
listRequest.PlaylistId = id;
var listResult = await listRequest.ExecuteAsync();
videos.AddRange(listResult.Items);
if (listResult.NextPageToken == null) break;
page = listResult.NextPageToken;
}
Playlists.Add(new Playlist(id, title, videos.ToDistinctDictionary()));
}
}
编辑:如果我说我为什么需要这个,也许会有帮助,也许有人知道如何以这种方式切断一些电话:
我希望能够在播放列表中添加和删除视频,例如在 youtube 工作室编辑页面上。
所以我需要 A. 频道的每个播放列表和 B. 每个播放列表的每个视频,因为我需要知道视频是否已经在播放列表中