YouTube Data API v3 OAuth2.0授权流程失效,疑似缓存问题
问题:更换谷歌云账号后YouTube API OAuth授权失败
问题现象
- 原谷歌云账号及YouTube频道下,Python结合YouTube Data API v3上传视频正常:首次运行触发OAuth 2.0授权流程,命令行弹出授权请求,生成令牌文件后后续运行无需重复授权
- 更换新谷歌云账号与YouTube频道后,同一电脑运行代码出现异常:
- 命令行未触发新账号授权请求,先报无法访问
myscript.py-oauth2.json文件错误 - 后续抛出
AttributeError: 'ArgsNamespace' object has no attribute 'logging_level'错误
- 命令行未触发新账号授权请求,先报无法访问
- 怀疑旧账号授权缓存残留导致,需确认原因并获取清除方法
原因分析
- 旧授权令牌残留:代码通过
Storage("%s-oauth2.json" % sys.argv[0])生成的令牌文件与旧账号绑定,系统会优先读取该文件,无法触发新账号的授权流程;若文件权限异常则会出现无法访问的报错 - 参数缺失:自定义的
ArgsNamespace类缺少run_flow方法必需的logging_level参数,导致授权流程执行时抛出属性错误
解决方法
一、清除旧授权缓存
- 删除本地令牌文件:找到代码生成的
[你的脚本文件名]-oauth2.json(例如myscript.py-oauth2.json),直接删除即可 - 清除系统级OAuth缓存:
- Windows:删除
C:\Users\[你的用户名]\AppData\Roaming\Google\Credentials目录下的相关文件 - macOS/Linux:删除
~/.credentials/目录下的YouTube API相关文件
- Windows:删除
二、修复代码参数缺失问题
修改自定义的ArgsNamespace类,补充logging_level参数:
class ArgsNamespace: file = video_youtube title = "title" description = "content" category = "24" # 24为娱乐分类,原分类为22 keywords = "shorts, curiosity" privacyStatus = "public" logging_level = 'INFO' # 新增必需参数
额外修复代码中拼写错误:initialize_upload函数内snippet字段的chennelId改为channelId,避免频道ID不生效:
snippet=dict( title=options.title, description=options.description, tags=tags, categoryId=options.category, channelId= "xxx" # 修正拼写错误 )
内容的提问来源于stack exchange,提问作者Borja
相关产品推荐
相关产品推荐

