如何通过YouTube API低配额获取指定频道最新视频
更低配额的YouTube频道最新视频获取方案
你当前使用的search.list接口单次请求消耗100配额是所有YouTube Data API读接口里配额成本最高的一档,完全可以用总配额消耗仅1-2点的方案替代,数据结果和原有方案完全一致。
实现原理
每个YouTube频道创建时,系统会自动生成一个和频道绑定的「上传视频专属播放列表」,列表内默认按视频发布时间倒序排列该频道所有公开上传的视频,不需要走全局搜索逻辑就能直接取到最新视频内容。
具体步骤
- 首次配置时调用
channels.list接口获取频道绑定的上传播放列表ID:该接口单次仅消耗1配额,请求仅需传目标频道ID,返回结果中relatedPlaylists.uploads字段即为所需的播放列表ID。这个ID是频道固定属性,一次获取后永久有效,后续不需要重复调用该接口。 - 日常拉取最新视频时调用
playlistItems.list接口:该接口单次同样仅消耗1配额,传入之前拿到的上传播放列表ID,设置maxResults=1,返回的第一条结果就是频道最新发布的公开视频,元数据字段和原有search接口返回的snippet内容基本对齐。
注意:该方案仅返回频道自主上传的公开视频,和你原有请求中加了
type=video、order=date筛选条件的返回结果完全匹配,不会混入频道转发、收藏的其他内容,不存在数据偏差。
优化后代码
日常调用版本(单次请求仅耗1配额,需要提前缓存上传播放列表ID)
import requests from urllib.parse import urlencode # 提前获取后永久固定填写即可 UPLOADS_PLAYLIST_ID = "目标频道对应的上传播放列表ID" YOUR_API_KEY = "你的YouTube API密钥" url_params = { "part": "snippet", "playlistId": UPLOADS_PLAYLIST_ID, "key": YOUR_API_KEY, "maxResults": 1 } req = f"https://www.googleapis.com/youtube/v3/playlistItems?{urlencode(url_params)}" data = requests.get(req).json() # 最新视频ID可从 data['items'][0]['snippet']['resourceId']['videoId'] 取到
首次获取上传播放列表ID代码(仅需运行1次,消耗1配额)
CHANNEL_ID = "目标频道ID" channel_params = { "part": "contentDetails", "id": CHANNEL_ID, "key": YOUR_API_KEY } channel_req = f"https://www.googleapis.com/youtube/v3/channels?{urlencode(channel_params)}" channel_data = requests.get(channel_req).json() UPLOADS_PLAYLIST_ID = channel_data['items'][0]['contentDetails']['relatedPlaylists']['uploads']
内容的提问来源于stack exchange,提问作者TheAmazingJeh
相关产品推荐
相关产品推荐

