DeepLAPIを使えるように設定する
DeepLのアカウントを作成する
今回は、以下のサイトにある「DeepL API Free」でアカウントを作成し、APIを投げる際に必要となるトークンを取得します。アカウントを作成する際に不正利用防止のため、クレジットカードを登録する必要があるのでちょっとめんどくさいです

アクセストークンを確認する
アカウント作成後、画面右上にあるユーザーIDをクリックし、アカウントタブの下の方にアクセストークンがあります。それを使用してAPIを呼び出すことができます


文字列翻訳を呼び出す
送信するデータは先ほど確認したアクセストークンと翻訳したい言語、今回は日本語を指定しています
string postURL = "https://api-free.deepl.com/v2/translate";
// POSTするデータを作成
WebRequest req = WebRequest.Create(postURL);
req.Method = "POST";
req.Headers.Add("Authorization", $"DeepL-Auth-Key {deepAPIAuthCode}");
req.ContentType = "application/x-www-form-urlencoded";
var postData = "text=" + Uri.EscapeDataString("翻訳したい英文");
postData += "&target_lang=" + Uri.EscapeDataString("JA"); // 日本語に翻訳
上記内容で送信した結果はきちんと翻訳されていました

ファイル内翻訳を呼び出す
ファイルの翻訳は大きく3ステップになります
翻訳したいファイルをアップロードする
今回はWordファイルに英文を記載し、それを翻訳してもらいます
string uploadURL = "https://api-free.deepl.com/v2/document";
var uploadWebRequest = WebRequest.Create(uploadURL) as HttpWebRequest;
uploadWebRequest.Method = "POST";
uploadWebRequest.Headers.Add("Authorization", $"DeepL-Auth-Key {deepAPIAuthCode}");
var multipartContent = new MultipartFormDataContent();
multipartContent.Add(new StringContent("JA"), "target_lang"); // 日本語に翻訳
multipartContent.Add(new ByteArrayContent(File.ReadAllBytes("翻訳したいファイルパス")), "file", "アップロードするファイル名");
uploadWebRequest.ContentType = multipartContent.Headers.ContentType.ToString();
uploadWebRequest.ContentLength = multipartContent.Headers.ContentLength.Value;
using (var stream = uploadWebRequest.GetRequestStream())
{
multipartContent.CopyToAsync(stream).Wait();
}
アップロードしたファイルの状態を取得
アップロードしたファイルの状態を確認し、翻訳が完了しているようであれば翻訳されたファイルをダウンロードできます
string uploadFileStatusURL = $"https://api-free.deepl.com/v2/document/{documentId}";
// POSTするデータを作成(アップロードしたファイルのステータス取得用)
WebRequest uploadFileStatusRequest = WebRequest.Create(uploadFileStatusURL);
uploadFileStatusRequest.Method = "POST";
uploadFileStatusRequest.Headers.Add("Authorization", $"DeepL-Auth-Key {deepAPIAuthCode}");
uploadFileStatusRequest.ContentType = "application/x-www-form-urlencoded";
var statusPostData = "document_key=" + Uri.EscapeDataString(documentKey);
var statusData = Encoding.ASCII.GetBytes(statusPostData);
uploadFileStatusRequest.ContentLength = statusData.Length;
using (var stream = uploadFileStatusRequest.GetRequestStream())
{
stream.Write(statusData, 0, statusData.Length);
}
翻訳されたファイルをダウンロードする
上記で取得したステータスが「done」になっていると翻訳が完了しており、ダウンロードすることができるので、実際にダウンロードします
var translationFileDownloadURL = $"https://api-free.deepl.com/v2/document/{documentId}/result";
// POSTするデータを作成(翻訳されたファイル取得用)
WebRequest translationFileDownloadRequst = WebRequest.Create(translationFileDownloadURL);
translationFileDownloadRequst.Method = "POST";
translationFileDownloadRequst.Headers.Add("Authorization", $"DeepL-Auth-Key {deepAPIAuthCode}");
translationFileDownloadRequst.ContentType = "application/x-www-form-urlencoded";
var translationPostData = "document_key=" + Uri.EscapeDataString(documentKey);
var translationData = Encoding.ASCII.GetBytes(translationPostData);
translationFileDownloadRequst.ContentLength = translationData.Length;
using (var stream = translationFileDownloadRequst.GetRequestStream())
{
stream.Write(translationData, 0, translationData.Length);
}
// レスポンスデータを処理(ファイルのダウンロード)
using (var response = translationFileDownloadRequst.GetResponse())
using (var stream = response.GetResponseStream())
{
using (var fileStream = new FileStream(_outPutFilePath, FileMode.Create, FileAccess.Write))
{
stream.CopyTo(fileStream);
}
}


最後に
今回作成したコードをGitHubにアップロードしていますので、参考にしてください
また、今回紹介している内容は以下のドキュメントに詳しく記載されています
おまけ
curlコマンドをC#に置き換える
ネットでDeepLのことを調べていた際に、curlコマンドをC#に置き換えてくれるというWebサービスを見つけました。このサービスのおかげである程度は楽して作業ができました
よくサンプルでcurlコマンドを使ってのリクエストが書かれていることが多々あるので重宝しそう
使用状況の確認方法
無料プランだと文字数制限があるので、それを超えないように注意が必要です
その確認方法はアカウントページのご利用状況のタブをクリックすると見れます
