2013年2月22日金曜日

Microsoft Translator APIで翻訳 (改)その2

Microsoft Translator APIの使い方であるが次の手順でAPIを呼び出すことで翻訳ができる。

  1. access_tokenを取得する
  2. 翻訳する

API呼び出しにはMicrosoft Translator APIの登録が必要になるがその方法については前のblogを参照してください。

また、これらAPI実行するにはHTTP POSTやリクエストヘッダへの値の設定が必要になる。 普通にブラウザからURLを叩くだけでは実行できないので何かプログラムを作成するか、開発者向けのブラウザ拡張ツールを使うといいだろう。Chromeの場合Postmanというアプリを使っているが結構使いやすい。

access_tokenを取得する
access_tokenを取得するには、以下のリクエストURLにHTTP POSTでパラメータを送る。
リクエストURL
https://datamarket.accesscontrol.windows.net/v2/OAuth2-13
メソッド
POST
リクエストのパラメータには以下を指定する。
grant_type
client_credentials
client_id
アプリケーションの登録時に指定したクライアント ID
client_secret
アプリケーションの登録時に取得した顧客の秘密
scope
http://api.microsofttranslator.com

POSTするときはcontent-type=application/x-www-form-urlencoded で送ること。 multipart/form-dataで送るとは受信できないというエラーになる。

応答として以下のようなJSONが返ってくる。

{
    "token_type": "http://schemas.xmlsoap.org/ws/2009/11/swt-token-profile-1.0",
    "access_token": "http%3a%2f%2fschemas.xmlsoap.org%2fws%2f2005%2f05%2fidentity%2fclaims%2fnameidentifier=....",
    "expires_in": "600",
    "scope": "http://api.microsofttranslator.com"
}
このJSONにaccess_tokenが含まれているのでその部分の文字列をコピーする。 access_tokenには有効期間があって取得時から10分のようである。

翻訳する
翻訳は、以下のリクエストURLに先に取得したaccess_tokenと合わせてパラメータを送る。
リクエストURL
http://api.microsofttranslator.com/V2/Http.svc/Translate
メソッド
とりあえずHTTP GETで試してみた。POSTでもよい?

access_tokenはリクエストのヘッダに設定する必要がある。 ヘッダ名Authorizationに値として Bearer (空白) (先に取得したaccess_token)を設定する。 なぜ、Bearerという文字列をaccess_tokenの前につけるか謎だが必須になっている。 access_tokenは有効期限内ならば何度でも使えるようである。 有効期限が切れたaccess_tokenを使うと400 bad requestのエラーになった。

リクエストのパラメータには以下を指定する。

from
翻訳元言語のコード
to
翻訳先言語のコード
text
翻訳するテキスト

翻訳元言語と翻訳先言語にはこのページの一覧のものが使えるようである。

ためしに「こんばんわ」をスペイン語に翻訳する。Authorizationヘッダを設定してリクエストを投げる。

http://api.microsofttranslator.com/V2/Http.svc/Translate?from=ja&to=es&text=こんばんわ

結果が得られた。

<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">¡Buenas noches!</string>

スペイン語はよくわからないがたぶん合っているんだろう…

関連記事

2 件のコメント:

  1. かなり参考になりました。ありがとうございます。

    返信削除
  2. こちらもまだまだ勉強中ですがお役にたててうれしいです。

    返信削除