对于项目,我必须列出来自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.');
}
}
});
答案 0 :(得分:2)
有时看起来有点违反直觉,但YouTube有一个怪癖,即当一个未列出的视频放在一个播放列表中时,它实际上将通过API和YouTube网站本身显示在该播放列表中;但仅限于播放列表视图。该视频仍无法通过常规方式(API或网站)进行搜索,也不会显示在视频中。频道的标签,当使用 playlistItems.list 通过API公开时,不会出现在用户的上传播放列表中。
答案 1 :(得分:1)
您可以获取未列出的视频,而无需使用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。如果不是,请下载与您的语言相对应的库。
接下来转到您的You Tube帐户,然后创建一个名为“ 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从未列出的播放列表中返回未列出的视频。
答案 2 :(得分:0)
您只能使用forMine = true和type = video参数来获取已登录用户的不公开视频。登录方法必须为Oauth 2。