指定channelId的YouTube Search API为何返回其他频道视频?
问题:YouTube API查询指定频道关键词视频返回其他频道结果?
我调用YouTube API查询指定频道中包含特定关键词的视频,参数如下:
- channelId:
UCIG1k8umaCIIrujZPzZPIMA("Made by Google"频道) - 查询词:
town hall
使用的请求命令:
curl \ 'https://youtube.googleapis.com/youtube/v3/search?part=snippet&channelId=UCIG1k8umaCIIrujZPzZPIMA&q=town%20hall&key=[YOUR_API_KEY]' \ --header 'Authorization: Bearer [YOUR_ACCESS_TOKEN]' \ --header 'Accept: application/json' \ --compressed
但返回结果里的首个视频来自完全不同的频道(channelId为UCL_A4jkwvKuMyToAPy3FQKQ),请问是操作有误还是API存在问题?
回答
这不是API的问题,是请求参数设置不完整导致的。
核心原因
当仅使用channelId + q参数调用Search API时,默认返回的是所有与关键词匹配且和目标频道存在关联的内容——不仅包括该频道上传的视频,还涵盖其他频道发布的提及目标频道的视频、目标频道的播放列表等。再加上默认排序规则是按内容相关性而非频道归属,就会出现其他频道的内容排在前列的情况。
解决办法
修改请求,添加type=video参数,指定仅返回视频类型的结果,同时过滤掉非目标频道的内容:
修改后的curl命令:
curl \ 'https://youtube.googleapis.com/youtube/v3/search?part=snippet&channelId=UCIG1k8umaCIIrujZPzZPIMA&q=town%20hall&type=video&key=[YOUR_API_KEY]' \ --header 'Authorization: Bearer [YOUR_ACCESS_TOKEN]' \ --header 'Accept: application/json' \ --compressed
如果需要更严格的过滤,可以额外添加fields参数,确保返回结果的items.snippet.channelId严格等于目标频道ID,但添加type=video已经能解决绝大多数场景的问题。
内容的提问来源于stack exchange,提问作者Luke
相关产品推荐
相关产品推荐

