Youtube API获取不公开的视频

Bou*_*ews 5 youtube api privacy youtube-api youtube-data-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.');
                }
            }
        });
Run Code Online (Sandbox Code Playgroud)

vvv*_*v4d 5

您可以使用 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 Key 返回的未列出视频”的新播放列表(在 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;
            }

        }
Run Code Online (Sandbox Code Playgroud)

如果您调用 GetPlaylistVideos,您将看到它使用 API 密钥而不是 OAuth 从您的未列出播放列表中返回未列出的视频。


小智 3

有时这似乎有点违反直觉,但 YouTube 有一个怪癖,即当将不公开的视频放入播放列表时,它实际上会通过 API 和 YouTube 网站本身在该播放列表中可见;但仅限于播放列表视图。该视频仍然无法通过正常方式(API 或网站)进行搜索,不会显示在频道的“视频”选项卡上,并且在使用playlistItems.list通过 API 公开时也不会出现在用户的上传播放列表中。