Google Cloud Text-to-Speech: сервер ответил со статусом 403 () - PullRequest
0 голосов
/ 09 июня 2018

Я пытаюсь создать веб-страницу, которая будет переводить текст в mp3, используя текст в речь Google Cloud.После многих поисков, которые я обнаружил, используя 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, который ясно говорит, что у меня нет доступа для выполнения запрошенного действия, в это document

Я знаю, что без ключа API и авторизации я не могу получить доступ к сервису.Итак, мои вопросы: как я могу отправить свой ключ API и ключи авторизации, чтобы я мог получить авторизацию и выполнить запрошенное действие.

Edit-1

Яотправка запроса на сервер по следующему URL:

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

Если кому-то нужна дополнительная информация, я могу ее предоставить.Будем благодарны за любую помощь.

Заранее спасибо.

С уважением, Вайбхав М

Ответы [ 3 ]

0 голосов
/ 07 августа 2018

Я обнаружил две возможности, которые могут вам помочь.

  1. Получить токен на предъявителя.

Если вы установили Cloud SDK, вы можете легко получить токен с помощьюэта команда: gcloud auth application-default-print-access-token .Это также может быть выполнено в 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"

Эта ссылка объединяет запрос и команду за один шаг.

Получить ключ 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"
0 голосов
/ 16 октября 2018

Сначала вам нужно получить ключ API вашего Google Cloud со своей учетной записи (https://cloud.google.com/docs/authentication/api-keys) и попробовать приведенный ниже код, заменив your-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);
    });

});
0 голосов
/ 10 июня 2018

Вам необходимо передать свой ключ API в качестве заголовка, поле заголовка - «X-Goog-Api-Key».Также убедитесь, что вы устанавливаете правильную кодировку тела в запросе, используя заголовок «Content-Type», в вашем случае я думаю, что это должно быть «Content-Type: application / json; charset = utf-8».И, наконец, я думаю, вам не следует кодировать текстовое поле в теле запроса.

Если у вас еще нет ключа API, вы можете выполнить следующие действия, чтобы получить его

  1. Создайте проект (или используйте существующий) в Cloud Console .
  2. Убедитесь, что биллинг включен для вашего проекта.
  3. Включить API для преобразования текста в речь .
  4. Создать Ключ API .

I'mне знаком с синтаксисом 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
...