【翻訳API】GoogleのTranslation APIの使い方

※仕様はころころ変わるので、今現在での使い方

※以下Windowsでのやり方。でもMacでも流れは変わらないはず。

要はこういうリクエストを投げれば良い。以下はコマンドプロンプトとcurlを使う場合。

curl https://translation.googleapis.com/language/translate/v2?key=(ここにAPIキーを貼り付け)^&q=Hello+world^&target=de

PowerShellならこう。

Invoke-WebRequest `
-Uri "https://translation.googleapis.com/language/translate/v2?key=(ここにAPIキーを貼り付け)&q=Hello+world&target=de
" | Select-Object -Expand Content

※ヘッダーが要るかと思ったら要らなかった。

返ってくるのは

{
  "data": {
    "translations": [
      {
        "translatedText": "Hallo Welt",
        "detectedSourceLanguage": "en"
      }
    ]
  }
}

qパラメーターが原文となるけどURIなので、スペースやアポストロフィーなんかのエスケープよろしく。

参考
Quickstart (Basic)  |  Cloud Translation  |  Google Cloud
Translating text (Basic)  |  Cloud Translation  |  Google Cloud
API キーの使用  |  認証  |  Google Cloud

APIキーの取得

※GCP(Google Cloud Platform)にログインができ、新規プロジェクトを始められることなどが前提。

GCP上で発行する。

青い丸のところをクリックしてどうにかしてAPIキーを発行する。40文字程度の暗号化されたAPIキーが発行されるはずです。使用制限も適切にかけること。

これが漏れるとAPIが使われ放題になって、とんでもない額の課金が来るかもしれないので扱いは慎重に。特にTranslationAPIを使うアプリを作っているなら、コードに直書きしないように。

参考
API キーの使用  |  認証  |  Google Cloud

POSTメソッドでリクエストを投げる場合

リクエストメソッドを何も指定していないということはGETメソッドになるけど、さすがにそれは強引すぎやろと思うならPOSTメソッドでもできる。その場合ボディはJSON形式になる。

※以下のコードはヘッダーも付けていく。

以下コマンドプロンプト。

curl -X POST -H "Content-Type: application/json; charset=utf-8" -d "{ \"q\": \"Hello world\", \"target\": \"de\"}" https://translation.googleapis.com/language/translate/v2?key=(ここにAPIキーを貼り付け)

PowerShellはこう。

Invoke-WebRequest `
-Method POST `
-ContentType: "application/json; charset=utf-8" `
-Body '{ "q": "Hello world", "target": "de"}' `
-Uri "https://translation.googleapis.com/language/translate/v2?key=(ここにAPIキーを貼り付け)
" | Select-Object -Expand Content

アクセストークンを使う場合

APIキーの代わりに有効期限付きのアクセストークンを使ってAPIを呼び出す場合。公式ドキュメントのクイックスタートにも記載されているやり方。

curl -X POST -H "Authorization: Bearer (ここにアクセストークンを貼り付け)" -H "Content-Type: application/json; charset=utf-8" -d "{ \"q\": \"Hello world\", \"target\": \"de\"}" https://translation.googleapis.com/language/translate/v2

PowerShellならこう。

Invoke-WebRequest `
-Method POST `
-Headers @{ "Authorization" = "Bearer (ここにアクセストークンを貼り付け)" } `
-ContentType: "application/json; charset=utf-8" `
-Body '{ "q": "Hello world", "target": "de"}' `
-Uri "https://translation.googleapis.com/language/translate/v2
" | Select-Object -Expand Content

以下、アクセストークンを発行するやり方。

  • Quickstart (Basic)の「Set up a project」ボタンをクリックすると、TranslationAPIが有効化され、JSON形式でプライベートキーがダウンロードできるので、それを適当なところに置く。
  • Google Cloud SDKをインストール。インストーラーをダウンロードしてインストールするのが手っ取り早い。実行後最後の段階で「Start Cloud SDK Shell」と「Run gcloud init」のチェックボックスにチェックを入れた状態でFinishをクリック。SDKの初期化ができる。コマンドプロンプトまたはPowerShell上でgcloudと打てば何かが返ってくるのでインストール確認ができる。
  • PowerShellまたはコマンドプロンプトを立ち上げて、一時的な環境変数を設定。
PowerShellの場合
$env:GOOGLE_APPLICATION_CREDENTIALS="(プライベートキーのフルパス)"

コマンドプロンプトの場合
set GOOGLE_APPLICATION_CREDENTIALS=(プライベートキーのフルパス)
  • PowerShellまたはコマンドプロンプト上で、gcloud auth application-default print-access-tokenと打てばアクセストークンが発行される。

参考
Quickstart (Basic)  |  Cloud Translation  |  Google Cloud

リクエストを投げるときに使えるパラメーター

上のサンプルでは

{
  "q": "Hello world",
  "target": "de",
}

だったけど、もうちょっと指定できる。

{
  "q": ["Hello world", "My name is Jeff"],
  "source": "en",
  "target": "de",
  "format": "text"
}

返ってくるのはこちら。

{
  "data": {
    "translations": [
      {
        "translatedText": "Hallo Welt"
      },
      {
        "translatedText": "Mein Name ist Jeff"
      }
    ]
  }
}

参考
Method: translate  |  Cloud Translation  |  Google Cloud

考察

APIキーおよびアクセストークンに「GCP上のどのプロジェクトのTranslation APIなのか」という情報が含まれている。このAPIキーまたはアクセストークンさえ発行してしまえば、後はHTTPリクエストを投げるだけでどこからでも翻訳文が入手できるはず。ただし、アクセストークンには有効期限があるのに対して、APIキーは原則有効期限が無い。手動で定期的に更新するべき。

セキュリティを上げるなら

アプリ ⇔ バックエンドサーバー ⇔ Translation API

という風に、サーバーを一つ挟むのが吉。

おまけ

調べる上でついでに分かった、コマンドプロンプトまたはPowerShellについての基本的なこと。

  • 翻訳元の文を別ファイルに分ける。
  • 文字列の中での変数展開。
  • PowerShellのSelect-Objectコマンドレット

翻訳元の文を別ファイルに分ける

以下の内容で、request.jsonという名前のファイルを作成。

{
  "q": ["Hello world", "My name is Jeff"],
  "target": "de"
}

そしてコマンドプロンプトまたはPowerShellのcdコマンドでrequest.jsonが置いてある場所に移動して以下のように打ち込む。

PowerShellでは-Bodyオプションの代わりに以下のようにする。

-InFile request.json

コマンドプロンプトでは-d引数のところで以下のようにする。

-d @request.json

文字列内での変数展開

PowerShellの場合

$(変数名またはコマンド)

を文字列内に記述してやれば変数の中身、またはコマンド実行後の出力結果が展開される。

具体例はこちら

-Headers @{ "Authorization" = "Bearer $(gcloud auth application-default print-access-token)" } 

コマンドプロンプトの場合

分からん。

PowerShellのSelect-Objectコマンドレット

Invoke-WebRequest `
-ContentType: "application/json; charset=utf-8" `
-Uri "https://translation.googleapis.com/language/translate/v2?key=(ここにAPIキーを貼り付け)&q=Hello+world&target=de
" | Select-Object -Expand Content

の、| Select-Object -Expand Contentを削除すると、帰ってくるのは

StatusCode        : 200
StatusDescription : OK
Content           : {
                      "data": {
                        "translations": [
                          {
                            "translatedText": "Hallo Welt",
                            "detectedSourceLanguage": "en"
                          }
                        ]
                      }
                    }

RawContent        : HTTP/1.1 200 OK
                    Vary: X-Origin,Referer,Origin,Accept-Encoding
                    X-XSS-Protection: 0
                    X-Frame-Options: SAMEORIGIN
                    X-Content-Type-Options: nosniff
                    Alt-Svc: h3-27=":443"; ma=2592000,h3-25=":443"; ma=25...
Forms             : {}
Headers           : {[Vary, X-Origin,Referer,Origin,Accept-Encoding], [X-XSS-Protection, 0], [X-Frame-Options, SAMEORIG
                    IN], [X-Content-Type-Options, nosniff]...}
Images            : {}
InputFields       : {}
Links             : {}
ParsedHtml        : mshtml.HTMLDocumentClass
RawContentLength  : 143

要はもろもろ全部表示される。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です