如何用Python结合YouTube V3 API自动获取频道新上传视频?
获取YouTube频道新上传视频:API Key vs OAuth 怎么选?
一、两种认证方式的核心区别
API Key方式:
- 适用场景:只获取公开频道的公开视频数据(比如新上传内容),不需要操作用户的YouTube账号(如上传视频、修改频道设置)。
- 优势:配置简单,无需用户授权,适合批量抓取公开内容。
- 局限:有请求配额限制,无法访问私有内容,也不能执行需要用户权限的操作。
OAuth方式:
- 适用场景:需要访问用户的私有频道数据,或是执行需用户权限的操作(如管理播放列表、上传视频)。
- 优势:可访问私有内容,权限覆盖更全面。
- 局限:配置繁琐,需要用户手动授权,除非保存刷新令牌,否则每次运行可能需要重新验证。
二、你的场景该选哪种?
你只是要获取频道新上传的公开视频,直接用API Key方式就足够了,OAuth完全没必要,徒增配置复杂度。
三、Python实现步骤(API Key版)
- 获取API Key:
前往Google Cloud控制台创建项目,启用YouTube Data API v3,生成专属API Key。 - 安装依赖库:
pip install google-api-python-client - 示例代码:
from googleapiclient.discovery import build import datetime # 替换为你的API Key API_KEY = "你的API_KEY" # 替换为目标频道ID(可从频道主页URL获取) CHANNEL_ID = "目标频道ID" def get_latest_videos(): youtube = build('youtube', 'v3', developerKey=API_KEY) # 获取频道的上传列表ID channel_response = youtube.channels().list( part='contentDetails', id=CHANNEL_ID ).execute() uploads_playlist_id = channel_response['items'][0]['contentDetails']['relatedPlaylists']['uploads'] # 获取上传列表中的最新视频 playlist_response = youtube.playlistItems().list( part='snippet', playlistId=uploads_playlist_id, maxResults=5, # 可调整获取的最新视频数量 order='date' ).execute() for item in playlist_response['items']: video_title = item['snippet']['title'] video_url = f"https://www.youtube.com/watch?v={item['snippet']['resourceId']['videoId']}" publish_time = datetime.datetime.fromisoformat(item['snippet']['publishedAt'].replace('Z', '+00:00')) print(f"标题: {video_title}") print(f"链接: {video_url}") print(f"发布时间: {publish_time.strftime('%Y-%m-%d %H:%M:%S')}\n") if __name__ == "__main__": get_latest_videos() - 额外说明:
- 代码逻辑是先定位频道专门存储上传视频的播放列表,再按发布时间排序抓取最新内容。
- 若要定时检查新视频,可记录上次获取的最新视频发布时间,下次仅抓取晚于该时间的内容。
四、注意事项
- API Key需妥善保管,避免泄露至公开代码仓库。
- YouTube Data API有每日配额限制(默认10000单位),上述请求单次约消耗3-5单位,日常使用完全足够。
- 仅当目标频道为私有频道时,才需要使用OAuth方式,此时需配置OAuth客户端ID,由频道所有者授权应用访问数据。
内容的提问来源于stack exchange,提问作者Behnam Ebtesam
相关产品推荐
相关产品推荐

