如何使用 YouTube API 从频道获取每个视频的列表?

How to get a list of every video from a channel using the YouTube API?

我创建了一个程序,用户可以在其中输入 YouTube 频道名称,它会进行搜索,returns 并根据相关性显示具有相似名称的 YouTube 频道。然后用户选择他们想要的频道,程序保存 ChannelID。然后我想获得所有频道视频的列表,以便我可以从该频道向用户显示随机视频。问题是使用频道“上传”播放列表的旧方法不再有效,因为我相信默认情况下频道不再有这个播放列表。我目前用来获取频道视频的代码有其自身的问题。

   SearchListResponse response;
                var search = service.Search.List(repeatable);
                search.Type = "video";
                search.ChannelId = Session["ChannelID"].ToString();
                search.MaxResults = 500;

                do
                {
                    response = search.ExecuteAsync().Result;

                    foreach (SearchResult sr in response.Items)
                    {
                        videoIds.Add(sr.Id.VideoId);
                    }

                    search.PageToken = response.NextPageToken;

                } while (response.NextPageToken != "");

此方法的问题是每次搜索使用 100 个配额,但一次只能 returns 50 个视频。如果用户有 1000 个视频,则需要 20 次搜索,即 2000 次配额(每日配额的 20%)才能获得视频 ID 的频道。

我相信有两种方法可以解决这个问题:

通过单个请求,从频道获取随机视频

从频道中获取所有 VideoID,然后随机选择一个。

频道有一个 属性 ChannelContentDetails,您可以从中访问 RelatedPlaylists。在相关播放列表中,您可以提取频道 Uploads 的播放列表“ID”。然后您可以获取 PlaylistItemsvideoID,并且您可以以低得多的配额成本随机进行。查看文档它似乎没有贬值,所以这可能是一种解决方法。

很抱歉无法为您格式化脚本,但我从未使用过 Youtube 的 API,它可能无法编译。

The issue is that the old method of using a channels "Uploads" playlist no longer works as I believe that channels don't have this playlist anymore by default.

不确定从哪里获得该信息,但是,您可以从“上传”播放列表中检索视频 - see this answer 了解更多信息。

基本上,它改变了 channelId 中的一个字母,然后您保存另一个请求以引入“上传”播放列表。

查看此 working sample I made 以获取从频道获取上传视频的指南 - 检查此频道 UCyztLS0dr85vRqpKZHFfbmQ 是否有 91 个上传视频date (11/02/2022),那么,需要nextPageToken才能得到下一个结果。

maxresults 的最大值是 50 - 这适用于所有请求 据我在文档中阅读 .

由于您提到了随机视频选择器,您可以使用来自 playlistItems 端点的结果并选择一个随机视频结果(制作后一个请求) 并且 - 由于它是随机的,因此您无法控制随机选择哪个视频。

如果您遵循这种思路并希望节省更多配额,请使用此端点从给定频道获取最新上传的视频:

https://www.youtube.com/feeds/videos.xml?channel_id=<CHANNEL_ID>

示例:

https://www.youtube.com/feeds/videos.xml?channel_id=UCypzG0nv9B65DwOLJ578rZQ

N.B:如果你想获得更多视频,你必须提出更多请求 - 据我所知,没有请求可以为你带来来自给定频道的所有信息 - 这就是你使用的原因NextPageToken 用于结果分页。