※仕様はころころ変わるので、今現在での使い方
※以下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
要はもろもろ全部表示される。