我正在尝试制作一个使用Google Cloud Translation API的Chrome扩展程序。我在Google Translate和developing Chrome extensions的文档的许多不同页面上都遵循了一系列说明,但是我仍然不知道如何从浏览器中实际使用API。
我走得最远的是从Quickstart guide的以下部分开始,在该部分中创建服务帐户,获取服务帐户密钥文件(下载为.json文件),安装并初始化Google SDK,设置GOOGLE_APPLICATION_CREDENTIALS
环境变量到服务帐户JSON密钥文件的路径,然后使用curl
发出gcloud auth application-default print-access-token
请求以获取要作为请求标头一部分输入的访问令牌: “授权:不记名(此处为令牌)”。以此方式成功检索了翻译。
但是在扩展程序的环境中,您无法运行诸如gcloud
之类的命令,因此该命令不起作用。我能够使用gcloud
命令手动检索访问令牌,然后将其作为请求标头的一部分粘贴到我的javascript代码中(例如xmlHttpRequest.setRequestHeader('Authorization', 'Bearer ya29.c.Elr6BRuTfOtherRandomLetters');
)。但是该访问令牌会在60分钟后过期,因此无法持续工作。
我还尝试使用identity.getAuthToken方法(在文档说明的方式manifest.json
中更新内容之后),但这没有用。将我的服务帐户客户ID用作client_id
中oauth2
下的manifest.json
会导致identity.getAuthToken
出现“无效的客户ID”错误。另一方面,从Google控制台生成OAuth2客户端ID,并将{{1}下的myoauth2clientid.apps.googleusercontent.com
用作client_id
,将oauth2
用作{{ 1}}导致["https://www.googleapis.com/auth/cloud-translation", "https://www.googleapis.com/auth/cloud-platform"]
出现“未授予或撤销OAuth2”错误。
从Google控制台页面生成API密钥,然后直接将其用作我的翻译查询的scopes
参数,甚至无法正常工作:我收到了“该请求缺少有效的API密钥”。错误。
我真的很茫然。任何帮助都会很棒。
答案 0 :(得分:2)
我(第一次发布者)也经历了与您相同的步骤,但是在@magicnumber的答案的帮助下,我想出了一种解决方案,可以使用APIkey而不是APIkey来翻译Chrome扩展程序中的文本(从任何语言到英语)服务帐户密钥文件。
首先创建一个转换函数(我在这里使用了Async-> Await模式):
async function translate(strSourceText,strApiKey)
{
var url = `https://translation.googleapis.com/language/translate/v2?key=${strApiKey}`
let response = await fetch(url, {
method: 'POST',
headers : {
'Content-Type': 'application/json',
},
body: JSON.stringify({
target: "en",
format: "text",
q: strSourceText
}),
});
let data = await response.json()
return data;
}
然后调用异步函数,该函数将返回一个承诺,例如:
query="כלב" //Hebrew word for dog ?
translate(query, "YOURVALIDAPIKEYGOESHERE")
.then(response => console.log(response.data))
.catch(reason => console.log(reason.message));
Google Translation API的响应应类似于:
{
"data": {
"translations": [
{
"translatedText": "Dog",
"detectedSourceLanguage": "iw"
}
]
}
}
最后,为了避免违反内容安全策略,我不得不在我扩展程序的manifest.json文件的权限密钥中添加翻译API域:
"permissions": ["https://translation.googleapis.com/language/translate/v2/*"],
答案 1 :(得分:1)
我完成了与您相同的步骤,也不能依赖gcloud进行身份验证。
使我摆脱“请求缺少有效的API密钥”错误的原因是使用此处https://codelabs.developers.google.com/codelabs/cloud-translation-intro/index.html#5
所述的查询语法在我的情况下,我使用了:
then