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

Google Sheets调用自然语言API进行情感分析时遇401认证错误

Google Sheets自定义情感分析函数401错误解决思路

错误核心原因

你的代码同时使用了两种冲突的Google Cloud API认证方式:URL参数里的key=(API密钥认证)和Authorization: Bearer {API_KEY}请求头。Bearer认证头要求传入的是OAuth2令牌,而非API密钥,这导致认证逻辑混乱,返回401无效凭证错误。

修正方案(二选一)

方案1:仅使用API密钥认证(简单直接)

移除代码中的Authorization请求头,保留URL中的API密钥参数即可:

function getSentiment(text) {
  var apiKey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
  var url = "https://language.googleapis.com/v1/documents:analyzeSentiment?key=" + apiKey;
  var data = {
    document: {
      type: "PLAIN_TEXT",
      content: text
    }
  };

  var options = {
    method: "post",
    contentType: "application/json",
    payload: JSON.stringify(data)
  };
  var response = UrlFetchApp.fetch(url, options);
  var result = JSON.parse(response.getContentText());
  return result.documentSentiment.score;
}

方案2:改用OAuth2令牌认证(适合权限管控场景)

利用Google Apps Script的内置OAuth令牌获取能力,无需手动管理API密钥:

function getSentiment(text) {
  var url = "https://language.googleapis.com/v1/documents:analyzeSentiment";
  var data = {
    document: {
      type: "PLAIN_TEXT",
      content: text
    }
  };

  var options = {
    method: "post",
    contentType: "application/json",
    headers: {
      "Authorization": "Bearer " + ScriptApp.getOAuthToken()
    },
    payload: JSON.stringify(data)
  };
  var response = UrlFetchApp.fetch(url, options);
  var result = JSON.parse(response.getContentText());
  return result.documentSentiment.score;
}

使用此方案需在脚本的appsscript.json文件中添加OAuth权限范围:

{
  "oauthScopes": [
    "https://www.googleapis.com/auth/cloud-language",
    "https://www.googleapis.com/auth/script.external_request"
  ]
}

额外排查步骤

  • 确认你的API密钥已启用Google Cloud Natural Language API,无拼写错误
  • 若API密钥设置了IP限制,需将Google Sheets的请求IP加入白名单,或暂时关闭限制测试
  • 可添加muteHttpExceptions: true到请求选项,获取完整错误日志定位问题:
    var options = {
      method: "post",
      contentType: "application/json",
      muteHttpExceptions: true,
      payload: JSON.stringify(data)
    };
    var response = UrlFetchApp.fetch(url, options);
    Logger.log(response.getContentText()); // 查看完整错误信息
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 21:05:19