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

调用YouTube API创建播放列表时,客户端密钥JSON格式不符报错

问题原因与解决方案

错误原因

你混淆了Google OAuth2的两类JSON文件:

  • 你加载的client_secret_*.json是客户端凭据文件,用于发起OAuth授权流程,仅包含应用的client_id、client_secret等应用级信息,没有用户授权后生成的refresh_token。
  • Credentials.from_authorized_user_info()方法要求传入的是用户授权令牌文件,该文件是用户完成OAuth授权后生成的,必须包含client_id、client_secret、refresh_token(或access_token)字段。

你的客户端密钥JSON结构不符合该方法的要求,且缺少关键的refresh_token,因此触发格式错误。

解决方法

方法1:完整OAuth授权流程(首次运行)

替换原代码中的凭证初始化逻辑,通过授权流程获取用户令牌:

from google.oauth2.credentials import Credentials
from google_auth_oauthlib.flow import InstalledAppFlow
from googleapiclient.discovery import build

# 定义所需权限
SCOPES = ["https://www.googleapis.com/auth/youtube"]

# 使用客户端密钥文件启动本地授权服务器
flow = InstalledAppFlow.from_client_secrets_file(
    "client_secret_XXXX.apps.googleusercontent.com.json", SCOPES
)
creds = flow.run_local_server(port=0)

# 可选:将令牌保存到文件,后续可直接复用
with open("token.json", "w") as token_file:
    token_file.write(creds.to_json())

# 构建YouTube API服务
youtube = build("youtube", "v3", credentials=creds)

# 创建播放列表
youtube.playlists().insert(
    part="snippet",
    body={"snippet": {"title": "MyNewPlaylistTest", "privacyStatus": "private"}}
).execute()

运行代码后会自动打开浏览器,引导你完成Google账号授权,授权成功后会生成包含refresh_token的令牌数据。

方法2:复用已保存的令牌文件

如果已经通过上述流程生成了token.json,后续可直接加载该文件初始化凭证:

creds = Credentials.from_authorized_user_file("token.json", SCOPES)

内容的提问来源于stack exchange,提问作者Yen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 14:25:19