为何通过Handle搜索YouTube频道失败,但可通过ID访问?
YouTube API v3 通过Handle获取频道的问题排查
YouTube API v3目前没有提供直接通过Handle获取YouTube频道的便捷方式,通用替代方案是将Handle作为搜索词执行搜索,再对结果进行验证。
常规实现代码
搜索获取首个频道结果
SearchResource.ListRequest SRLR = this.YouTubeService.Search.List("snippet"); SRLR.Q = Handle; // 曾尝试禁用SafeSearch,但无效果 // SRLR.SafeSearch = SearchResource.ListRequest.SafeSearchEnum.None; SRLR.MaxResults = 1; // 预期SR为搜索到的首个频道结果,无结果时会抛出异常 SearchResult SR = SRLR.Execute().Items.Where(x => x.Id.Kind == "youtube#channel").Single();
验证频道Handle正确性
获取到频道ID后,需进一步对比搜索词与实际频道Handle,确保结果准确:
ChannelsResource.ListRequest CRLR = this.YouTubeService.Channels.List(part); CRLR.Id = SR.Snippet.ChannelId; Channel Channel = CRLR.Execute().Items.Single(); if (Channel.Snippet.CustomUrl != Handle) throw new System.Exception($"No channel with handle \"{Handle}\"");
遇到的异常情况
上述方法在@aha、@Queen等短Handle上表现正常,但针对@lachaiseproductions1654这个Handle搜索时,未返回对应频道,反而得到5条无关视频。不过该频道在YouTube网页搜索中可正常找到。
对比测试:直接HTTP调用正常
通过curl直接调用API能正常获取到目标频道结果:
$ curl 'https://www.googleapis.com/youtube/v3/search?q=@lachaiseproductions1654&type=channel&key=API_KEY'
返回结果:
{ "kind": "youtube#searchListResponse", "etag": "e7MNUTzPTPLLstR3AudmySikeJI", "regionCode": "FR", "pageInfo": { "totalResults": 1, "resultsPerPage": 1 }, "items": [ { "kind": "youtube#searchResult", "etag": "ELI76vrmCruoLt7k4Bb3ffs4V8s", "id": { "kind": "youtube#channel", "channelId": "UCDSqPuB6YKO4E5FjKP1R23Q" } } ] }
疑问
已尝试禁用SafeSearch但无效果,且该频道可通过ID(UCDSqPuB6YKO4E5FjKP1R23Q)正常访问,请问问题出在哪里?
内容的提问来源于stack exchange,提问作者Amessihel
相关产品推荐
相关产品推荐

