LoginSignup
2
4

More than 5 years have passed since last update.

Microsoft Translatorを使って翻訳Botを作ってみる

Last updated at Posted at 2017-04-20

Microsoft Translatorを使って話しかけた言葉を英語に翻訳して返すBotを作成します。

Translatorのサブスクリプションを追加する

Microsoft Translatorを使用するためGettting Started with Microsoft Translator
に従ってTranslatorのサブスクリプションを追加します。

認証キーには以下のKEY1を使用します。
key1.png

Translatorを使ってみる

  • 認証キーを取得する
    認証キーを取得するコードが必要ですが公式の無料サンプルにサンプルコードがありますので、
    GetAzureTokenよりAzureAuthToken.csをプロジェクトに追加します。

  • Translatorを呼び出す
    次にTranslatorを呼び出すプログラムです。
    以下のような感じ。変数keyはサブスクリプションのKEY1に置き換えてください。

using System;
using System.IO;
using System.Net;
using System.Runtime.Serialization;

namespace Bot_Application2.Translator
{
    public class TextTranslator
    {
        private readonly string key = "KEY1";
        private string token;

        public TextTranslator()
        {
            token = new AzureAuthToken(this.key).GetAccessToken();
        }

        public string Translate(string input)
        {
            string translated = string.Empty;
            string from = "ja";
            string to = "en";
            string uri = "http://api.microsofttranslator.com/v2/Http.svc/Translate?text=" +
                System.Web.HttpUtility.UrlEncode(input) + "&from=" + from + "&to=" + to;

            HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(uri);
            httpWebRequest.Headers.Add("Authorization", token);
            WebResponse response = null;
            try
            {
                response = httpWebRequest.GetResponse();
                using (Stream stream = response.GetResponseStream())
                {
                    translated = (string)new DataContractSerializer(Type.GetType("System.String")).
                        ReadObject(stream);
                }
            }
            finally
            {
                if (response != null)
                {
                    response.Close();
                    response = null;
                }
            }
            return translated;
        }
    }
}

次にBotのソースですが、Bot Applicationプロジェクトを作成したときに生成されるテンプレートを変更します。
変更箇所はMessagesController.csのPostメソッドになります。

        /// <summary>
        /// POST: api/Messages
        /// Receive a message from a user and reply to it
        /// </summary>
        public async Task<HttpResponseMessage> Post([FromBody]Activity activity)
        {
            if (activity.Type == ActivityTypes.Message)
            {
                ConnectorClient connector = new ConnectorClient(new Uri(activity.ServiceUrl));
                // calculate something for us to return
                int length = (activity.Text ?? string.Empty).Length;

                // return our reply to the user
                Activity reply = activity.CreateReply(new TextTranslator().Translate(activity.Text));
                await connector.Conversations.ReplyToActivityAsync(reply);
            }
            else
            {
                HandleSystemMessage(activity);
            }
            var response = Request.CreateResponse(HttpStatusCode.OK);
            return response;
        }

以下の部分を書き換えました。

Activity reply = activity.CreateReply(new TextTranslator().Translate(activity.Text));

では動作を確認してみます。
SnapCrab_Bot Framework Channel Emulator_2017-3-19_17-26-56_No-00.png

見事に翻訳されてますね~

次回はAzureに発行してBotConnectorでSkypeに接続してみたいと思います。

2
4
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
4