Microsoft Translator v3をPHPから使用する方法

Microsoftの翻訳サービスであるTranslator v3をPHP7.4 + cURLから使用する方法を紹介する。Translatorは無料プランの場合、月200万文字まで使える。

Translatorリソースの準備

Microsoft Azure (https://portal.azure.com/#home)にアクセスする。アカウントが必要。

リソースの作成を選択する

translatorを選択する

作成を選択する

初めての場合はリソースグループを新規作成する。ここではresource1と名付けて作成した。

リージョンと価格を選択する。ここではJapan East、Free F0 (無料プラン)を選択した。名前はTranslatorであることが分かる名称を適当に付ける。例) Translator123

他はデフォルトのまま作成ボタンを選択する。

これでTranslatorリソースの準備は完了

Translatorのキーとリージョンの確認

トップページからTranslatorリソースを選択し、下記の画面で「キーとエンドポイント」を選択し、キー1(キー2でもよい)と場所/地域の値を確認する。この情報でTranslatorリソースに接続する。

コマンドラインからの動作確認

公式ドキュメント(https://learn.microsoft.com/ja-jp/azure/cognitive-services/translator/reference/v3-0-translate)を参考にコマンドラインから動作確認をする。

下記コマンドの YOUR-KEY には キー1 もしくは キー2 の値を入力する。YOUR-REGION には 場所/地域 の値を入力する。

$ curl -X POST "https://api.cognitive.microsofttranslator.com/translate?api-version=3.0&from=en&to=ja" -H "Ocp-Apim-Subscription-Key: YOUR-KEY" -H "Ocp-Apim-Subscription-Region: YOUR-REGION" -H "Content-Type: application/json; charset=UTF-8" -d "[{'Text':'Hello, what is your name?'}]"

次のように応答が返ってくれば成功。

[{"translations":[{"text":"こんにちは、あなたの名前は何ですか?","to":"ja"}]}]% 

PHP7.4 + cURLからTranslator v3を使用する

基本的には上記のコマンドラインをcURLでの使い方に置き換えるだけ

// cURLの初期化
$ch = curl_init();

// キーとリージョンの指定
$key = "YOUR-KEY";
$region = "YOUR-REGION";
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  "Ocp-Apim-Subscription-Key: " . $key,
  "Ocp-Apim-Subscription-Region: " . $region,
  "Content-Type: application/json; charset=UTF-8"
));

// URLと翻訳言語の指定
$from = 'en';
$to = 'ja';
$url = "https://api.cognitive.microsofttranslator.com/translate?api-version=3.0&from=".$from."&to=".$to;
curl_setopt($ch, CURLOPT_URL, $url);

// 翻訳テキストの指定
// json_encodeには角カッコ2つのデータを渡してJSON配列を作る点に注意
$text = "Hello, what is your name?";
$json = json_encode([['Text' => $text]]);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

// 送信と応答
$result = curl_exec($ch);

// レスポンスをデコード
$decode = json_decode($result);

// エラーチェック
if (isset($decode->error)) {
  throw new Exception("翻訳に失敗しました。code:". $decode->error->code . " message:" . $decode->error->message);
}

// 翻訳結果表示
echo $decode[0]->translations[0]->text;

次のように翻訳結果が表示される

こんにちは、あなたの名前は何ですか?

以上