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

Google Sheets自定义函数调用YouTube API缺少API密钥故障求助

问题根因

  • Google Sheets 的单元格自定义函数(即通过=getVidViews(A1)这种形式调用的脚本)运行在无用户身份的低权限沙箱环境中,无法继承你在Apps Script编辑器内运行代码时的OAuth授权凭证,因此调用YouTube高级服务时无法通过身份校验,才会提示缺少API密钥。
  • 你在编辑器中直接运行代码时,触发主体是你本人的Google账号,会自动走OAuth授权流程,调用时携带你的账号权限,因此不需要额外传入API密钥即可正常访问接口。

可行解决方案

方案一:使用API密钥直接调用接口(适合坚持用单元格公式的场景)

你可以给隐藏的GCP项目启用YouTube Data API并生成API密钥,修改代码直接调用公共接口即可,操作步骤如下:

  1. 打开你的Apps Script项目,点击左侧菜单栏的「项目设置」,下拉找到「Google Cloud Platform (GCP) 项目」板块,点击显示的项目编号跳转到GCP控制台。
  2. 在GCP控制台顶部搜索框搜索「YouTube Data API v3」,进入API详情页后点击「启用」。
  3. 启用后切换到该API的「凭据」页面,点击顶部「创建凭据」→「API密钥」,生成后复制保存你的API密钥。
  4. 替换原有getVidViews函数代码为以下内容,将你复制的API密钥填入对应位置:
function getVidViews(id) {
  // 替换为你自己生成的API密钥
  const API_KEY = "替换为你的API密钥";
  const requestUrl = `https://www.googleapis.com/youtube/v3/videos?part=statistics&id=${encodeURIComponent(id)}&key=${API_KEY}`;
  const res = UrlFetchApp.fetch(requestUrl);
  const data = JSON.parse(res.getContentText());
  return data.items?.[0]?.statistics?.viewCount || "无效视频ID";
}

修改完成后保存脚本,回到表格就可以正常用=getVidViews(A1)公式获取数据了。你也可以在GCP的API凭据页给API密钥添加访问限制,避免密钥泄露后被滥用配额。

方案二:改用自定义菜单触发(无需API密钥,更安全)

如果你不想暴露API密钥,可以放弃单元格自定义函数的形式,改成通过表格自定义菜单触发脚本执行,操作步骤如下:

  1. 替换原有脚本为以下内容:
// 打开表格时自动生成自定义菜单
function onOpen() {
  const ui = SpreadsheetApp.getUi();
  ui.createMenu("YouTube数据工具")
    .addItem("获取A列视频播放量", "getBatchVidViews")
    .addToUi();
}

function getBatchVidViews() {
  const sheet = SpreadsheetApp.getActiveSheet();
  // 读取A列所有视频ID,可根据自己的需求调整读取范围
  const ids = sheet.getRange("A:A").getValues().filter(row => row[0] !== "");
  const viewCounts = [];

  for (let i = 0; i < ids.length; i++) {
    const id = ids[i][0];
    try {
      const res = YouTube.Videos.list('statistics', {'id': id});
      viewCounts.push([res.items[0].statistics.viewCount]);
    } catch (e) {
      viewCounts.push(["获取失败"]);
    }
  }

  // 将结果批量写入B列对应位置
  sheet.getRange(1, 2, viewCounts.length, 1).setValues(viewCounts);
}
  1. 保存脚本后刷新你的Google Sheet页面,顶部菜单栏会出现新的「YouTube数据工具」选项,你在A列填好所有视频ID后,点击该菜单下的「获取A列视频播放量」,首次运行会弹出OAuth授权窗口,授权完成后就会自动把播放量写入B列,全程不需要API密钥。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 11:09:02