Лазурный переводчик Microsoft возвращает null с помощью PHP API

Результат равен нулю, версия PHP - 5.6. Я добавил строку в файл PHP.INI. Я пробовал использовать HTTP и HTTP, но он все еще показывает ноль. Я обновил адрес хоста, включив в него URL-адрес вызова API, как показано на панели управления Azure. И информации о людях, получающих эту ошибку, не так много.

<?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 = 'KEY_REMOVED';

$host = "https://southeastasia.api.cognitive.microsoft.com/sts/v1.0/issuetoken";
$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;
?>

person vaddy    schedule 30.01.2019    source источник


Ответы (1)


Как мне известно, ваш код скопирован из официального документа Quickstart: Translate text with the Translator Text REST API (PHP).

Согласно разделу Base URLs справочного материала Translator Text API v3.0, значение $host должно быть из приведенного ниже списка.

введите описание изображения здесь

Таким образом, вы можете использовать $host = "https://api.cognitive.microsofttranslator.com"; в своем коде без каких-либо изменений. Это первая проблема.

Во-вторых, _6 _ зависит от типа API вашей подписки на Cognitive Services.

  1. Если ваш тип API Translator Text, как показано на рисунке ниже, вы не будете изменять какой-либо $headers код в функции Translate исходного кода, значение которого зависит от вашего местоположения, например southeastasia.

введите описание изображения здесь

  1. Если ваш тип API All Cognitive Services, как показано на рисунке ниже, вам необходимо добавить заголовок Ocp-Apim-Subscription-Region в код $headers.

введите описание изображения здесь

$headers = "Content-type: application/json\r\n" .
        "Content-length: " . strlen($content) . "\r\n" .
        "Ocp-Apim-Subscription-Key: $key\r\n" .
        "Ocp-Apim-Subscription-Region: southeastasia\r\n" .
        "X-ClientTraceId: " . com_create_guid() . "\r\n";

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

Затем в моей среде версия PHP 7.2.12, и я запускаю php -f test.php, который отлично работает и возвращает ответ json для двух разных случаев выше, как показано ниже.

введите описание изображения здесь

[
    {
        "detectedLanguage": {
            "language": "en",
            "score": 1
        },
        "translations": [
            {
                "text": "Hallo Welt!",
                "to": "de"
            },
            {
                "text": "Salve, mondo!",
                "to": "it"
            }
        ]
    }
]
person Peter Pan    schedule 31.01.2019