PHPでクラウド翻訳サービスを利用する

(1/1)
PHPを使って、Google翻訳DeepL翻訳といったクラウド翻訳サービスのAPIを呼び出し、入力したテキストを翻訳するプログラムを作ってみることにする。

目次

サンプル・プログラムの実行例

PHPでクラウド翻訳サービスを利用する

サンプル・プログラム

圧縮ファイルの内容
translate.phpサンプル・プログラム本体
translate.php 更新履歴
バージョン 更新日 内容
1.0.0 2023/03/04 Google Cloud Translate,DeepL APIに対応

準備:クラウド翻訳サービス選択

 148:     //クラウド翻訳サービス選択
 149:     //利用しないクラウド翻訳サービスはコメントアウトすること.
 150:     var $apiTable = array(
 151:     //値               タイトル               翻訳メソッド
 152:     'google' => array('title'=>'Google翻訳', 'func'=>'googleCloudTranslate'),
 153:     'deepl'  => array('title'=>'DeepL翻訳',  'func'=>'deepLTranslate'),
 154:     );

クラウド翻訳サービスを利用する処理はクラス pahooTranslate として分離させた。
複数のクラウド翻訳サービスを使い分けることができるが、もし利用しないのであれば、配列 $apiTable で使わないサービスの行をコメントアウトすればよい。

準備:Google Cloud Translation API

Google翻訳(Google Cloud Translation API)を利用するには、まず、Google Cloud Platformに登録する必要がある。登録は無料。手続きは「各種WebAPIの登録方法 - Google Cloud Platform」をご覧いただきたい。あとでAPIキーを使うので控えておいてほしい。
Google Cloud Translation API
次に、検索窓から Cloud Translation APIを検索し、有効にする。これでGoogle翻訳が利用できるようになる。
このAPIは、1ヶ月当たり最初の50万文字までは無料だが、それ以上は有料になる。

 137:     //Google Cloud Platform APIキー
 138:     //https://cloud.google.com/maps-platform/ から無料申込み.
 139:     //1ヶ月当たり最初の50万文字までは無料だが、それ以上は有料になる.
 140:     //利用しないのなら未定義のままでよい.
 141:     var $GOOGLE_API_KEY = '**************************************';

前述のAPIキー$GOOGLE_API_KEYに代入する。
なお、Google Cloud Translation API を利用しないのであれば、代入する必要はない。

仕様:Google Cloud Translation API v2

Google Cloud Translation API は、入力パラメータとしてPOSTを、出力結果がJSON形式で戻るというAPIである。
WebAPIのURL
URL
https://translation.googleapis.com/language/translate/v2

入力パラメータ
フィールド名 要否 内  容
q 必須 翻訳したいテキスト(UTF-8)
target 必須 ターゲット(翻訳先)言語(ISO-639コード)
key 必須 APIキー
format 任意 html | text(デフォルト)
source 任意 翻訳したいテキストの言語(ISO-639コード)
model 任意 翻訳モデル。nmt固定
応答データ構造(json) data translations _0 translatedText 翻訳テキスト detectedSourceLanguage 入力テキストの言語

解説:Google Cloud Translation API v2

 253: /**
 254:  * Google Cloud Translate APIを使って翻訳を行う.
 255:  * @param   string $text            翻訳したいテキスト
 256:  * @param   string $targetLanguage  翻訳したい言語
 257:  * @return  string 翻訳テキスト/FALSE:失敗
 258: */
 259: function googleCloudTranslate($text, $targetLanguage='ja') {
 260:     $this->webapi = 'https://translation.googleapis.com/language/translate/v2';
 261:     $data = array(
 262:         'q'         => $text,
 263:         'target'    => $targetLanguage,
 264:         'key'       => $this->GOOGLE_API_KEY,
 265:     );
 266: 
 267:     //Google Cloud Translate APIを呼び出す.
 268:     $ch = curl_init();
 269:     curl_setopt($ch, CURLOPT_URL, $this->webapi);
 270:     curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
 271:     curl_setopt($ch, CURLOPT_POST, TRUE);
 272:     curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
 273: 
 274:     curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
 275:     curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
 276:     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
 277:     curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
 278: 
 279:     $response = curl_exec($ch);
 280:     curl_close($ch);
 281: 
 282:     //APIエラー
 283:     if ($response == FALSE) {
 284:         $this->errmsg = 'Google Cloud Translate APIにアクセスできません';
 285:         $ret = FALSE;
 286:     } else {
 287:         $arr = json_decode($response, TRUE);
 288:         if ($arr == FALSE) {
 289:             $this->errmsg = 'Google Cloud Translate APIの応答が不正です';
 290:             $ret = FALSE;
 291:         //翻訳成功
 292:         } else if (isset($arr['data']['translations'][0]['translatedText'])) {
 293:             $ret = (string)$arr['data']['translations'][0]['translatedText'];
 294:         } else {
 295:             $this->errmsg = 'Google Cloud Translate APIの応答が不正です';
 296:             $ret = FALSE;
 297:         }
 298:     }
 299: 
 300:     return $ret;
 301: }

メソッド googleCloudTranslate は、Google Cloud Translation APIに翻訳したいテキストと翻訳したい言語を渡し、翻訳結果のテキストを求める。
API呼び出しには cURL関数を用いた。

準備:DeepL API

DeepL APIを利用するには、まず、DeepL APIに登録する必要がある。無料プランが用意されている。
DeepL API登録
「無料で体験する」をクリックし、DeepL Freeに無料で登録する。
DeepL API登録
メールアドレスと3Dセキュア(本人認証機能)に対応しているクレジットカード情報等を入力すると、アカウント登録が完了する。
DeepL API登録
「アカウント管理」をクリックすると、画面下の方に「DeepL APIで使用する認証キー」が表示される。あとでAPIキーを使うので控えておいてほしい。

 137:     //Google Cloud Platform APIキー
 138:     //https://cloud.google.com/maps-platform/ から無料申込み.
 139:     //1ヶ月当たり最初の50万文字までは無料だが、それ以上は有料になる.
 140:     //利用しないのなら未定義のままでよい.
 141:     var $GOOGLE_API_KEY = '**************************************';
 142: 
 143:     //DeepL APIキー
 144:     //https://www.deepl.com/ja/docs-api から無料申込み.
 145:     //利用しないのなら未定義のままでよい.
 146:     var $DEEPL_API_KEY = '****************************************';

前述のAPIキー$DEEPL_API_KEYに代入する。
なお、DeepL API を利用しないのであれば、代入する必要はない。

仕様:DeepL API v2

DeepL API v2 は、入力パラメータとしてPOSTを、出力結果がJSON形式で戻るというAPIである。
WebAPIのURL
URL
https://api-free.deepl.com/v2/translate

入力パラメータ
フィールド名 要否 内  容
text 必須 翻訳したいテキスト(UTF-8)
target_lang 必須 ターゲット(翻訳先)言語(英大文字)
auth_key 必須 APIキー
応答データ構造(json) translations _0 text 翻訳テキスト detected_source_language 入力テキストの言語

解説:DeepL API v2

 303: /**
 304:  * DeepL APIを使って翻訳を行う.
 305:  * @param   string $text            翻訳したいテキスト
 306:  * @param   string $targetLanguage  翻訳したい言語
 307:  * @return  string 翻訳テキスト/FALSE:失敗
 308: */
 309: function deepLTranslate($text, $targetLanguage='ja') {
 310:     $this->webapi = 'https://api-free.deepl.com/v2/translate';
 311:     $data = array(
 312:         'text'          => $text,
 313:         'target_lang'   => strtoupper($targetLanguage),
 314:         'auth_key'      => $this->DEEPL_API_KEY,
 315:     );
 316: 
 317:     //Google Cloud Translate APIを呼び出す.
 318:     $ch = curl_init();
 319:     curl_setopt($ch, CURLOPT_URL, $this->webapi);
 320:     curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
 321:     curl_setopt($ch, CURLOPT_POST, TRUE);
 322:     curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
 323: 
 324:     curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
 325:     curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
 326:     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
 327:     curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
 328: 
 329:     $response = curl_exec($ch);
 330:     curl_close($ch);
 331: 
 332:     //APIエラー
 333:     if ($response == FALSE) {
 334:         $this->errmsg = 'DeepL APIにアクセスできません';
 335:         $ret = FALSE;
 336:     } else {
 337:         $arr = json_decode($response, TRUE);
 338:         if ($arr == FALSE) {
 339:             $this->errmsg = 'DeepL APIの応答が不正です';
 340:             $ret = FALSE;
 341:         //翻訳成功
 342:         } else if (isset($arr['translations'][0]['text'])) {
 343:             $ret = (string)$arr['translations'][0]['text'];
 344:         } else {
 345:             $this->errmsg = 'DeepL APIの応答が不正です';
 346:             $ret = FALSE;
 347:         }
 348:     }
 349: 
 350:     return $ret;
 351: }

メソッド deepLTranslate は、DeepL APIに翻訳したいテキストと翻訳したい言語を渡し、翻訳結果のテキストを求める。
API呼び出しには cURL関数を用いた。

参考サイト

(この項おわり)
header