Bing TranslatorのAPIである、Microsoft Translator APIについて解説します。このAPIには、
の3つの利用方法があります。
※アプリケーションIDのトークンをページ表示時に取得しているため、一定時間が経過すると翻訳できなくなります。そのときはページを再読み込みしてください。
アプリケーションIDのトークンを取得します。
GET http://api.microsofttranslator.com/V2/Ajax.svc/GetAppIdTokenGetAppIdToken Method | MSDN
パラメータ | 説明 | 必須 |
---|---|---|
appId | アプリケーションID | ○ |
minRatigRead | 翻訳結果として取得可能な翻訳ランクの最小値 | |
maxRatingWrite | ユーザーが登録可能な翻訳ランクの最大値 | |
expireSeconds | トークンの有効期間。単位は秒数
範囲は1から86400 (1日) まで |
○ |
oncomplete | レスポンスを受け取るコールバック関数 |
MIME Typeはapplication/x-javascriptで、トークンがダブルクォートで囲まれた形式で返されます。
テキストを翻訳します。
GET http://api.microsofttranslator.com/V2/Ajax.svc/TranslateTranslate Method | MSDN
パラメータ | 説明 | 必須 |
---|---|---|
appId | アプリケーションIDまたはアプリケーションIDのトークン | ○ |
text | 翻訳するテキスト | ○ |
from | 翻訳するテキストの言語コード (ISO 639-1) | |
to | 翻訳結果のテキストの言語コード (ISO 639-1) | ○ |
contentType | 翻訳するテキストの書式
|
|
category | 翻訳するテキストのカテゴリ
サポートされるのは'general'のみ |
|
oncomplete | レスポンスを受け取るコールバック関数 |
翻訳結果のテキストを引数として、コールバック関数が呼び出されます。
有効期限の切れたトークンを使用したときは、
ArgumentException: The token has expired Parameter name: appId : ID=0934.V2_Json.Translate.00000000
のようにテキスト形式で結果が返されます。このときコールバック関数は呼び出されません。
指定のテキストを音声で読み上げるストリームのURLを返します。
GET http://api.microsofttranslator.com/V2/Ajax.svc/SpeakSpeak Method | MSDN
パラメータ | 説明 | 必須 |
---|---|---|
appId | アプリケーションIDまたはアプリケーションIDのトークン | ○ |
text | 読み上げるテキスト | ○ |
language | 読み上げるテキストの言語 (ISO 639-1) | ○ |
format | 音声のフォーマット
|
|
options | 音声データの品質
|
|
oncomplete | レスポンスを受け取るコールバック関数 |
対応言語のコードはGetLanguagesForSpeakメソッドで調べられます。またその言語コードの言語名はGetLanguageNamesメソッドで取得できます。Translator Language Codes | MSDN
言語コード | 言語名 |
---|---|
ca | カタロニア語 |
ca-es | カタロニア語 (スペイン) |
da | デンマーク語 |
da-dk | デンマーク語 (デンマーク) |
de | ドイツ語 |
de-de | ドイツ語 (ドイツ) |
en | 英語 |
en-au | 英語 (オーストラリア) |
en-ca | 英語 (カナダ) |
en-gb | 英語 (英国) |
en-in | 英語 (インド) |
en-us | 英語 (米国) |
es | スペイン語 |
es-es | スペイン語 (スペイン) |
es-mx | スペイン語 (メキシコ) |
fi | フィンランド語 |
fi-fi | フィンランド語 (フィンランド) |
fr | フランス語 |
fr-ca | フランス語 (カナダ) |
fr-fr | フランス語 (フランス) |
it | イタリア語 |
it-it | イタリア語 (イタリア) |
ja | 日本語 |
ja-jp | 日本語 (日本) |
ko | 韓国語 |
ko-kr | 韓国語 (韓国) |
nb-no | ノルウェー語 (ノルウェー) |
nl | オランダ語 |
nl-nl | オランダ語 (オランダ) |
no | ノルウェー語 |
pl | ポーランド語 |
pl-pl | ポーランド語 (ポーランド) |
pt | ポルトガル語 |
pt-br | ポルトガル語 (ブラジル) |
pt-pt | ポルトガル語 (ポルトガル) |
ru | ロシア語 |
ru-ru | ロシア語 (ロシア) |
sv | スウェーデン語 |
sv-se | スウェーデン語 (スウェーデン) |
zh-chs | 簡体字中国語 |
zh-cht | 繁体字中国語 |
zh-cn | 簡体字中国語 (中華人民共和国) |
zh-hk | 繁体字中国語 (香港) |
zh-tw | 繁体字中国語 (台湾) |
≫SOAP
Translator APIはBingのアプリケーションIDで利用できますが、これはすでに非推奨とされています。その代替として、今後はWindows Azure MarketplaceのIDからアクセストークンを取得するものとされています。Translate Method | MSDN
このWindows Azure Marketplaceからの利用には制限があり、翻訳できる文字数が1月あたり200万文字 (2012/12現在) となっています。それを超えた利用には、文字数に応じて費用が発生します。
アクセストークンを取得するには、下表に示す顧客IDと顧客の秘密が必要となります。
用語 | 意味 | 別名 |
---|---|---|
顧客ID | Windows Azure Marketの登録ID |
|
顧客の秘密 | Windows Azure Marketに登録された アプリケーションのID |
|
顧客IDと顧客の秘密を取得するには、次のようにします。
顧客IDと顧客の秘密を利用して、アクセストークンを取得します。
アクセストークンの有効期間は10分間です。その後は再びアクセストークンを取得し直す必要があります。
http://api.microsofttranslator.com/V2/Http.svc/Translate
1回のリクエストに含められる文字は、スペースやマークアップを含めて1000文字までです。
<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">こんにちは</string>
define( 'CLIENT_ID', 'xx' ); // 顧客ID define( 'CLIENT_SECRET', 'yy' ); // 顧客の秘密 define( 'GRANT_TYPE', 'client_credentials' ); define( 'SCOPE_URL', 'http://api.microsofttranslator.com' ); define( 'AUTH_URL', 'https://datamarket.accesscontrol.windows.net/v2/OAuth2-13/' ); $text = 'hello'; // 翻訳するテキスト $from = 'en'; // 翻訳するテキストの言語コード $to = 'ja'; // 翻訳結果のテキストの言語コード try { $accessToken = GetAccessTokens( GRANT_TYPE, SCOPE_URL, CLIENT_ID, CLIENT_SECRET, AUTH_URL ); $authHeader = 'Authorization: Bearer '.$accessToken; $url = 'http://api.microsofttranslator.com/V2/Http.svc/Translate?' .http_build_query( compact( 'text', 'from', 'to' ) ); $response = Request( $url, $authHeader ); echo $response; } catch( Exception $e ) { echo $e->getMessage(); }
function GetAccessTokens( $grant_type, $scope, $client_id, $client_secret, $auth_url ) { $params = http_build_query( compact( 'grant_type', 'scope', 'client_id, 'client_secret' ) ); $ch = curl_init(); curl_setopt( $ch, CURLOPT_URL, $auth_url ); curl_setopt( $ch, CURLOPT_POST, TRUE ); curl_setopt( $ch, CURLOPT_POSTFIELDS, $params ); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, TRUE ); curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, FALSE ); $response = curl_exec( $ch ); if( curl_errno( $ch ) ) { throw new Exception( curl_error( $ch ) ); } curl_close( $ch ); $json = json_decode( $response ); if( isset( $json->error ) ) { throw new Exception( $json->error_description ); } return $json->access_token; }
function Request( $url, $authHeader ) { $ch = curl_init(); curl_setopt( $ch, CURLOPT_URL, $url ); curl_setopt( $ch, CURLOPT_HTTPHEADER, array( $authHeader, 'Content-Type: text/xml' ) ); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, TRUE ); curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, FALSE ); $response = curl_exec( $ch ); if( curl_errno( $ch ) ) { throw new Exception( curl_error( $ch ) ); } curl_close( $ch ); return $response; }
認証に失敗した場合に返されるエラーコードの一覧は、ACS (Windows Azure Access Control Service) Error Codesにあります。
まれにエラーコードもなく、次のようなレスポンスが返されることがあります。
<html> <body> <h1>Argument Exception</h1> <p>Method: Translate()</p> <p>Parameter: </p> <p>Message: Signature verification of the incoming token failed.</p> <code></code> <p>message id=3817.V2_Rest.Translate.00000000</p> </body> </html>
これはサービス側の問題のようです。Problem with Microsoft translator API | MSDN