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

Python连接YouTube Analytics API出现授权错误问题求助

问题根因

你碰到的两个报错核心原因一致:谷歌在2022年10月正式停用了传统带外(OOB)OAuth授权流,也就是代码里flow.run_console()默认调用的urn:ietf:wg:oauth:2.0:oob回调地址,这个旧流程被判定存在安全风险,不管创建Web客户端还是桌面客户端,直接沿用旧示例代码都会触发报错。
之前教程里普遍推荐选择的「Others」类型客户端,本身就是为OOB流设计的,下线也是配合这次旧授权流的弃用动作。

可行修复方案

方案1:本地脚本/个人调试场景(最简便)

  1. 保留已经创建的桌面应用类型OAuth 2.0客户端,不要用Web应用客户端做本地脚本调试。
  2. 替换旧的授权逻辑,弃用run_console()方法,改用本地端口监听的授权流,同时修正代码里的权限配置错误:
    • 原代码里的credentials = flow.run_console()需要替换为本地服务回调逻辑,授权时会自动拉起浏览器,在本地端口接收授权回调,不需要手动复制粘贴授权码。
    • 原代码填写的scope有误:https://www.googleapis.com/auth/youtube.readonly是YouTube Data API的权限,不是YouTube Analytics API的权限,就算授权通过也会报403权限不足,需要替换为Analytics API对应的只读权限。
      调整完成的可运行代码如下:
    import os
    from googleapiclient.discovery import build
    from google_auth_oauthlib.flow import InstalledAppFlow
    from google.auth.transport.requests import Request
    from google.oauth2.credentials import Credentials
    
    # 注意替换为YouTube Analytics API的正确scope
    scopes = ["https://www.googleapis.com/auth/yt-analytics.readonly"]
    TOKEN_PATH = "yt_analytics_token.json"
    
    def main():
        api_service_name = "youtubeAnalytics"
        api_version = "v2"
        client_secrets_file = "cliente_analytics.json"
        creds = None
        # 本地缓存已生成的凭证,避免每次运行都重复授权
        if os.path.exists(TOKEN_PATH):
            creds = Credentials.from_authorized_user_file(TOKEN_PATH, scopes)
        # 凭证失效时自动刷新或重新走授权流程
        if not creds or not creds.valid:
            if creds and creds.expired and creds.refresh_token:
                creds.refresh(Request())
            else:
                flow = InstalledAppFlow.from_client_secrets_file(
                    client_secrets_file, scopes
                )
                # 用本地服务回调替代已废弃的run_console
                creds = flow.run_local_server(port=10086)
            # 把新生成的凭证存到本地
            with open(TOKEN_PATH, "w") as token:
                token.write(creds.to_json())
    
        youtube_analytics = build(api_service_name, api_version, credentials=creds)
    
        request = youtube_analytics.reports().query(
            dimensions="day",
            endDate="2021-04-01",
            ids="channel==MINE",
            maxResults=5,
            metrics="likes",
            startDate="2021-03-01"
        )
        response = request.execute()
        print(response)
    
    if __name__ == "__main__":
        main()
    
  3. 第一次运行代码会自动拉起浏览器跳转到谷歌授权页,正常登录对应YouTube账号授权即可。如果弹出「谷歌未验证此应用」的提示,不需要提交应用审核,点击提示页的「高级」->「继续访问(你的应用名)」就能完成授权,个人本地使用的脚本不需要走谷歌OAuth验证流程。

方案2:服务端部署的Web服务场景

不要使用桌面应用客户端,创建Web应用类型OAuth客户端,在谷歌云控制台的OAuth客户端配置页,把服务实际使用的回调地址添加到「已授权的重定向URI」列表中,代码里对应配置好重定向地址即可,不要使用任何OOB相关的回调地址。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 23:42:19