Youtube API 获取未列出的视频

Posted

技术标签:

【中文标题】Youtube API 获取未列出的视频【英文标题】:Youtube API get unlisted videos 【发布时间】:2015-12-03 22:28:56 【问题描述】:

对于一个项目,我必须列出来自 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 获取其他人的不公开视频,除非他们给了你视频的链接。查看this 答案。 thx 我认为尝试寻找解决方案也是徒劳的 好吧,如果我用 playlistId 调用 api,它会向我显示未列出的视频。例如,这个播放列表有几个公开和未列出的视频youtube.com/…,当我在这里尝试developers.google.com/youtube/v3/docs/playlistItems/list#try-it 时,在我的服务器上,我得到了没有 oauth 的未列出的视频。奇怪 【参考方案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】:

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

【讨论】:

您能给我们展示一个对 REST API 的 GET 请求示例吗?【参考方案3】:

您只能通过使用forMine=true和type=video参数获取登录用户的不公开视频。登录方式必须是 Oauth 2。

【讨论】:

以上是关于Youtube API 获取未列出的视频的主要内容,如果未能解决你的问题,请参考以下文章

用于获取频道上所有视频的 Youtube Api(不再可用错误)

如何通过 YouTube Data API v3 从我自己的 YouTube 频道获取所有视频

YouTube API:未获取给定频道的所有视频

如何通过 youtube API 获取已删除视频的列表

使用 YouTube API 列出从新西兰上传的纪录片视频

youtube data api 3 php,如何从一个频道获取超过 50 个视频?