My puppyのブログ

学んだ事や作っているプログラムなどについて書いています。

PHPによるMicrosoft Translator Text APIの翻訳サンプルです

<追記:2018年6月26日>

このブログ記事で紹介されているサンプルはAPIバージョン2を使用しており、現在は「Deprecated」(廃止予定)となっています。

新しいAPIバージョン3のサンプルがGitHubにございますので、ご参照くださいませ。

https://github.com/MicrosoftTranslator 」にあります。

PHPによる「Microsoft Translator Text API」の翻訳サンプルです。

日本語での情報があまりなかったので、まとめておきますね。

以下のPHPプログラムはAzureポータルサイトから取得した認証キーを設定するだけでそのまま実行できます。

認証キーの取得方法はQiitaの「Microsoft Translator テキスト API で、日本語を英語に翻訳するサンプル」の記事にて詳しく解説されていらっしゃいます。

以下のPHPプログラムは「http://www.aw6.de/azure/」に掲載されているコードの一部を改変して、日本語のコメントを付け加えて再掲載したものです。

<?php
// まずあらかじめ翻訳するための認証キーをAzureポータルサイトから
// 取得しておき、以下のKEY_1と置き換えます
$azure_key = "KEY_1";

// 翻訳元言語です
// 翻訳可能な言語の一覧は以下のブログ記事に載っています
// http://ken-tokyo.hatenablog.com/entry/2017/12/08/150212
$fromLanguage = "en";  

 // 翻訳先言語です
$toLanguage = "ja";

// 翻訳する英文です
$inputStr = "This is a pen.";

// 翻訳するためのトークンを取得する関数です
// このトークンの有効期限は、取得してから10分間とかなり短めです
function getToken($azure_key)
{
    $url = 'https://api.cognitive.microsoft.com/sts/v1.0/issueToken';
    $ch = curl_init();
    $data_string = json_encode('{body}');
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
            'Content-Type: application/json',
            'Content-Length: ' . strlen($data_string),
            'Ocp-Apim-Subscription-Key: ' . $azure_key
        )
    );
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $strResponse = curl_exec($ch);
    curl_close($ch);
    return $strResponse;
}

// 翻訳を実行する関数です
function curlRequest($url)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: text/xml"));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    $curlResponse = curl_exec($ch);
    curl_close($ch);
    return $curlResponse;
}

// 翻訳するためのトークンを取得します。有効期限は取得後10分間です
$accessToken = getToken($azure_key);

// 翻訳するための文字列を生成します
$params = "text=" . urlencode($inputStr) . "&to=" . $toLanguage . "&from=" . $fromLanguage . "&appId=Bearer+" . $accessToken;

// 翻訳するためのURLを生成します
$translateUrl = "http://api.microsofttranslator.com/v2/Http.svc/Translate?$params";

// 翻訳を実行します
$curlResponse = curlRequest($translateUrl);

// 翻訳結果はxmlで帰ってくるのでそれを読み込みます
$translatedStr = simplexml_load_string($curlResponse);

// 翻訳結果をブラウザに表示します
echo "<p>From " . $fromLanguage . ": " . $inputStr . "<br>";
echo "To " . $toLanguage . ": " . $translatedStr . "<br>";
echo date("r") . "</p>";
?>