You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

构建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的元数据?

按以下步骤逐一排查修复:

  1. 启用YouTube Partner API:登录Google Cloud Console,找到你的项目,搜索并启用「YouTube Partner API」
  2. 更新依赖库:执行命令更新相关库到最新版本:
    pip install --upgrade google-api-python-client google-auth-oauthlib
    
  3. 正确构建客户端并调用接口:使用标准代码构建客户端,明确指定需要返回的字段(包括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')
    
  4. 映射字段并保存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,步骤如下:

  1. 提取访问令牌:从token.json文件中读取access_token字段
  2. 构造GET请求:
    • 请求URL:https://www.googleapis.com/youtube/partner/v1/assets?contentOwnerId=你的内容所有者ID&part=id,snippet,ownership,customId
    • 请求头:添加Authorization: Bearer 你的访问令牌
  3. 处理分页:如果响应中包含nextPageToken,则在URL后追加&pageToken=分页令牌继续请求,直到没有nextPageToken为止
  4. 解析并保存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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 04:37:27