LoginSignup
2
3

More than 5 years have passed since last update.

HubotでMicrosoft Translator APIを使う(2017/02)

Last updated at Posted at 2017-02-09

やりたいこと

諸事情でslackでhubotを動かしたらここで打つ文章が翻訳されて返ってきたら面白いよねと思ったので試して見た。
結果としてやることはすごい簡単なのだけど、タイミング悪くWindows Azure Marketplaceに登録するやり方からAzure Potalへの統合を行なっている真っ最中のようでAPIの仕様などが変更されている模様。
今までのサンプルコードほとんど使えないし公式のサンプルコードにもちゃんと書いてないし公式の確認サービスでは変に動かないしそこに至るまでの諸々がすごい大変だった。

注意

いろんなところで書かれているWindows Azure Marketplaceにサインインですが、2017/2/9現在サイトに行ってもらうと書いてありますが、もうすでに新規での登録などはできないようです。また、2017/3/31に現在のサブスクリプション自体がクローズされるようです。
お気をつけを。
というわけで以下はその代替方法。

前提

slackでちょっとしたbotを動かしたい
これくらいできる

やったこと

  1. Microsoft azure への登録
  2. Microsoft Translator API を使えるようにする
  3. hubotで翻訳APIを使えるようにする

なぜMicrosoft Translator APIなのか

Googleは金かかるって書いてあったから。

Microsoft azure への登録

これは普通に無料で登録すればいんじゃないでしょうか。
会社連絡先とかあるけど個人用にしてます。

Microsoft Translator API を使えるようにする

本題

Microsoft azureにログインして上の検索窓から[Cognitive Services accounts]を検索してクリック
スクリーンショット 2017-02-09 13.49.43.png

私の場合は下記みたいになってたので、[+ Add]ボタンを押して登録作業に。
スクリーンショット 2017-02-09 13.52.46.png

すると作成画面になるので、必要情報を登録する。
今回は[Translator Text API]を使うのでこれを利用する。
API type部分をクリックすると出てくる。(下記はAPI選択窓が出てきてる状態)
スクリーンショット 2017-02-09 13.54.02.png

名前とか料金設定とはそれぞれは適切に自分で考えて入れてください。

するとダッシュボードになんか増えます。
スクリーンショット 2017-02-09 13.58.22.png

これをクリックするとこのAPIを利用するために必要なKEYや[Subscription ID]が手に入ります。

後はまぁ簡単に作れます。

hubotで翻訳APIを使えるようにする

ここら辺からは英語ドキュメントを探して頑張って読みました。
Azure Potalも最近この形式にしたのかな?って感じで誰もこの日本語のAzure Portalを元にやり方とかを書いてないのでめんどくさくてポータル自体を英語したし。(なのですいませんがAzure Portalは英語表記になってます)

APIなどの説明やドキュメントここで色々と動きを確認しました。
2017/02/09現在ではまだgithubに挙げられてるサンプルコードは古いままっぽいです。
2016/12/31以前であればこちらを参照しても動くと思いますが、新規のものだとclientidなどの必要なものが取得できないので無理っぽい(やり方あれば教えてください)

以下2項目は全ての言語に共通する内容なのでここは押さえておくといい。

一時的なトークンの発行

Authentication Token APIを参照。

ここで下記のグリーン部分のValueにKeyを入れる。
ちなみにここでDescription部分にSubscription keyとかかれてはいるものの利用するのはRESOURCE MANAGEMENTのKeysにあるKEY1もしくはKEY2である。
[Try it out!]ボタンを押すことでcurlでの一時トークン取得処理を実行してくれる。
後実行したコマンドも教えてくれるのでこれを元にHTTPリクエストを作ればここと同じ結果が得られるぜヒャッホイということである。
スクリーンショット 2017-02-09 14.34.28.png

一時トークンを使ってのAPIリクエスト送信

Text Translation APIを参照。
ここでようやく翻訳APIである。
今回は下記画像で見るように[GET /Translate]を利用している。
やることはほとんどさっきと一緒だがさっきの一時トークンを利用する必要がある。
もし何かに実装するとしたらフローとしては
1. 一時トークンの取得
2. 翻訳APIリクエスト
3. 取得して表示
みたいな感じになるのではないだろうか、よくわかんないけど。

ちなみにここでappidの説明(description)部分にAuthorization headerを指定しないときは必要と書かれているがこのシステム上だけで言えば大嘘である(私の環境ではだめだった)
Authorizationの項目だけ入れてappidを空で[Try it out!]ボタンを押すとなぜかレスポンスCODEで0が返ってくる。
逆にAuthorizationの内容をappidに入れれば普通に翻訳された結果が返ってくるので問題ないだろう(いじめかな?)(問題はある)
さらにさらに言えば実行されたコードというのをローカル環境で実行するとちゃんと翻訳されたXMLが返ってくる。
なんだかよくわからないシステムである。
スクリーンショット 2017-02-09 14.43.49.png

hubot用のスクリプト

HUBOTに関してはXMLの解析方法とかnode関連でちょっと手間取った。
リクエスト自体はそれほどでもないかな。
まずはpackage.jsonに下記二つを追加
json:package.json
"dependencies": {
....
"request": "2.79.0",
"xmldom": "0.1.27 "
....

ローカルで確認したい場合は、npm installして確認してください。
HUBOT用のcoffeescriptはこちらに置いときますね。
https://github.com/takatsura/hubot-ms-translator

HUBOT_TRANSLATOR_KEYに利用するKEYを入れてください

今回のは日本語から英語だけですけど、応用すれば簡単に指定の言語から指定の言語への翻訳というのを実装できると思います。

スクリーンショット 2017-02-09 16.22.23.png

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3