Microsoft コグニティブAPI Translator Text API をC#で使う

Microsoftの翻訳APIであるTranslator Text API をC#で使う方法について書いていきます。

Microsoftということもあり、公式ドキュメントのサンプルコードの通りにやればできます。

他にもJAVA, Go, Node.js, PHP, Python, Rubyのサンプルコードもありました。

リンクはこちら
docs.microsoft.com

価格

無料プランで200万文字までいけるので、趣味程度なら十分でしょう。

詳細はこちら
azure.microsoft.com


 準備
Translator Text API の利用登録をする

Transrator Text API
Transrator Text API
Cognitive ServicesのなかにTransrator Text APIがあります。

API Keyを発行する
Keysから見れます

API Key
API Key

KEY1とKEY2がありますが、KEY1しか使いません。

実装

using System;
using System.Net.Http;
using System.Text;
// NOTE: Install the Newtonsoft.Json NuGet package.
using Newtonsoft.Json;

namespace TranslatorTextQuickStart
{
    class Program
    {
        static string host = "https://api.cognitive.microsofttranslator.com";
        static string path = "/translate?api-version=3.0";
        // Translate to German and Italian.
        // ここで翻訳先の言語を設定する。翻訳元は自動判定されるので不要。複数の言語を設定可能。
        static string params_ = "&to=de&to=it";

        static string uri = host + path + params_;

        // ここに先程のKEY1の値を設定する
        static string key = "ENTER KEY HERE";

        static string text = "Hello world!";

        async static void Translate()
        {
            System.Object[] body = new System.Object[] { new { Text = text } };
            var requestBody = JsonConvert.SerializeObject(body);

            using (var client = new HttpClient())        // 本来はHttpClientはクラス変数等にして使い回すのが推奨されている
            using (var request = new HttpRequestMessage())
            {
                request.Method = HttpMethod.Post;
                request.RequestUri = new Uri(uri);
                request.Content = new StringContent(requestBody, Encoding.UTF8, "application/json");
                request.Headers.Add("Ocp-Apim-Subscription-Key", key);

                var response = await client.SendAsync(request);
                var responseBody = await response.Content.ReadAsStringAsync();
                var result = JsonConvert.SerializeObject(JsonConvert.DeserializeObject(responseBody), Formatting.Indented);

                Console.OutputEncoding = UnicodeEncoding.UTF8;
                Console.WriteLine(result);
            }
        }

        static void Main(string[] args)
        {
            Translate();
            Console.ReadLine();
        }
    }
}

返ってくるjsonはこんな感じです。

[
  {
    "detectedLanguage": {
      "language": "en",
      "score": 1.0
    },
    "translations": [
      {
        "text": "Hallo Welt!",
        "to": "de"
      },
      {
        "text": "Salve, mondo!",
        "to": "it"
      }
    ]
  }
]