【问题标题】:Google Api translate authentication without environment variables没有环境变量的 Google Api 翻译认证
【发布时间】:2019-03-22 05:09:09
【问题描述】:

我正在尝试在不使用环境变量的情况下使用 Google 翻译 API,但我似乎遗漏了一些东西。这是我正在使用的 kotlin 代码:

import com.google.auth.oauth2.ServiceAccountCredentials
import com.google.cloud.translate.Translate
import com.google.cloud.translate.TranslateOptions
import java.io.FileInputStream

class StringsTranslator {
    companion object {
        @JvmStatic
        fun main(args: Array<String>) {
            TranslateOptions.newBuilder().credentials = ServiceAccountCredentials.fromStream(
                    FileInputStream("ktools/google-apis-credentials.json")
            )

            val translate = TranslateOptions.getDefaultInstance().service

            val text = "Hello world!"
            val translation = translate.translate(
                    text,
                    Translate.TranslateOption.sourceLanguage("en"),
                    Translate.TranslateOption.targetLanguage("es")
            )

            println("$text = ${translation.translatedText}")
        }
    }
}

我基本上采用了这个例子并对其进行了改编: https://github.com/GoogleCloudPlatform/java-docs-samples/blob/master/translate/cloud-client/src/main/java/com/example/translate/QuickstartSample.java

但我遇到了这个异常:

线程“main”com.google.cloud.translate.TranslateException 中的异常:请求缺少有效的 API 密钥。

该文件是从谷歌下载的(否则它会在之前抛出一个 IOException),并且似乎 TranslateOptions.newBuilder() 没有问题,所以我认为我在中间做错了什么,或缺少某些步骤,以便翻译服务进一步使用这些选项。

TIA!

【问题讨论】:

    标签: java authentication kotlin google-api google-translate


    【解决方案1】:

    好的,我在发布问题后一秒钟就想通了。我将把这段代码留在这里,希望它最终对其他人有用。

    import com.google.auth.oauth2.ServiceAccountCredentials
    import com.google.cloud.translate.Translate
    import com.google.cloud.translate.TranslateOptions
    import java.io.FileInputStream
    
    class StringsTranslator {
        companion object {
            @JvmStatic
            fun main(args: Array<String>) {
                val translate = TranslateOptions.newBuilder().setCredentials(ServiceAccountCredentials.fromStream(
                        FileInputStream("ktools/google-apis-credentials.json")
                )).build().service
    
                val text = "Hello world!"
                val translation = translate.translate(
                        text,
                        Translate.TranslateOption.sourceLanguage("en"),
                        Translate.TranslateOption.targetLanguage("es")
                )
    
                println("$text = ${translation.translatedText}")
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      第一个答案是 Java 版本,但我使用 Python google-tranlate-client。 下面是解决方案。

      def g_translate(self, target_language):
          import os
          credential_path = os.path.dirname(__file__) + '/key.json'
          from google.oauth2 import service_account
      
          credentials = service_account.Credentials.from_service_account_file(credential_path)
          translate_client = translate.Client(credentials=credentials)
      
          translation = translate_client.translate(self.local, target_language=target_language)
      
          return translation['translatedText']
      

      我不想使用环境变量,因为需要在所有服务器环境中进行配置,我想这种方式在生产环境中更方便

      Github Question

      【讨论】:

        猜你喜欢
        • 2018-03-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-07
        • 2016-11-13
        • 1970-01-01
        相关资源
        最近更新 更多