YouTube Data API v3是官方提供的获取YouTube平台数据的标准接口,通过它可以稳定获取指定频道的所有上传视频列表,适用于内容聚合、视频数据统计、自动同步更新等多种开发场景。

前期准备工作
在使用API之前,需要先完成基础配置,确保拥有合法的调用权限。
1. 创建Google Cloud项目
登录Google Cloud控制台,新建一个项目,在项目内启用YouTube Data API v3服务,这是调用接口的前提条件。
2. 获取API密钥
在凭据页面创建API密钥,根据使用场景选择限制类型,比如仅允许从指定域名或IP调用,避免密钥泄露被滥用。如果需要获取私有数据,还需要配置OAuth 2.0授权,本文以获取公开频道视频为例,使用API密钥即可。
获取频道上传列表的核心流程
获取频道上传视频列表需要两步请求,不能直接通过频道ID获取所有视频,需要先获取频道的上传播放列表ID,再从该播放列表中获取视频条目。
第一步:获取频道的上传播放列表ID
通过channels接口请求频道信息,指定part参数为contentDetails,就可以在响应中得到该频道对应的上传播放列表ID,参数id填写目标频道的ID。
请求示例:
GET https://www.googleapis.com/youtube/v3/channels?part=contentDetails&id=UC_x5XG1OV2P6uZZ5FSM9Ttw&key=你的API密钥
响应中的relatedPlaylists.uploads字段就是上传播放列表的ID,示例响应结构如下:
{
"items": [
{
"contentDetails": {
"relatedPlaylists": {
"uploads": "UU_x5XG1OV2P6uZZ5FSM9Ttw"
}
}
}
]
}
第二步:从上传播放列表获取视频列表
拿到上传播放列表ID后,调用playlistItems接口,指定part为snippet,playlistId为上一步得到的上传播放列表ID,就可以获取该播放列表下的视频条目。
基础请求示例:
GET https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&playlistId=UU_x5XG1OV2P6uZZ5FSM9Ttw&key=你的API密钥
响应中的items数组就是视频列表,每个条目包含视频ID、标题、描述、发布时间等信息,示例响应结构:
{
"items": [
{
"snippet": {
"title": "视频标题",
"description": "视频描述内容",
"publishedAt": "2024-05-01T08:00:00Z",
"resourceId": {
"videoId": "dQw4w9WgXcQ"
}
}
}
]
}
处理分页获取全部视频
YouTube Data API v3的单次请求最多返回50条结果,大部分频道的上传视频数量都会超过这个限制,因此需要处理分页逻辑,循环请求直到获取所有视频。
响应中会返回nextPageToken字段,当该字段存在时,说明还有下一页数据,将nextPageToken作为下一次请求的pageToken参数传入即可获取下一页内容,直到nextPageToken为空,代表所有数据已经获取完毕。
完整的分页获取代码示例(Python):
import requests
API_KEY = "你的API密钥"
CHANNEL_ID = "UC_x5XG1OV2P6uZZ5FSM9Ttw"
BASE_URL = "https://www.googleapis.com/youtube/v3"
# 第一步:获取上传播放列表ID
def get_upload_playlist_id(channel_id):
url = f"{BASE_URL}/channels"
params = {
"part": "contentDetails",
"id": channel_id,
"key": API_KEY
}
response = requests.get(url, params=params)
data = response.json()
if "items" in data and len(data["items"]) > 0:
return data["items"][0]["contentDetails"]["relatedPlaylists"]["uploads"]
return None
# 第二步:分页获取所有视频
def get_all_videos(playlist_id):
url = f"{BASE_URL}/playlistItems"
videos = []
next_page_token = None
while True:
params = {
"part": "snippet",
"playlistId": playlist_id,
"key": API_KEY,
"maxResults": 50 # 单次最多返回50条
}
if next_page_token:
params["pageToken"] = next_page_token
response = requests.get(url, params=params)
data = response.json()
# 提取视频信息
for item in data.get("items", []):
video_info = {
"video_id": item["snippet"]["resourceId"]["videoId"],
"title": item["snippet"]["title"],
"publish_time": item["snippet"]["publishedAt"]
}
videos.append(video_info)
# 处理分页
next_page_token = data.get("nextPageToken")
if not next_page_token:
break
return videos
if __name__ == "__main__":
upload_playlist_id = get_upload_playlist_id(CHANNEL_ID)
if upload_playlist_id:
all_videos = get_all_videos(upload_playlist_id)
print(f"共获取到{len(all_videos)}个视频")
# 打印前3个视频信息
for video in all_videos[:3]:
print(f"视频ID:{video['video_id']},标题:{video['title']}")
else:
print("未找到对应的上传播放列表")
常见问题与注意事项
- API有每日请求配额限制,默认每天免费配额为10000单位,每次
channels请求消耗1单位,playlistItems请求消耗1单位,需要注意控制请求频率,避免配额耗尽。 - 如果返回403错误,首先检查API密钥是否正确,是否启用了YouTube Data API v3服务,其次检查是否触发了配额限制。
- 如果需要获取视频的更多详细信息,比如播放量、点赞数,可以拿到视频ID后调用
videos接口,指定part为statistics即可获取对应数据。 - 不要将API密钥硬编码在前端代码中,避免密钥泄露,建议通过后端服务中转请求,对密钥进行保护。
YouTube_Data_API_v3频道视频列表API授权视频数据获取API请求修改时间:2026-06-17 06:54:46