对于一个项目,我必须列出来自 YouTube 用户帐户的所有视频。 我正在获取所有公共视频,但是当我在 oauth 之后进行 api 调用时,我仍然只获取公共视频。
不公开视频是搜索引擎和用户公共页面隐藏的视频。 我确信有办法找回它。
这是我的代码
var request = gapi.client.youtube.playlistItems.list({
playlistId: listId,
part: 'snippet,status',
maxResults: 25,
pageToken: nextPageToken
});
request.execute(function(response) {
console.log(response)
nextPageToken = response.nextPageToken
if ('error' in response) {
displayMessage(response.error.message);
} else {
if ('items' in response) {
console.log(response.items)
var a = [];
for(var i in response.items){
var d = {
title: response.items[i].snippet.title,
videoId: response.items[i].snippet.resourceId.videoId,
publishedAt: response.items[i].snippet.publishedAt
}
a.push(d);
$("#message").append(JSON.stringify(d))
}
} else {
displayMessage('There are no videos in your channel.');
}
}
});
您无需使用 API 密钥通过 OAuth 路径即可获取未列出的视频,尽管许多网上人士表示不能。这是我发现的:
转到 https://console.developers.google.com 并为 Youtube Data API v3 创建 API 密钥。 API 密钥,而不是 OAuth ClientId。您的 API 密钥应类似于“AISdkJKdk7GuSkDKJDKSkLmSSdDFm4ro4E_4et_ww”
如果使用 C#,请从 Nuget 下载 Google.Apis.YouTube.v3 版本 1.40.2.1593。如果没有下载适合您的语言的等效库。
接下来转到您的 YouTube 帐户并创建一个名为“API 密钥返回的不公开视频”的新播放列表(在 YouTube 工作室中,如果您编辑已上传的视频,则会有一个播放列表下拉菜单,您可以在其中分配已上传的视频)存在或创建一个新的)
然后转到您的频道,然后单击播放列表选项卡。编辑您刚刚创建的新播放列表,使其不公开,否则您添加到此播放列表的不公开视频将在您频道的用户界面上可见。
在您的频道上找到您再次创建的播放列表,然后单击查看。您访问的 URL 将有一个 &list 查询字符串参数,您需要获取该 Id。 示例:https://www.youtube.com/watch?v=kskScbSkdSDg&list=DKfiVi8sZdkZqW-saZt7bN8DDTDxshjDK。在此示例中,我们的列表 (PlalistId) 值为 DKfiVi8sZdkZqW-saZt7bN8DDTDxshjDK,在调用 GetPlaylistVideos 方法时需要该值。
现在您已完成先决条件。代码时间:
public static List<YouTubeVideo> GetPlaylistVideos(string PlaylistId)
{
List<YouTubeVideo> result = new List<YouTubeVideo>();
try
{
YouTubeService service = new YouTubeService(new BaseClientService.Initializer()
{
ApplicationName = YOUTUBE_APPLICATION_NAME,
ApiKey = YOUTUBE_API_KEY
});
var nextPageToken = "";
while (nextPageToken != null)
{
var playlistItemsListRequest = service.PlaylistItems.List("snippet");
playlistItemsListRequest.PlaylistId = PlaylistId;
playlistItemsListRequest.MaxResults = 50;
playlistItemsListRequest.PageToken = nextPageToken;
// Retrieve the list of videos uploaded to the authenticated user's channel.
var playlistItemsListResponse = playlistItemsListRequest.Execute();
foreach (var playlistItem in playlistItemsListResponse.Items)
{
YouTubeVideo v = new YouTubeVideo
{
EmbedUrl = String.Format("https://www.youtube.com/embed/{0}", playlistItem.Snippet.ResourceId.VideoId),
Title = playlistItem.Snippet.Title,
Description = playlistItem.Snippet.Description,
ThumbnailUrl = playlistItem.Snippet.Thumbnails.High.Url
};
result.Add(v);
}
nextPageToken = playlistItemsListResponse.NextPageToken;
}
}
如果您调用 GetPlaylistVideos,您将看到它使用 API 密钥而不是 OAuth 从未列出的播放列表中返回未列出的视频。
有时看起来有点违反直觉,但 YouTube 有一个怪癖,即当将不公开的视频放入播放列表中时,它实际上会通过 API 和 YouTube 网站本身在该播放列表中可见;但仅限于播放列表视图。该视频仍然无法通过正常方式(API 或网站)进行搜索,不会显示在频道的“视频”选项卡上,并且在使用 playlistItems 通过 API 公开时也不会出现在用户的 uploads 播放列表中。列表。