Microsoft Translator APIを使ってみたよ (1)
Microsoft Translator APIを使って、翻訳コンニャク機能を試してみました。
Microsoft Translator APIって??
翻訳コンニャクしてくれるAPIです。
Microsoft Translator | Windows Azure Marketplaceがそのものなので、詳細はリンク先を参照下さい。
翻訳APIを公開しているところでは、Googleさんもあります。ただ、無償プランがなくなった模様ですので、Microsoftさんを使わせて頂いた次第です。
とはいっても、無償プランは 2,000,000 文字/月 と制限はあります。
2,000,000文字以降は有償プランが用意されています。
下準備(アカウントの作成など)
- Windows Live IDの取得 (適当にお願いします)
- Microsoft Translator サブスクリプションの登録 (コチラから)
- アプリケーションの登録 (コチラ)から
といったモノが必要となります。
ココで1点ハマったのが、アプリケーションの登録でした。。
クライアントIDには何か適当な名前を入れておけば良いのかなーと思いきや、自身のアカウントの「顧客ID」を指定しておく必要があるようです。。
MSDNのリファレンスにも始めからそう書いておいて欲しかった....(苦笑)
参考
ともあれ、これで"Client ID"と"Client Secret"を取得すればOKです。
この他に、Salesforce側でリモートサイトの設定をしておくと良いでしょう。
Access Tokenを取得する
一応リファレンスもあるので、ココを参照するのがベストです。
とはいっても、さすがマイクロソフト...と言わんばかりに、サンプルはC#だったりと。。
そんなわけで、Force.com上でどうやって実装してみようか?というのがこんなサンプルです。。
※Javascript RemoteActionで定義しているのは、個人的な好みです。
単に、RemoteAction内からHTTPコールアウトを使って、AccessTokenを取得しにいって、その結果をAccessToken保持用のApexクラスに渡しているだけです。
※なお、jQueryで取得するのもアリかと思いますが、クロスドメインになるあたりがやっかいかと思います。jQuery + JSONPの組合せでうまくできるかなー...と思いますが、またの機会に試してみようかと。。
Translator APIを利用する
さてようやくAPIを使って翻訳してみましょうか。Translator APIは3種類のInterfaceが用意されています。
ココでは、HTTP Interfaceを使ってみます。
Access Tokenを取得したときと同様に、HTTPコールアウトを使って、日本語を英語に翻訳してます。
ここでハマったのが、
token = token.replaceAll('&', '&');
という箇所でした。
AccessTokenを取得する処理にも関連してくるとは思いますが、ココでは受け取ったtoken内で「&」となって欲しいところが、
&
とエンコードされてしまうので、無理矢理戻してます。。
※もっと良い方法があるかと思いますが、とりあえずこんな感じで処理しちゃってます。。うーむ..イマイチ。。
ココに気付かず、ずーっとこんなエラーメッセージが返ってくるので、(やや)気が狂いそうになりました。
Message: The Web Token must have a signature at the end. The incoming token did not have a signature at the end of the token.
さて、ココで上記のApexクラスを利用するVFPageを用意します。
ココでは、
- Access Tokenを取得するRemoteAction
- テキストを翻訳するRemoteAction
の2つを用意しておいて、Access Tokenが取得できたら、翻訳処理する、という流れになっています。
結果は
↓
"Sunlight Yellow Over Drive"になっていないので、翻訳に失敗した模様です...
_| ̄|○
ちなみに、AddTranslationを使うと、翻訳を追加できるようです。
最後に
これの利用例について、簡単にメモしておきます。
あるカスタムオブジェクト内に
- 日本語用テキスト項目
- 英語用テキスト項目
を用意しておいて、どちらかを入力して翻訳用ボタンをポチると、もう片方のテキスト項目に翻訳結果がセットされる
といった例があるかと思います。
後は、以前にISV Force勉強会で見かけた記憶がありますが、Chatter Translatorに使ってみても良いかもしれません。
Chatter Translatorのサンプルとか、次回のネタにしても良いかもしれませんが全くの未定です。
ではでは〜