nomurabbitのブログ

nomurabbitのブログはITを中心にした技術ブログです。

nomurabbitのブログ

【AWS】DeepLのAPIで翻訳してみた【Lambda】

この記事は.NET Core 3.1で書かれたAWS Lambdaから、DeepLAPIを呼び出して日本語から英語へ翻訳する方法を解説したものです。


こんにちは!らびです。今回はDeepLのAPIを使って翻訳していきます。

これさえあればどんな言語のドキュメントにもばっちり対応できますね!


アカウントの登録

DeepLの翻訳サービスにはブラウザ版APIが存在します。ブラウザ版はだれでも自由に利用することができますが、今回はAPIを使うためアカウントの登録を行います。


APIをクリックして…

f:id:nomurabbit:20220115154532p:plain


無料で登録するからアカウントを登録しましょう。

f:id:nomurabbit:20220115154609p:plain

f:id:nomurabbit:20220115154700p:plain


無料版でもクレジットカードの登録が必要だジョ。


認証キーの取得

APIのリクエストに必要な認証キーアカウント画面から確認できます。外部にもれるといけないので大切に扱いましょう。


f:id:nomurabbit:20220115154949p:plain


万が一認証キーが漏洩してしまったら再発行もできます。


実装

それでは早速実装です。今回は.NET Core 3.1AWS LambdaからAPIを呼び出します。

public GlbResponseBody GetAction(GlbRequestBody glbRequestBody)
{
    try
    {
        string argTargetLang = glbRequestBody.TargetLang;
        string argText       = glbRequestBody.Text;
        string returnString  = "";

        using (var client = new HttpClient())
        using (var request = new HttpRequestMessage())
        {
            var queryString = new Dictionary<string, string>()
            {
                { "target_lang", argTargetLang },
                { "text"       , argText }
            };
            request.RequestUri = new Uri($"https://api-free.deepl.com/v2/translate?{new FormUrlEncodedContent(queryString).ReadAsStringAsync().Result}");
            request.Method     = HttpMethod.Post;
            request.Headers.Add("ContentType", "application/x-www-form-urlencoded");
            request.Headers.Add("Authorization", "DeepL-Auth-Key -kokoni auth key wo nyuryoku-");

            using (HttpResponseMessage response = client.SendAsync(request).Result)
            {
                returnString = response.Content.ReadAsStringAsync().Result;
            }
        }

        TrnResponse trnResponse  = JsonSerializer.Deserialize<TrnResponse>(returnString, GlbUtil.GetJsonSerializerOptionsDefault());

        GlbResponseBody glbResponseBody = new GlbResponseBody();
        glbResponseBody.Text = trnResponse.Translations.Count > 0 ? trnResponse.Translations[0].Text : "translation error.";

        return glbResponseBody;
    }
    catch (System.Exception e)
    {
        throw e;
    }
}


翻訳元の文字列をクエリパラメータとして渡すことヘッダーのAuthorizationキーに認証キーを入れることがポイントです。

GitHubソースコードを載せているので、よろしければ参考にしてくださいだジョ。

github.com


まとめ

というわけで、今回はDeepLのAPIについて勉強してきましたが、いかがでしたでしょうか?

使い方次第ではDeepL API Proを検討してみるのもアリですね。

次回もぜひご覧ください。では!


参考

DeepL
www.deepl.com