Youtube API搜索相关性问题:返回结果不符预期如何解决?
解决YouTube API v3搜索结果不相关的问题
针对你遇到的搜索结果要么是无关热门视频、要么是低播放量翻唱的问题,可以通过以下几个关键优化来解决:
1. 限定视频分类为音乐
添加videoCategoryId参数指定音乐分类(ID为10),直接过滤非音乐类视频,大幅减少无关内容干扰。
2. 精确匹配关键词
给核心关键词加上双引号,强制API搜索完整匹配的内容,比如将查询词改为'"Cherry Wine" Hozier',避免模糊匹配带来的无关结果。
3. 结合播放量筛选高热度相关视频
仅靠order参数无法保证结果质量,建议先获取搜索结果的视频ID,再调用videos.list接口获取播放量等详细数据,筛选出播放量达标的视频(比如≥10万),再返回最终结果。
修改后的完整代码
from googleapiclient.discovery import build google_api_key = "你的API密钥" youtube = build('youtube', 'v3', developerKey=google_api_key) class VideoUrls: def __init__(self, name, url, view_count): self.name = name self.url = url self.view_count = view_count def __str__(self): return f"\n视频名称: {self.name}\n链接: {self.url}\n播放量: {self.view_count}" def youtube_request(query, results, min_views=100000): # 第一步:带优化参数的搜索请求 search_request = youtube.search().list( part="snippet", type="video", maxResults=results * 2, # 多获取一些结果用于筛选 q=query, order="relevance", videoCategoryId="10", # 限定音乐分类 ) search_response = search_request.execute() # 提取所有视频ID video_ids = [item['id']['videoId'] for item in search_response['items']] # 第二步:获取视频详细统计数据(播放量) videos_request = youtube.videos().list( part="snippet,statistics", id=",".join(video_ids) ) videos_response = videos_request.execute() # 筛选符合播放量要求的视频 filtered_videos = [] for item in videos_response['items']: view_count = int(item['statistics'].get('viewCount', 0)) if view_count >= min_views: name = item['snippet']['title'] url = f"https://www.youtube.com/watch?v={item['id']}" filtered_videos.append(VideoUrls(name, url, view_count)) # 按播放量降序排序,取指定数量的结果 filtered_videos.sort(key=lambda x: x.view_count, reverse=True) return filtered_videos[:results] # 使用精确匹配的查询词 videos = youtube_request('"Cherry Wine" Hozier', 5) for video in videos: print(video)
优化说明
- 搜索时请求
results*2数量的结果,留足筛选空间,避免因播放量过滤后结果不足。 - 添加
min_views参数可自定义播放量门槛,按需调整(比如改成10000针对小众歌曲)。 - 新增播放量显示,方便验证结果质量。
内容的提问来源于stack exchange,提问作者TheRaelHab
相关产品推荐
相关产品推荐

