Youtube /v3/search API 不再返回直播视频

Posted

技术标签:

【中文标题】Youtube /v3/search API 不再返回直播视频【英文标题】:Youtube /v3/search API no longer returning live videos 【发布时间】:2020-01-12 13:08:47 【问题描述】:

我之前使用YouTube search API按频道ID检索直播视频,但最近API开始返回空响应。

例如,我正在从https://www.googleapis.com/youtube/v3/search?part=snippet&type=video&eventType=live&key=YOUTUBE_KEY&channelId=UCPde4guD9yFBRzkxk2PatoA 检索,它应该返回所有从channelID = UCPde4guD9yFBRzkxk2PatoA 直播的视频。这个频道有 24/7 的直播,但我得到的回复是:


 "kind": "youtube#searchListResponse",
 "etag": "\"8jEFfXBrqiSrcF6Ee7MQuz8XuAM/-f6JA5_OcXz2RWuH1mpAA2_9mM8\"",
 "regionCode": "US",
 "pageInfo": 
  "totalResults": 0,
  "resultsPerPage": 5
 ,
 "items": []

正如我之前提到的,这个请求直到最近才正常检索数据。我无法在 YouTube API 文档上找到任何更改,所以我想知道是否有人知道发生了什么变化,或者我是否可以采取不同的方法来按频道 ID 拉取实时视频。

【问题讨论】:

【参考方案1】:

不是答案,但似乎端点没有返回任何包含直播的最近视频。据我所知,它不会返回过去 24 小时内发布的任何内容。

在 Google 支持上发现了一个未解决的问题 https://support.google.com/youtube/thread/14611425?hl=en

【讨论】:

感谢您提供的信息。听起来 API 确实存在问题。【参考方案2】:

作为替代方案,您可以加载“uploads”播放列表, 检查https://***.com/a/27872244/2154075

【讨论】:

【参考方案3】:

试试这个代码

   async static Task<IEnumerable<YouTubeVideo>> GetVideosList(Configurations configurations, string searchText = "", int maxResult = 20)
    
        List<YouTubeVideo> videos = new List<YouTubeVideo>();

        using (var youtubeService = new YouTubeService(new BaseClientService.Initializer()
        
            ApiKey = configurations.ApiKey
        ))
        
            var searchListRequest = youtubeService.Search.List("snippet");
            searchListRequest.Q = searchText;
            searchListRequest.MaxResults = maxResult;
            searchListRequest.ChannelId = configurations.ChannelId;
            searchListRequest.Type = "video";
            searchListRequest.Order = SearchResource.ListRequest.OrderEnum.Date;// Relevance;


            var searchListResponse = await searchListRequest.ExecuteAsync();


            foreach (var responseVideo in searchListResponse.Items)
            
                videos.Add(new YouTubeVideo()
                
                    Id = responseVideo.Id.VideoId,
                    Description = responseVideo.Snippet.Description,
                    Title = responseVideo.Snippet.Title,
                    Picture = GetMainImg(responseVideo.Snippet.Thumbnails),
                    Thumbnail = GetThumbnailImg(responseVideo.Snippet.Thumbnails)
                );
            

            return videos;
        

    

【讨论】:

【参考方案4】:

从 8/2020 开始,API 发生了一些变化,您需要添加 &type=video 或将其添加到您的发布请求中,否则在某些情况下,您将收到来自端点的空响应或随机响应

对于较旧的频道,您可能会得到正确的响应,这似乎是 API 中的错误

https://www.googleapis.com/youtube/v3/search?key=your_key_here&channelId=channel_id_here&part=snippet&order=date&maxResults=20&type=video

【讨论】:

以上是关于Youtube /v3/search API 不再返回直播视频的主要内容,如果未能解决你的问题,请参考以下文章

YouTube v3 API 搜索频道视频中的多个搜索查询

用于获取频道视频的 Youtube api v3

Youtube API v3 从给定频道获取每个视频 ID

Youtube Data API v3:按日期排序不起作用

YouTube API V3 在根据特定国家/地区获取热门频道时遇到困难

如何使用来自 YouTube Data API V3 的 enpoint 搜索通过 channelId 获取频道图标