Google Cloud Translation API В запросе отсутствует действительный ключ API - PullRequest
0 голосов
/ 28 мая 2018

Я пытаюсь использовать API-интерфейс Google Cloud Translation в своем приложении, но всякий раз, когда я пытаюсь что-то перевести, возникает эта недостающая допустимая ошибка API.

Я выполнял шаги быстрого старта, и это нене работаетhttps://cloud.google.com/translate/docs/quickstart

Я пробовал выполнить шаги аутентификации клиентской библиотеки, но это не сработало.https://cloud.google.com/translate/docs/reference/libraries

E/AndroidRuntime: FATAL EXCEPTION: main
              Process: herrsa1.bit.translator, PID: 16598
              com.google.cloud.translate.TranslateException: The request is missing a valid API key.
                  at com.google.cloud.translate.spi.v2.HttpTranslateRpc.translate(HttpTranslateRpc.java:61)
                  at com.google.cloud.translate.spi.v2.HttpTranslateRpc.translate(HttpTranslateRpc.java:144)
                  at com.google.cloud.translate.TranslateImpl$4.call(TranslateImpl.java:113)
                  at com.google.cloud.translate.TranslateImpl$4.call(TranslateImpl.java:110)
                  at com.google.api.gax.retrying.DirectRetryingExecutor.submit(DirectRetryingExecutor.java:89)
                  at com.google.cloud.RetryHelper.run(RetryHelper.java:74)
                  at com.google.cloud.RetryHelper.runWithRetries(RetryHelper.java:51)
                  at com.google.cloud.translate.TranslateImpl.translate(TranslateImpl.java:110)
                  at com.google.cloud.translate.TranslateImpl.translate(TranslateImpl.java:124)
                  at herrsa1.bit.translator.MainActivity.translateText(MainActivity.java:61)
                  at herrsa1.bit.translator.MainActivity$1.onClick(MainActivity.java:48)
                  at android.view.View.performClick(View.java:6261)
                  at android.widget.TextView.performClick(TextView.java:11180)
                  at android.view.View$PerformClick.run(View.java:23748)
                  at android.os.Handler.handleCallback(Handler.java:751)
                  at android.os.Handler.dispatchMessage(Handler.java:95)
                  at android.os.Looper.loop(Looper.java:154)
                  at android.app.ActivityThread.main(ActivityThread.java:6776)
                  at java.lang.reflect.Method.invoke(Native Method)
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)
               Caused by: com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
              {
                "code" : 403,
                "errors" : [ {
                  "domain" : "global",
                  "message" : "The request is missing a valid API key.",
                  "reason" : "forbidden"
                } ],
                "message" : "The request is missing a valid API key.",
                "status" : "PERMISSION_DENIED"
              }
                  at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:113)
                  at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:40)
                  at com.google.api.client.googleapis.services.AbstractGoogleClientRequest$1.interceptResponse(AbstractGoogleClientRequest.java:321)
                  at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1065)
                  at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:419)
                  at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:352)
                  at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:469)
                  at com.google.cloud.translate.spi.v2.HttpTranslateRpc.translate(HttpTranslateRpc.java:130)
                    ... 19 more

Ответы [ 3 ]

0 голосов
/ 06 июля 2019

Если вы используете клиентскую библиотеку и уже загрузили json-файл своей учетной записи службы, попробуйте ниже

 // Instantiates a client
 const translate = new Translate(
        {
                projectId: 'your project id', //eg my-project-0o0o0o0o'
                keyFilename: 'path of your service acount json file' //eg my-project-0fwewexyz.json
        }
    ); 

вместо

  // Instantiates a client
  const translate = new Translate({projectId});

, поэтому вам потребуется только ваша учетная запись службыJSON-файл и определенный API включены

0 голосов
/ 18 июля 2019

Я также пытался выполнить этот пример программы.Я следовал той же инструкции .Но при выполнении я получил ту же ошибку (в запросе отсутствует действительный ключ API).

Я изменил строку в примере программы.

Вместоиз

Translate translate = TranslateOptions.getDefaultInstance().getService();

Я добавил

Translate translate = TranslateOptions
            .newBuilder()
            .setCredentials(
                ServiceAccountCredentials
                            .fromStream(new FileInputStream(
                                    "YourCredentialFilePath.json")))
            .build().getService();

Сейчас он работает.

Пример кода после исправления.

// Imports the Google Cloud client library
import java.io.FileInputStream;
import com.google.auth.oauth2.ServiceAccountCredentials;
import com.google.cloud.translate.Translate;
import com.google.cloud.translate.Translate.TranslateOption;
import com.google.cloud.translate.TranslateOptions;
import com.google.cloud.translate.Translation;

public class QuickstartSample {
   public static void main(String... args) throws Exception {
      //Instantiates a client
      //Removed next line
      //Translate translate = TranslateOptions.getDefaultInstance().getService();
      //Added this line
      Translate translate = TranslateOptions
            .newBuilder()
            .setCredentials(
            ServiceAccountCredentials
                            .fromStream(new FileInputStream(
                                    "YourCredentialFilePath.json")))
            .build().getService();

      //The text to translate
      String text = "Hello, world!";

      //Translates some text into Russian
      Translation translation =
         translate.translate(
              text,
              TranslateOption.sourceLanguage("en"),
              TranslateOption.targetLanguage("ru"));


      System.out.printf("Text: %s%n", text);
      System.out.printf("Translation: %s%n", translation.getTranslatedText());
   }
}   
0 голосов
/ 03 августа 2018

Ошибка в ключе API означает, что вы не создали или не использовали ключ должным образом.Для работы ключа необходимо сделать следующее:
1) создать учетную запись службы [1]
2) создать ключ для указанной учетной записи службы [2]
3) загрузить ключ в расположениенапример, локальный путь
4) установите переменную среды GOOGLE_APPLICATION_CREDENTIALS в качестве пути к файлу ключа, см. примеры в руководстве по быстрому старту

Выполнение 1) и 2) в консоли GCP, 3) и4) в Cloud Shell будет проще всего.

[1] https://cloud.google.com/iam/docs/creating-managing-service-accounts#creating_a_service_account
[2] https://cloud.google.com/iam/docs/creating-managing-service-account-keys#creating_service_account_keys

...