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



我创建了一个程序,用户在其中输入YouTube频道名称,然后进行搜索,并根据其相关性返回和显示具有类似名称的YouTube频道。然后用户选择他们想要的频道,程序保存频道ID。然后我想得到所有频道视频的列表,这样我就可以从该频道向用户显示随机视频。问题是使用通道的旧方法";上传";播放列表不再工作,因为我相信频道默认情况下不再有这个播放列表。我目前用于获取频道视频的代码有其自身的问题。

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个配额,但一次只返回50个视频。如果一个用户有1000个视频,只需要20次搜索,也就是2000个配额(每天配额的20%(就可以获得频道VideoID。

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

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

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

问题是使用通道的旧方法"上传";播放列表不再工作,因为我相信频道默认情况下不再有这个播放列表。

不确定你从哪里得到这些信息,但是,你可以从";上传";播放列表-请参阅此答案以了解更多信息。

基本上,它更改了channelId中的一个字母,然后您保存了另一个请求,以便将";上传";播放列表。

请参阅我制作的此工作示例,以获取从某个频道获取上传视频的指导-检查该频道UCyztLS0dr85vRqpKZHFfbmQ迄今为止已上传91个视频(2022年2月11日(,然后,需要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进行结果分页的原因。

Channel有一个属性ChannelContentDetails,您可以从中访问RelatedPlaylists。在相关播放列表中,您可以拉入播放列表";ID";对于信道CCD_ 10。然后你可以获得PlaylistItems,也就是videoID,你可以以更低的配额成本随机通过。仔细查看文档,它似乎没有贬值,所以这可能是一个变通办法。

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

最新更新