Google Translate API v2, v3 PHP - PullRequest
       69

Google Translate API v2, v3 PHP

0 голосов
/ 06 мая 2019

Я только начал использовать API перевода BING для небольшого объема переводов на большинство поддерживаемых языков, и это работает довольно хорошо.

Существует проект GitHub, в котором есть простой код PHP для вызова API в Microsoft. В основном вам нужен только ключ API, и его можно легко настроить.

Text-Translation-API-V3-PHP

// NOTE: Be sure to uncomment the following line in your php.ini file.
// ;extension=php_openssl.dll
// **********************************************
// *** Update or verify the following values. ***
// **********************************************
// Replace the subscriptionKey string value with your valid subscription key.
$key = 'ENTER KEY HERE';
$host = "https://api.cognitive.microsofttranslator.com";
$path = "/translate?api-version=3.0";

// Translate to German and Italian.
$params = "&to=de&to=it";
$text = "Hello, world!";

if (!function_exists('com_create_guid')) {
  function com_create_guid() {
    return sprintf( '%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
        mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ),
        mt_rand( 0, 0xffff ),
        mt_rand( 0, 0x0fff ) | 0x4000,
        mt_rand( 0, 0x3fff ) | 0x8000,
        mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff )
    );
  }
}

function Translate ($host, $path, $key, $params, $content) {
    $headers = "Content-type: application/json\r\n" .
        "Content-length: " . strlen($content) . "\r\n" .
        "Ocp-Apim-Subscription-Key: $key\r\n" .
        "X-ClientTraceId: " . com_create_guid() . "\r\n";
    // NOTE: Use the key 'http' even if you are making an HTTPS request. See:
    // http://php.net/manual/en/function.stream-context-create.php
    $options = array (
        'http' => array (
            'header' => $headers,
            'method' => 'POST',
            'content' => $content
        )
    );
    $context  = stream_context_create ($options);
    $result = file_get_contents ($host . $path . $params, false, $context);
    return $result;
}

$requestBody = array (
    array (
        'Text' => $text,
    ),
);
$content = json_encode($requestBody);
$result = Translate ($host, $path, $key, $params, $content);
// Note: We convert result, which is JSON, to and from an object so we can pretty-print it.
// We want to avoid escaping any Unicode characters that result contains. See:
// http://php.net/manual/en/function.json-encode.php
$json = json_encode(json_decode($result), JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
echo $json;

У меня также есть учетная запись Google Cloud, и я ищу что-то похожее для нескольких языков, которые Google поддерживает, а BING - нет. Для версии 2 не так уж сложно позвонить в Google, чтобы вернуть переводы.

Я нашел этот проект GitHub, который, кажется, работает для вызовов API v2 с ключом API, но, к сожалению, я думаю, что это программа с платой за обслуживание в настоящее время?

Google-облако PHP-перевод

Это также, кажется, работает очень хорошо, если у вас есть ключ API. Если вы используете v3, они, видимо, обновили библиотеки и поддержку. Вы можете сделать вызов CURL из командной строки, и некоторые из них описаны на их веб-сайте, но я ищу способ сделать вызов, используя файл PHP.

require 'vendor/autoload.php';   
use Google\Cloud\Translate\TranslateClient;

$translate = new TranslateClient([
    'key' => 'APIKEY'
]);

// Translate text from english to french.
$result = $translate->translate('Hello world!', [
    'target' => 'fr'
]);

echo $result['text'] . "\n";

// Detect the language of a string.
$result = $translate->detectLanguage('Greetings from Michigan!');

echo $result['languageCode'] . "\n";

// Get the languages supported for translation specifically for your target language.
$languages = $translate->localizedLanguages([
    'target' => 'en'
]);

foreach ($languages as $language) {
    echo $language['name'] . "\n";
    echo $language['code'] . "\n";
}

// Get all languages supported for translation.
$languages = $translate->languages();

foreach ($languages as $language) {
    echo $language . "\n";
}

Не уверен, что это даже возможно, но лучшее, что я могу придумать, это что-то вроде этого, основанное на командной строке CURL, но аутентификация неверна и дает сбой. У меня есть файл .json для моих учетных данных Project / Service. Полагаю, что $ {PROJECT_ID} является идентификатором проекта для учетной записи, а в Bearer $ (gcloud auth application-default-print-access-token) я не уверен. Есть некоторые инструкции о том, как получить это через CLI, но есть ли способ получить это через файл PHP? Как я уже сказал, версия v2 работает нормально.

$ch = curl_init();   
curl_setopt($ch, CURLOPT_URL, "https://translation.googleapis.com/v3beta1/projects/${PROJECT_ID}/locations/global:detectLanguage");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "{\n     mimeType: 'text/plain',\n     content: 'Omnia Gallia est divisa in tres partes'\n}");
curl_setopt($ch, CURLOPT_POST, 1);

$headers = array();
$headers[] = 'Authorization: Bearer $(gcloud auth application-default print-access-token)';
$headers[] = 'Content-Type: application/json';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$result = curl_exec($ch);
if (curl_errno($ch)) {
    echo 'Error:' . curl_error($ch);
} else {
    echo $result;
}
curl_close ($ch);

Здесь могут быть подсказки, но речь идет об экспорте пути для файла учетных данных и запуске сценариев PHP из командной строки, а не с сервера.

Примеры API Google Cloud Translate

1 Ответ

0 голосов
/ 06 мая 2019

Это, вероятно, не будет оцениваться:

'Authorization: Bearer $(gcloud auth application-default print-access-token)'

Это скорее:

// $cmd = 'gcloud auth application-default login';
$cmd = 'gcloud auth application-default print-access-token';
$token = shell_exec($cmd);

, кроме того, вероятно, это должна быть учетная запись службы .

Кажется Google / Cloud заменяет google/cloud-translate.Для Translate вы можете отредактировать translate-v2.json или добавить translate-v3beta1.json;но v3beta1 имеет совершенно другой REST API, чем v2 ...

...