このブログに翻訳ウィジェットが貼ってあるのにお気付きでしょうか? image

これはスクリーンショットですが、本物はこのページの左下の方にあります。このウィジェットは、日本語を読めない方のために設置してあるので、気付いているけど使ったことはないかもしれません。これは、Microsoft Translator という機械翻訳サービスで提供されているものです。

Microsoft Translator
http://www.microsofttranslator.com/

Microsoft Translator | Web マスター向けのサービス (ウィジェット)
http://www.microsofttranslator.com/web/

その他、多彩な機能や活用シーンについては同じチームの奥主さんが詳しく説明していますので、ご参照ください。

【MT】 Microsoft Translator あれこれhttp://blogs.technet.com/hirookun/archive/2010/04/23/3327736.aspx

今回は、Microsoft Translator が提供している API を使って、PowerShell からアクセスしてみたいと思います。

まずはこちらのドキュメントから。

Microsoft Translator | 開発者向けのサービス
http://www.microsofttranslator.com/dev/

ご覧のとおり、AJAX, SOAP, HTTP で API が公開されています。今回はもっともシンプルな HTTP インターフェイスを使ってみます。以下のような関数 Get-Translation を作ってみました。

function Get-Translation {
  param([parameter(ValueFromPipeline=$true)]
   [String] $text = "Hello World!")

  $w = new-object system.net.webclient
  $enc = [Text.Encoding]::GetEncoding("utf-8")
  $appid = "myappid"
  $from = "en"
  $to = "ja"
  $api = "http://api.microsofttranslator.com/V2/Http.svc/Translate"
  $url = "{0}?appid={1}&from={2}&to={3}&text={4}"
     -f $api, $appid, $from, $to, $text
  $h = $enc.GetString($w.DownloadData($url))
  ([xml]$h).string.get_Innertext()
}

パラメーターまたはパイプで英語の文字列を与えると、日本語に翻訳してくれます。デフォルトの文字列は "Hello World!" に設定してあります。(出力部分の色を変えています。)

PS> Get-Translation
ハローワールド!

PS> Get-Translation "Microsoft has built an application that combines the grassroots appeal of the town hall meeting with the reach of the Web."

Microsoft は、タウンミーティングの草の根魅力の Web アクセスを組み合わせたアプリケーションを構築しました。

翻訳してくれました! ではパイプ経由で文字列を渡してみたいと思います。ログエントリのテキスト部分を取り出します。まずはオリジナル。英語のメッセージです。

PS> (Get-EventLog system -newest 1 -source "forefront endpoint protection").Message

A statement of health (SoH) request was sent, but there was no response from the server. The fo
llowing information is contained in the correlation ID:
GUID = {xxxxx}
Time stamp = 2010年4月23日 14:28:49

では Get-Translation に渡して翻訳してみましょう。

PS> (Get-EventLog system -newest 1 -source "forefront endpoint protection").Message | Get-Translation

ステートメント (SoH) 要求の送信されましたが、サーバーからの応答がなかった。 次の情報は、相関 ID に含まれています。
GUID = {xxxxx}
タイムスタンプ 2010年4月23日 14:28:49 =

このようなログや、英文し��ないオンラインマニュアルやエラーメッセージなど、ちょっと翻訳してくれるとうれしいなという場面で、威力を発揮しそうですね。

スクリプトの内容を簡単にご紹介しておくと、Microsoft Translater の翻訳 API である、Translate Method に文字列や、何語から何語へといったパラメーターを渡すだけです。なお、AppID は Bing のサービスにアクセスするための ID です。以下のページから取得してください。

Bing Developer Center
http://www.bing.com/developers/appids.aspx

Translate メソッドからの戻り値は XML 形式になっていますので、中身の文字列のみ表示するようにしています。

この関数の改善点としては、長いテキストも送ることができるように、SOAP を使うように切り替えることや、複数の文章、すなわち文字列の配列を扱えるようにすることなどが考えられます。

あと、翻訳以外にも、TextToSpeech という読み上げ API も公開されています。なにかエラーが発生したら、音で知らせてくれるようなこともできそうですね。