Аутентификация Google Api translate без переменных среды - PullRequest
0 голосов
/ 17 октября 2018

Я пытаюсь использовать Google translate API без использования переменных среды, но, похоже, я что-то упустил.Вот код котлина, который я использую:

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.

Файл загружен из Google (в противном случае он в любом случае вызовет IOException)и кажется, что TranslateOptions.newBuilder () не имеет проблем с этим, поэтому я думаю, что я делаю что-то не так в середине или пропускаю какой-то шаг, чтобы эти опции использовались сервисом перевода в дальнейшем.

ТИА!

Ответы [ 2 ]

0 голосов
/ 28 декабря 2018

первый ответ - версия 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, потому что нужно настроить на всех серверах env, я думаю, этот способ более удобен в рабочей среде env

Github Вопрос

0 голосов
/ 17 октября 2018

Хорошо, я понял это через секунду после публикации вопроса.Я оставлю этот код здесь в надежде, что он в конечном итоге пригодится кому-то еще.

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