Google API 在没有环境变量的情况下翻译身份验证



我正在尝试在不使用环境变量的情况下使用谷歌翻译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((没有问题,所以我认为我在中间做错了什么,或者错过了一些步骤,所以翻译服务进一步使用这些选项。

啪!

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

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}")
}
}
}

第一个答案是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']

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

Github问题

相关内容

最新更新