使用YouTube Data API v3时遭遇Google OAuth 400错误及令牌访问问题
问题描述
调试YouTube Data API v3时,将官方Python 2上传代码适配到Python 3(替换apiclient为googleapiclient),配置正确的client_secrets.json后执行脚本:
python upload_video.py --file="/tmp/test_video_file.flv" --title="Summer vacation in California" --description="Had fun surfing in Santa Cruz" --keywords="surfing,Santa Cruz" --category="22" --privacyStatus="private"
完成浏览器登录授权后,终端返回错误:Authentication has failed: Invalid response: 400.。调整OAuth代码为:
flow = InstalledAppFlow.from_client_secrets_file("client_secrets.json", scopes=["openid", "https://www.googleapis.com/auth/youtube.upload"]) credentials = flow.run_local_server() service = build('calendar', 'v3', credentials=credentials)
运行时又出现flow.run_local_server()无法访问令牌的错误。已尝试更换设备、新建Google应用,问题仍未解决。
解决方案
修正API服务构建错误
你调整后的代码错误构建了Calendar API服务,而非YouTube Data API,这会导致授权凭据与服务需求不匹配。正确代码:flow = InstalledAppFlow.from_client_secrets_file("client_secrets.json", scopes=["https://www.googleapis.com/auth/youtube.upload"]) credentials = flow.run_local_server() service = build('youtube', 'v3', credentials=credentials)检查Client Secrets配置
- 确保
client_secrets.json由Desktop app类型的OAuth客户端ID生成,而非Web应用或其他类型。文件中应包含installed字段,而非web字段。 - 确认Google Cloud Console中,该客户端ID的重定向URI包含
http://localhost:8080/(或你自定义的端口)。
- 确保
处理令牌访问问题
- 指定未被占用的端口运行本地服务器:
credentials = flow.run_local_server(port=8081) - 清除旧凭据缓存:删除用户目录下的
.credentials文件夹(Linux/macOS为~/.credentials,Windows为C:\Users\<你的用户名>\.credentials),重新执行授权流程。 - 检查本地防火墙是否允许本地端口的入站请求,避免回调被拦截。
- 指定未被占用的端口运行本地服务器:
验证基础配置
- 确认Google Cloud Console中已启用YouTube Data API v3,未启用会导致授权后无法正常调用API。
- 确保用于授权的Google账号无上传限制(新账号可能存在初始限制),且具备YouTube频道权限。
内容的提问来源于stack exchange,提问作者murjo06
相关产品推荐
相关产品推荐

