4

我正在尝试在我的应用程序中使用 Google Cloud Translation API,但每当我尝试翻译某些内容时,它就会出现这个缺少有效 API 的错误。

我已经完成了快速入门步骤,但没有奏效。

我已经尝试了客户端库身份验证中的步骤,但也没有用。

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)
  .. 18 more
  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)
  ... 4 more
  at com.google.cloud.translate.spi.v2.HttpTranslateRpc.translate(HttpTranslateRpc.java:130)
  ... 19 more
4

4 回答 4

3

如果您正在使用客户端库并且您已经下载了服务帐户 json 文件,请尝试执行以下操作:

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

而不是这个:

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

这样您只需要您的服务帐户 json 文件和启用的特定 API

于 2019-07-06T09:32:34.540 回答
2

API 密钥上的错误意味着您没有正确创建或使用密钥。您需要执行以下操作才能使密钥起作用:

  1. 创建服务帐号
  2. 为上述服务帐户创建密钥
  3. 将密钥下载到某个位置,例如本地路径
  4. 设置环境变量GOOGLE_APPLICATION_CREDENTIALS为key的文件路径,参考快速入门教程中的示例

我建议在 GCP Console 中执行 #1 和 #2,并在 Cloud Shell 中处理 #3 和 #4。

于 2018-08-03T19:04:54.693 回答
1

您使用的密钥没有使用翻译 API 的权限。

要解决这个问题:

  1. 转到Google Cloud Platform 控制台

  2. 从顶部栏中的下拉菜单中选择您的项目

  3. 前往API & Services>Library

  4. 搜索Cloud Translation API并点击它

  5. 启用它

    启用 api 按钮

  6. 前往API & Services>Credentials

  7. 选择您在 Android 应用程序中使用的密钥

  8. 从名为 的菜单Restrict key中,选择Cloud Translation API

  9. 保存您的编辑

现在 API 将正常工作。

于 2021-09-20T21:24:42.930 回答
0

我也尝试执行这个示例程序。我遵循了同样的指示。但是当我执行时,我得到了同样的错误(请求缺少有效的 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());
   }
}   
于 2019-07-18T12:47:04.300 回答