构建YouTube Content ID API客户端报错,请求资产元数据获取方案
YouTube Content ID API 资产元数据检索问题解答
问题1:为何会出现「Error building API client: name: youtubePartner version: v1」错误?youtubePartner是否为YouTube Content ID API的正确API名称?
youtubePartner 是YouTube Content ID API所属的YouTube Partner API的正确服务名称,出现该错误的常见原因:
- 你的Google API客户端库版本过旧,无法正确解析该服务的发现文档
- 对应Google Cloud项目未启用YouTube Partner API
- 网络环境问题导致无法拉取API发现文档(客户端构建依赖该文档生成调用逻辑)
问题2:如何修复该问题以成功调用assets.list并获取包含customId的元数据?
按以下步骤逐一排查修复:
- 启用YouTube Partner API:登录Google Cloud Console,找到你的项目,搜索并启用「YouTube Partner API」
- 更新依赖库:执行命令更新相关库到最新版本:
pip install --upgrade google-api-python-client google-auth-oauthlib - 正确构建客户端并调用接口:使用标准代码构建客户端,明确指定需要返回的字段(包括
customId):from googleapiclient.discovery import build from google.oauth2.credentials import Credentials # 从token.json加载认证凭据 creds = Credentials.from_authorized_user_file('token.json') # 构建YouTube Partner API客户端 youtube_partner = build('youtubePartner', 'v1', credentials=creds) # 调用assets.list接口,指定内容所有者ID和需要的字段集合 response = youtube_partner.assets().list( contentOwnerId='你的内容所有者ID', part='id,snippet,ownership,customId' ).execute() # 处理分页(如果资产数量超过50条,需要循环获取) all_assets = [] all_assets.extend(response.get('items', [])) next_page_token = response.get('nextPageToken') while next_page_token: response = youtube_partner.assets().list( contentOwnerId='你的内容所有者ID', part='id,snippet,ownership,customId', pageToken=next_page_token ).execute() all_assets.extend(response.get('items', [])) next_page_token = response.get('nextPageToken') - 映射字段并保存CSV:将返回的资产数据映射到目标CSV列:
import csv with open('assets_metadata.csv', 'w', newline='', encoding='utf-8') as csvfile: fieldnames = ['asset_id', 'type', 'title', 'custom_id'] writer = csv.DictWriter(csvfile, fieldnames=fieldnames) writer.writeheader() for asset in all_assets: writer.writerow({ 'asset_id': asset['id'], 'type': asset['snippet']['assetType'], 'title': asset['snippet']['title'], 'custom_id': asset.get('customId', '') })
问题3:使用youtubePartner API是否需要特定配置或库版本?
需要满足以下要求:
- Google Cloud配置:必须在项目中启用YouTube Partner API,且OAuth客户端ID的授权范围包含
https://www.googleapis.com/auth/youtubepartner - 库版本要求:
google-api-python-client版本需≥2.0.0,google-auth-oauthlib版本需≥0.4.1,旧版本会存在发现文档解析兼容性问题 - 账号权限:你的账号必须是对应内容所有者的授权管理员,且拥有「资产管理」类的权限
问题4:若googleapiclient不可用,应如何构造HTTP请求以确保获取包含customId的完整资产元数据?
可以直接通过HTTP请求调用API,步骤如下:
- 提取访问令牌:从
token.json文件中读取access_token字段 - 构造GET请求:
- 请求URL:
https://www.googleapis.com/youtube/partner/v1/assets?contentOwnerId=你的内容所有者ID&part=id,snippet,ownership,customId - 请求头:添加
Authorization: Bearer 你的访问令牌
- 请求URL:
- 处理分页:如果响应中包含
nextPageToken,则在URL后追加&pageToken=分页令牌继续请求,直到没有nextPageToken为止 - 解析并保存CSV:将JSON响应中的数据映射到目标列,保存为CSV文件
示例代码(使用requests库):
import requests import json import csv # 加载令牌 with open('token.json', 'r') as f: token_data = json.load(f) access_token = token_data['access_token'] content_owner_id = '你的内容所有者ID' all_assets = [] next_page_token = None # 循环获取所有资产 while True: url = f'https://www.googleapis.com/youtube/partner/v1/assets?contentOwnerId={content_owner_id}&part=id,snippet,ownership,customId' if next_page_token: url += f'&pageToken={next_page_token}' headers = {'Authorization': f'Bearer {access_token}'} response = requests.get(url, headers=headers) response_data = response.json() if 'items' in response_data: all_assets.extend(response_data['items']) next_page_token = response_data.get('nextPageToken') if not next_page_token: break # 保存为CSV with open('assets_metadata.csv', 'w', newline='', encoding='utf-8') as csvfile: fieldnames = ['asset_id', 'type', 'title', 'custom_id'] writer = csv.DictWriter(csvfile, fieldnames=fieldnames) writer.writeheader() for asset in all_assets: writer.writerow({ 'asset_id': asset['id'], 'type': asset['snippet']['assetType'], 'title': asset['snippet']['title'], 'custom_id': asset.get('customId', '') })
内容的提问来源于stack exchange,提问作者Viper Ashik
相关产品推荐
相关产品推荐

