使用YouTube v3 API如何获取公开频道的视频列表
YouTube v3 API 获取频道全量公开视频方案
你的实现路径完全可行,不需要账号订阅权限,使用普通API Key即可拉取所有公开频道的上传视频,无需额外OAuth授权。
具体实现步骤
你之前通过videos.list接口从已知视频反查channel_id的逻辑是正确的,后续不需要调用搜索接口,按以下两步操作即可:
- 第一步:获取频道专属的上传视频播放列表ID
每个公开YouTube频道都会自动生成一个系统专属的「上传视频播放列表」,存储该账号所有公开上传的视频。你需要调用channels.list接口,传入拿到的channel_id,指定part参数为contentDetails,从返回结果的contentDetails.relatedPlaylists.uploads字段就能拿到这个播放列表ID。
对应代码片段(适配你当前使用的Python客户端):channel_req = youtube.channels().list( part="contentDetails", id=extracted_channel_id # 替换为你从视频响应中提取到的channel_id ) channel_resp = channel_req.execute() uploads_pl_id = channel_resp["items"][0]["contentDetails"]["relatedPlaylists"]["uploads"] - 第二步:分页拉取播放列表内的所有视频
拿到播放列表ID后,循环调用playlistItems.list接口拉取全量内容即可,单次请求最多可拉取50条结果,需要通过nextPageToken处理分页逻辑。
对应代码片段:all_channel_videos = [] next_page = None while True: pl_req = youtube.playlistItems().list( part="snippet,contentDetails", playlistId=uploads_pl_id, maxResults=50, pageToken=next_page ) pl_resp = pl_req.execute() # 按需提取字段,示例提取视频ID、标题、发布时间 for item in pl_resp["items"]: all_channel_videos.append({ "video_id": item["contentDetails"]["videoId"], "title": item["snippet"]["title"], "published_at": item["snippet"]["publishedAt"] }) next_page = pl_resp.get("nextPageToken") if not next_page: break
注意事项
- 不推荐使用search接口拉取频道视频:
search.list接口单次请求配额消耗为100单位,是playlistItems.list接口的100倍,且最多仅返回500条结果,视频量较大的频道会出现数据遗漏,排序稳定性也较差。 - 如果需要获取视频的播放量、时长、标签等信息,可以等收集完全量
video_id后,按每批50个ID的粒度批量调用videos.list接口拉取,能大幅节省API配额。 - 你初始代码中
video_id = [video_id]为占位写法,实际运行时需要替换为真实的视频ID字符串,避免触发参数类型错误。
内容的提问来源于stack exchange,提问作者C. Cooney
相关产品推荐
相关产品推荐

