Python调用YouTube API:如何指定OAuth 2.0 Client ID对应不同频道发布
解决AutomatedYoutube多频道OAuth授权绑定问题
问题核心在于该项目默认会将授权后的令牌存储在同一个文件(通常是token.json),哪怕你换了不同的Client ID,程序还是会复用旧令牌,导致始终指向第一个授权的频道。要实现每个Client ID对应专属频道,需要从令牌存储隔离入手修改:
1. 修改令牌存储逻辑,为每个频道分配独立令牌文件
找到项目中负责OAuth认证的代码文件(大概率是auth.py或者主脚本里的认证函数),找到加载和保存令牌的代码段,修改成支持自定义令牌文件名的形式:
比如原代码可能是这样:
def get_authenticated_service(): creds = None # 固定加载token.json if os.path.exists('token.json'): with open('token.json', 'r') as token: creds = Credentials.from_authorized_user_file('token.json', SCOPES) # 省略授权流程代码... # 固定保存到token.json with open('token.json', 'w') as token: token.write(creds.to_json())
修改为支持传入令牌文件名参数:
def get_authenticated_service(token_file): creds = None # 根据传入的参数加载对应令牌文件 if os.path.exists(token_file): with open(token_file, 'r') as token: creds = Credentials.from_authorized_user_file(token_file, SCOPES) # 省略授权流程代码... # 保存到指定的令牌文件 with open(token_file, 'w') as token: token.write(creds.to_json())
2. 调用时绑定Client ID与对应令牌文件
运行代码时,先指定当前使用的Client ID配置文件,再传入对应频道的令牌文件名:
import os from your_auth_module import get_authenticated_service # 频道1:使用client1.json和专属令牌文件token_channel1.json os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = 'client1.json' service_channel1 = get_authenticated_service('token_channel1.json') # 频道2:同理替换为client2.json和token_channel2.json os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = 'client2.json' service_channel2 = get_authenticated_service('token_channel2.json')
3. 触发新授权流程
- 先删除项目目录下原有的
token.json(如果存在),避免程序误加载旧令牌。 - 运行对应频道的代码时,确保指定的令牌文件(比如
token_channel1.json)不存在,此时程序会自动弹出浏览器授权窗口,务必选择对应的目标频道完成授权。
4. 验证绑定有效性
授权完成后,打开生成的令牌文件,检查其中的client_id字段是否和当前使用的Client ID一致,同时确认上传视频时是否发布到了目标频道。
内容的提问来源于stack exchange,提问作者VirginSteel
相关产品推荐
相关产品推荐

