MoreBeerMorePower

Power Platform中心だけど、ノーコード/ローコード系を書いてます。

DeepL APIで 英語⇔日本語の自動翻訳をおこなう

[Updated: 2021-10-26]

I have built custom connector including text translation and document translation.

Download available from github repo

https://github.com/mofumofu-dance/PowerApps365/tree/master/Connectors/DeepL


最近人気の翻訳サービス 「DeepL」、他の翻訳サービスに比べて特に日本語⇔英語の変換が非常に自然なのでよく利用しています。

あまり知られていなそうですが、このDeepLにもAPI プランが存在して、普段Webでやっている変換と同じ体験を API を通じて提供してくれます。

DeepL Pro | Translate Text, Word Docs & Other Docs Securely

今回は特にひねりのない内容ですが、この DeepL APIの利用方法と、Power Automate でこのAPIを利用して英語→日本語に変換する場合の方法をご紹介します。

DeepL API でできること、料金とキャパシティ

DeepL APIではWebでできる自動翻訳及びドキュメント (pptx, docx) のまるごと翻訳の両方をAPIとして提供しています。 まとまったドキュメントの英語化、日本語化を行うのであれば文章ごとに翻訳にかけるのではなくドキュメント翻訳APIを利用するほうが効果的かもしれません。

その他、詳細についてはAPIドキュメントを参照してください。

www.deepl.com

気になる料金ですが、DeepL API は有料 です。ベースが630円/月で、さらに翻訳する文字数 (翻訳元の文字数) に応じて料金がかかってきます。

文字数 追加分の料金
10,000 25円
100,000 250円
1,000,000 2,500円

青天井にならないように、コストコントロールの機能があって、あらかじめ自分で設定した文字数までで課金を抑えることができます。

※目安としては、1ブログだいたい3000~5000文字程度なので、月10本翻訳すると~125円 (+630円) というところです。

もし使うのであればコストコントロールを設定することを強くお勧めします。

APIプランの利用は、トップページ右上のハンバーガーメニューから「Plans and pricing」を選択し、ページ下部の「For developers」で「Buy Now」をクリックするだけです。

f:id:mofumofu_dance:20201102123908p:plain

f:id:mofumofu_dance:20201102123823p:plain

その後カード情報の入力が求められますので、入力しコストコントロールの上限を設定してください。

使い始めるのはそれほど難しい手続きはありません。

Power Automate からリクエスト

DeepL の翻訳APIは GET/POSTに対応しているので、Power Automate から DeepL API を実行する場合には「HTTP」アクション のほかに、OneDrive for Businessの「URLからファイルをアップロード」のアクションが利用できます。

いずれの場合でも翻訳元の文章をURL エンコードしておく必要があるので、encodeUriComponent関数を利用します。

ここでは例としてマニュアル実行のトリガーを利用して、テキストの入力を受け付けています。 トリガー後に「作成」(Compose) アクションを追加して、式から encodeUriComponent(...)を追加してください。

f:id:mofumofu_dance:20201102121020p:plain

OneDrive for Business コネクターを利用する場合

OneDrive for Business コネクターを利用する場合にはURLを以下のように構成します。

https://api.deepl.com/v2/translate?auth_key=[ここにAPI Key]&text=[ここに動的コンテンツ]&target_lang=en&source_lang=ja

API Planを契約するとAPI Keyが払い出されるので、それをURLパラメータに挿入します。また、text=には encodeUriComponentでエンコードした文字列を動的コンテンツから挿入してください。

f:id:mofumofu_dance:20201102121526p:plain

GETリクエストのレスポンス結果を取得するために、「ファイルコンテンツをパスから取得」アクションを追加しています。

コンテンツが取得できたら、この結果を json 関数 を利用してJSONオブジェクトに戻し、翻訳後のテキストを抽出します。

f:id:mofumofu_dance:20201102121729p:plain

返却されるJSONは以下のようになっているので、

{
    "translations": [{
        "detected_source_language":"EN",
        "text":"Hallo, Welt!"
    }]
}

目的の翻訳後の文字列抽出は以下の式を使います。

json(outputs('Get_file_content_using_path')?['body'])?['translations']?[0]?['text']

HTTPアクションを利用する場合

HTTP アクションを利用する場合にはOneDrive for Businessに比べて非常にコンパクトです。 文字列のエンコードまでは先ほどと共通であとはHTTPアクションを追加し、以下のように設定します。

設定項目 設定値
メソッド POST
URL https://api.deepl.com/v2/translate
ヘッダー {"Content-Type":"application/x-www-form-urlencoded"}
ボディ auth_key=[ここにAPI Key]&text=[ここに動的コンテンツ]&target_lang=en&source_lang=ja

このリクエストの結果は以下の式で取得できます。

body('HTTP')?['translations']?[0]?['text']

f:id:mofumofu_dance:20201102122635p:plain

おわり

いずれの方法でもWebで行うのと同様の翻訳結果が得られていました。 もし翻訳の自動化を行う際に、他の翻訳APIではイマイチだな~となった際には、DeepLの翻訳APIを使ってみるのも良いかもしれません。

コストコントロールだけは有効にしましょうね!!!

f:id:mofumofu_dance:20201102123425p:plain