Youtube API获得未上市的视频



对于一个项目,我必须列出来自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

相关内容

  • 没有找到相关文章