Google Sheets调用YouTube API报错:API Key与认证凭据来自不同项目如何解决
报错根因
你当前使用的Apps Script内置YouTube高级服务,默认绑定Apps Script自动生成的默认GCP项目,与你自行在云控制台开通YouTube API、生成密钥的自定义项目不属于同一个主体,两者混用会触发跨项目校验报错,此前可正常运行是因为平台校验规则未完全收紧,近期规则更新后才触发异常。
解决方案1(推荐:绑定自定义GCP项目,使用内置YouTube服务)
操作步骤如下:
- 打开对应Google Sheets,点击「扩展程序」→「Apps Script」进入脚本编辑器
- 点击左侧边栏的齿轮图标进入「项目设置」页面
- 下拉找到「Google Cloud Platform (GCP) 项目」板块,点击「更改项目」按钮
- 前往云控制台,打开你已开通YouTube API的目标项目,在首页「项目信息」卡片中复制项目编号(注意区分项目编号和项目ID)
- 将项目编号粘贴到Apps Script的输入框中,点击「设置项目」完成绑定
- 回到脚本编辑器,点击左侧边栏「+ 服务」,搜索并添加YouTube Data API v3服务
- 删除原有代码中请求参数里的
key: APIKey字段,内置服务会自动使用绑定项目的鉴权信息
修改后的代码示例:
let chanID = "UC...Dw" function getDetails() { let info = YouTube.Channels.list("snippet, statistics", {id: chanID} ) Logger.log(info); }
解决方案2:无需绑定项目,直接调用公共API
如果你不想调整项目绑定配置,可直接放弃内置YouTube高级服务,用UrlFetchApp发起公共接口请求,传入你自己的API密钥即可:
let APIKey = "AIX...bQ0"; let chanID = "UC...Dw" function getDetails() { const requestUrl = `https://www.googleapis.com/youtube/v3/channels?part=snippet,statistics&id=${chanID}&key=${APIKey}`; const response = UrlFetchApp.fetch(requestUrl); const info = JSON.parse(response.getContentText()); Logger.log(info); }
注意事项
- 两种方案二选一即可,不要同时使用内置YouTube服务和自定义API密钥,否则会重复触发跨项目报错
- 若采用方案1,绑定完成后需确认对应GCP项目中YouTube Data API v3处于已启用状态,且未超出配额限制
内容的提问来源于stack exchange,提问作者christo
相关产品推荐
相关产品推荐

