如何通过YouTube API获取指定频道的全部视频?
YouTube Data API 拉取指定频道全量视频操作指南
1. 前置准备
- 准备可用的Google账号,在Google Cloud控制台创建新项目,搜索启用「YouTube Data API v3」,进入「凭据」页面创建API密钥,该密钥为后续所有接口调用的必填参数。
- 获取目标频道的唯一ID:公开频道可直接从主页URL提取,格式为
https://www.youtube.com/channel/【频道ID】;使用自定义域名的频道,可在页面源码中搜索externalId字段获取对应ID。
2. 核心实现逻辑
YouTube API不支持直接查询频道全量视频,需分两步实现:
- 调用Channels接口获取频道专属的「上传视频播放列表ID」,频道所有公开上传的视频都会自动收录到该播放列表中
- 调用PlaylistItems接口分页拉取该播放列表的所有条目,直到没有下一页标识为止
3. 具体接口调用步骤
步骤1:获取上传播放列表ID
调用Channels接口,携带以下参数:
part:固定填contentDetailsid:填写目标频道的IDkey:填写你申请的API密钥
从返回结果的items[0].contentDetails.relatedPlaylists.uploads字段中,即可获取到上传视频播放列表ID。
步骤2:分页拉取全量视频
调用PlaylistItems接口,第一次请求携带以下参数:
part:按需填写,常用组合为snippet,contentDetails,statistics,分别对应视频基础信息、发布信息、播放/点赞等统计数据playlistId:填写上一步获取的上传播放列表IDmaxResults:可填范围为1-50,建议填最大值50减少请求次数key:填写你的API密钥
如果频道视频量超过50条,返回结果会携带nextPageToken字段,后续请求新增pageToken参数,值填上次返回的nextPageToken,重复请求直到返回结果中无nextPageToken,即拉完所有公开视频。
4. Python 示例代码
import requests # 替换为你自己的参数 API_KEY = "YOUR_API_KEY" TARGET_CHANNEL_ID = "TARGET_CHANNEL_ID" # 第一步:获取上传播放列表ID channel_res = requests.get( url="https://www.googleapis.com/youtube/v3/channels", params={ "part": "contentDetails", "id": TARGET_CHANNEL_ID, "key": API_KEY } ).json() uploads_playlist_id = channel_res["items"][0]["contentDetails"]["relatedPlaylists"]["uploads"] # 第二步:分页拉取所有视频 all_videos = [] next_page_token = None while True: playlist_res = requests.get( url="https://www.googleapis.com/youtube/v3/playlistItems", params={ "part": "snippet,contentDetails,statistics", "playlistId": uploads_playlist_id, "maxResults": 50, "key": API_KEY, "pageToken": next_page_token } ).json() all_videos.extend(playlist_res["items"]) next_page_token = playlist_res.get("nextPageToken") # 没有下一页时终止循环 if not next_page_token: break print(f"拉取完成,共获取{len(all_videos)}条视频") # 后续可自行从all_videos中提取需要的字段存储
5. 注意事项
- 配额限制:默认每个Google Cloud项目的YouTube API日配额为10000点,调用1次Channels接口消耗1点,调用1次PlaylistItems接口消耗1点,正常拉取数十万条以内的视频不会超出配额,量级更大的需求可申请配额扩容。
- 内容权限:普通API密钥仅能拉取频道公开的视频,未公开、私有视频需要频道所有者通过OAuth 2.0授权后才能拉取。
- 异常处理:实际使用时建议添加错误捕获逻辑,返回403状态码一般为配额耗尽,返回429状态码为请求频率过高,需添加延迟后重试。
- 性能优化:可新增
fields参数指定需要返回的字段,减少响应体积,不会额外消耗配额。
内容的提问来源于stack exchange,提问作者Arnav K
相关产品推荐
相关产品推荐

