如何使用 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”。然后您可以获取 PlaylistItems
和 videoID
,并且您可以以低得多的配额成本随机进行。查看文档它似乎没有贬值,所以这可能是一种解决方法。
很抱歉无法为您格式化脚本,但我从未使用过 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
用于结果分页。
我创建了一个程序,用户可以在其中输入 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”。然后您可以获取 PlaylistItems
和 videoID
,并且您可以以低得多的配额成本随机进行。查看文档它似乎没有贬值,所以这可能是一种解决方法。
很抱歉无法为您格式化脚本,但我从未使用过 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
用于结果分页。