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
相关产品推荐
相关产品推荐

