こんにちは、blueです。
ここではDeepL APIを用いたコードについて補足説明します。
前回の記事はこちら
この記事では
- POST方式でのコード
- 日本語から英語への翻訳コード
について紹介していますので、勉強していってください。
POST方式でのサンプルコード
POST方式でのサンプルコードは以下になります。
変数APIkeyには取得したAPIキーを入れるようにしてください。
Sub DeepLTranslation()
'DeepLで取得したkey
Const APIkey As String = "(取得したAPIキー)"
'翻訳元文章
Dim SourceSentense As String
SourceSentense = "Today is holiday.Why do you work today?"
Dim http As MSXML2.XMLHTTP60
Set http = New MSXML2.XMLHTTP60
With http
'HTTPリクエスト(POSTメソッド)
Call .Open("POST", "https://api-free.deepl.com/v2/translate?text=" & SourceSentense & "&source_lang=EN&target_lang=JA")
Call .setRequestHeader("Authorization", "DeepL-Auth-Key " & APIkey)
Call .send
Do
If .readyState = 4 Then Exit Do
DoEvents
Loop
'HTTPレスポンスの内容確認
'*成功時:{Res="status":200, "message":"ok"}
Debug.Print .responseText
Debug.Print .Status
'ダブルクォーテーションで区切って配列として取得
Dim buf As Variant
Dim TranslatedSentense As String
buf = Split(http.responseText, """")
TranslatedSentense = buf(9)
Debug.Print TranslatedSentense
End With
End Sub
変更しているのは以下の箇所です。
Call .Open("POST", "https://api-free.deepl.com/v2/translate?text=" & SourceSentense & "&source_lang=EN&target_lang=JA")
Call .setRequestHeader("Authorization", "DeepL-Auth-Key " & APIkey)
POST方式の場合は認証キーをURLに付属させないので安全性が高まります。
DeepL APIではGET,POSTどちらも使用できる為、本編ではコードを書きやすいGET方式を使用しましたが、安全性を考えた場合はPOST方式を使うのがよいです。
日本語から英語に翻訳する際のサンプルコード
以下は「こんにちは、今日は暑いですね」を英語に翻訳するコードです。
変数APIkeyには取得したAPIキーを入れるようにしてください。
Sub DeepLTranslation()
'DeepLで取得したkey
Const APIkey As String = "(取得したAPIキー)"
'翻訳元文章
Dim SourceSentense As String
SourceSentense = "こんにちは、今日は暑いですね"
'日本語の場合を考慮してUTF-8にエンコードする
SourceSentense = WorksheetFunction.EncodeURL(SourceSentense)
Dim http As MSXML2.XMLHTTP60
Set http = New MSXML2.XMLHTTP60
With http
'HTTPリクエスト(POSTメソッド)
Call .Open("POST", "https://api-free.deepl.com/v2/translate?text=" & SourceSentense & "&source_lang=JA&target_lang=EN")
Call .setRequestHeader("Authorization", "DeepL-Auth-Key " & APIkey)
Call .send
Do
If .readyState = 4 Then Exit Do
DoEvents
Loop
'HTTPレスポンスの内容確認
'*成功時:{Res="status":200, "message":"ok"}
Debug.Print .responseText
Debug.Print .Status
'ダブルクォーテーションで区切って配列として取得
Dim buf As Variant
Dim TranslatedSentense As String
buf = Split(http.responseText, """")
TranslatedSentense = buf(9)
Debug.Print TranslatedSentense
End With
End Sub
変更しているのは2か所です。
一か所目はこちらです。
'日本語の場合を考慮してUTF-8にエンコードする
SourceSentense = WorksheetFunction.EncodeURL(SourceSentense)
DeepL APIにおけるテキストパラメーターはUTF-8でエンコードされたテキストのみサポートしています(詳しくはこちら)
ただし、日本語は「Shift-JIS」コードの為、このままでは以下のようなレスポンスになってしまいます(文字コードについてはこちら)。
その為WorksheetFunctionのEncodeURL関数を使って日本語文字列をUTF-8にエンコードしています。
参考までに「こんにちは、今日は暑いですね」をUTF-8コードに変換したものは以下になります。
%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF%E3%80%81%E4%BB%8A%E6%97%A5%E3%81%AF%E6%9A%91%E3%81%84%E3%81%A7%E3%81%99%E3%81%AD
もう一か所はこちらです。
'HTTPリクエスト(POSTメソッド)
Call .Open("POST", "https://api-free.deepl.com/v2/translate?text=" & SourceSentense & "&source_lang=JA&target_lang=EN")
source_langをJA(日本語), target_langをEN(英語)にしています。
日本語はJPと思いがちですがドキュメントではJAと書かれていますので注意ください。
今回のまとめ
今回はDeepL APIを用いた文書の翻訳に関して補足説明をしました。
DeepL APIではGET,POSTどちらも使用できますが、安全性を考えればPOST方式の方がベターです。
ただPOST方式はヘッダー処理などが少し難しいので、GET方式を学んでから勉強するとよいと思います。
この記事を通して少しでも内容を理解していただければ嬉しく思います。
pythonですが会話形式で非常にわかりやすく書かれている書籍です。webAPIやスクレイピングを一から理解できる内容になっています。筆者はこれでWeb APIを勉強しました。
Selenium-VBAでのWebスクレイピングに関する記事はこちらをどうぞ
【ExcelVBA‐Selenium】【永久保存版】スクレイピングに必要なSeleniumのインストール方法教えます
【Selenium-VBA】Yahooメールへのログイン方法をわかりやすく説明する
ChromeでのWebスレイピングをできる限りわかりやすく説明する(Excel VBA)
【ExcelVBA‐Selenium】Chrome driverのバージョンエラーが出た時の対処法(2021/10/7更新)
【Selenium-VBA】Seleniumを用いたスクレイピングでテーブル情報を取得する1
【Selenium-VBA】スクレイピングをするのに必要なHTMLについて説明します1
【Selenim-VBA】起動済みのChromeを用いてSeleniumによるスクレイピングを行う
【Selenium-VBA】JavaScriptを使ってスクレイピングをしてみる1
【VBA】SeleniumBasicにおけるクラス、メソッド、プロパティ一覧(日本語版)
Web-APIを用いたデータ取得に関する記事はこちらをどうぞ
【VBA】Web APIを使ってデータを取得する(OpenWeatherMap)1
【VBA】Web APIを使って時間別天気予報を取得する(気象庁API)
【VBA】Web APIを使ってLINE通知を行う(LINE Notify)1
コメント