谷歌云文本转语音:服务器以状态 403 () 响应



我正在尝试构建一个网页,该网页将使用Google Cloud文本到语音转换将文本翻译成mp3。经过大量搜索,我发现使用 REST API 我可以请求 API 将文本翻译成 mp3。

我正在使用JQuery和AJAX进行HTTP请求。

问题是我请求云服务器使用以下数据翻译文本,

"data" : {
"input": {
"text": encodeURIComponent(text)
},
"voice" : {
"languageCode" : "en-US",
"name"         : "en-US-Wavenet-A",
},
"audioConfig" : {
"audioEncoding" : "MP3",
}
},

通过发送此内容,我得到了error 403,它清楚地表明我无权执行请求的操作,在本文档中

我知道没有API密钥和授权,我无法访问该服务。所以我的问题是如何发送我的 API 密钥和授权密钥,以便我可以获得授权并执行请求的操作。

编辑-1

我使用以下 URL 向服务器发送请求,

https://texttospeech.googleapis.com/v1beta1/text:synthesize?further_parameters_goes_here

如果有人想要更多信息,我可以提供。任何帮助将不胜感激。

提前谢谢你。

问候 瓦伊巴夫·

首先,您需要从您的计数(https://cloud.google.com/docs/authentication/api-keys(中获取Google Cloud的API密钥,并尝试下面的代码,替换脚本中的api-key

$( document ).ready(function() {
// An element to play the speech from Google Cloud
var Sound = (function () {
var df = document.createDocumentFragment();
return function Sound(src) {
var snd = new Audio(src);
df.appendChild(snd); // keep in fragment until finished playing
snd.addEventListener('ended', function () {df.removeChild(snd);});
snd.play();
return snd;
}
}());
// The settings for the Ajax Request
var settings = {
"async": true,
"crossDomain": true,
"url": "https://texttospeech.googleapis.com/v1/text:synthesize",
"method": "POST",
"headers": {
"x-goog-api-key": "**your-api-key**",
"content-type": "application/json",
"cache-control": "no-cache",
},
"processData": false,
"data": "{'input':{'text':'I have added the event to your calendar.'},'voice':{'languageCode':'en-gb','name':'en-GB-Standard-A','ssmlGender':'FEMALE'},'audioConfig':{'audioEncoding':'MP3' }}"
}
// The Ajax Request, on success play the speech
$.ajax(settings).done(function (response) {
console.log(response.audioContent);
var snd = Sound("data:audio/wav;base64," + response.audioContent);
});
});

您需要将 API 密钥作为标头传递,标头字段为"X-Goog-Api-Key"。还要确保您使用"内容类型"标头在请求中设置正确的正文编码,在您的情况下,我认为它应该是"内容类型:应用程序/json;字符集=UTF-8"。最后,我认为您不应该在请求正文中对文本字段进行编码。

如果您还没有 API 密钥,可以按照以下步骤操作

  1. 在云中创建项目(或使用现有项目( 安慰。
  2. 确保为您的项目启用了计费。
  3. 启用文本转语音 API。
  4. 创建 API 密钥。

我不熟悉 JQuery 和 AJAX 语法,但您可以使用此 curl 命令作为参考

Curl -H "X-Goog-Api-Key: PUT_YOUR_API_KEY_HERE" 
-H "Content-Type: application/json; charset=utf-8" 
--data "{
'input':{
'text':'Android is a mobile operating system developed by Google,
based on the Linux kernel and designed primarily for
touchscreen mobile devices such as smartphones and tablets.'
},
'voice':{
'languageCode':'en-gb',
'name':'en-GB-Standard-A',
'ssmlGender':'FEMALE'
},
'audioConfig':{
'audioEncoding':'MP3'
}
}" "https://texttospeech.googleapis.com/v1beta1/text:synthesize" > synthesize-text.txt

我发现了两种可以帮助你的可能性。

  1. 获取持有者令牌。

如果您安装了云 SDK,则可以使用以下命令轻松获取令牌:gcloud auth 应用程序默认打印访问令牌。它也可以在Cloud Shell中执行。只需确保您登录的默认用户具有访问文本转语音服务的适当角色即可。然后,将令牌附加到标头请求,例如,最终请求可能如下所示。

curl -H "Authorization: Bearer ya29.GqUB8gVkiMCyl2ZCKEfS8Tb9QmS_LRb1bQP__fIPYbCU.....LUAlCRJU9OpFc_hCzSVUwlAZAhac2aZhoh" 
-H "Content-Type: application/json; charset=utf-8" 
--data "{
'input: {
'text': 'my custom text'
},
'voice' : {
'languageCode' : 'en-US',
'name'           : 'en-US-Wavenet-A'
},
'audioConfig' : {
'audioEncoding' : 'MP3'
}
}" "https://texttospeech.googleapis.com/v1beta1/text:synthesize"

此链接将请求和命令集成到一个步骤中。

  1. 获取 API 密钥。

API 密钥比令牌更可移植,但拥有它的任何人都可以使用它。建议将此类密钥限制为文本到语音转换服务。然后,应使用终结点 URL 中的密钥,例如"https://texttospeech.googleapis.com/v1beta1/text:synthesize?key=AIzaSynAJU-EGnhdDaaXH4NVcc"。完整的示例如下所示:

curl -H "Content-Type: application/json; charset=utf-8" 
--data "{
'input':{
'text':'my custom text'
},
'voice':{
'languageCode':'en-gb',
'name':'en-GB-Standard-A',
'ssmlGender':'FEMALE'
},
'audioConfig':{
'audioEncoding':'MP3'
}
}" "https://texttospeech.googleapis.com/v1beta1/text:synthesize?key=AIzaSynAJU-EGnhdDaaXH4NVcc"

相关内容

  • 没有找到相关文章

最新更新