调用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
相关产品推荐
相关产品推荐

