求助:按(likes/dislikes)>100条件获取YouTube频道视频列表的方案
解决方法:按点赞/点踩比值筛选YouTube频道视频
YouTube Data API v3确实没有提供直接通过接口筛选(likes/dislikes)比值的参数,你需要通过以下步骤实现需求:
步骤1:获取目标频道的上传视频列表ID
调用channels.list接口,参数设置为part=contentDetails,传入频道ID或用户名,从返回结果的contentDetails.relatedPlaylists.uploads字段拿到该频道的上传视频播放列表ID。步骤2:遍历播放列表获取所有视频ID
调用playlistItems.list接口,参数part=contentDetails,传入上一步得到的播放列表ID。该接口分页返回数据,需通过pageToken遍历所有页面,收集所有视频的contentDetails.videoId。步骤3:批量获取视频的点赞/点踩数据
调用videos.list接口,参数part=statistics,将收集到的视频ID批量传入(一次最多支持50个ID),获取每个视频的statistics.likeCount和statistics.dislikeCount(注意:dislikeCount可能返回null或0,需做异常处理)。步骤4:本地筛选符合条件的视频
对每个视频计算likeCount / dislikeCount,筛选出比值大于100的视频。注意处理dislikeCount为0的情况(可直接排除,或根据需求视为无限大)。
示例代码片段(Python)
# 假设已获取视频ID列表video_ids from googleapiclient.discovery import build api_key = "YOUR_API_KEY" youtube = build('youtube', 'v3', developerKey=api_key) # 批量获取视频统计数据 def get_video_stats(video_ids): stats = [] for i in range(0, len(video_ids), 50): batch_ids = video_ids[i:i+50] request = youtube.videos().list( part="statistics", id=",".join(batch_ids) ) response = request.execute() for item in response['items']: like_count = int(item['statistics'].get('likeCount', 0)) dislike_count = int(item['statistics'].get('dislikeCount', 0)) stats.append({ 'video_id': item['id'], 'like_count': like_count, 'dislike_count': dislike_count }) return stats # 筛选比值>100的视频 video_stats = get_video_stats(video_ids) filtered_videos = [ vid for vid in video_stats if vid['dislike_count'] > 0 and (vid['like_count'] / vid['dislike_count']) > 100 ]
注意事项
- YouTube Data API有配额限制,批量请求会消耗配额,建议合理控制请求频率和批量大小。
- 如果频道视频数量极大,遍历播放列表可能需要多次请求,注意处理分页逻辑。
- dislikeCount字段在部分地区或视频可能无法获取,需做好兼容处理。
内容的提问来源于stack exchange,提问作者Jumaniyaz
相关产品推荐
相关产品推荐

