对于一个项目,我必须列出来自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客户端。您的API密钥应该类似于"aisdkjkdk7guskdkjdksklmssddfm4ro4e_4et_www"
如果使用c#,请下载google . api . youtube。v3版本1.40.2.1593来自Nuget。如果没有,请下载对应语言的库。
下一步去你的YouTube帐户,并创建一个新的播放列表,称为"未列出的视频由API密钥返回"(在YouTube工作室,如果你编辑一个视频,你已经上传有一个下拉菜单的播放列表,你可以分配一个已经存在或创建一个新的)
然后进入你的频道,点击播放列表选项卡。编辑您刚刚创建的新播放列表,使其未列出,否则您添加到此播放列表的未列出的视频将在您的频道的UI上可见。
在您的频道找到您再次创建的播放列表,并单击以查看它。您要访问的URL将有一个&列表查询字符串参数,您需要获得该Id。例如:https://www.youtube.com/watch?v=kskScbSkdSDg& = 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 key而不是OAuth从你的未列出的播放列表中返回未列出的视频。
这可能看起来有点违反直觉,但YouTube有一个怪癖,当一个未列出的视频被放置在播放列表中,它实际上是在播放列表中可见,通过API和YouTube网站本身;但只在播放列表视图上。视频仍然无法通过正常手段(API或网站)进行搜索,不会显示在频道的"视频"选项卡上,并且不会出现在用户的上传播放列表中,当通过API使用 playlisttitems .list暴露时。
您只能通过使用forMine=true和type=video参数获取登录用户未列出的视频。登录方法必须是Oauth 2