見出し画像

GoogleスプレッドシートでGAS&DeepL活用

スプレッドシートでGoogle翻訳を活用する方法を以前紹介しました。

こういうTipsを紹介すると、Google翻訳よりも

DeepLの方が便利じゃない?

と言う声を聞きます。

どっちが良い?

と言う比較に意味はなく、それぞれ個性(特徴)があり、

どっちも凄い!

と自分は思います。特徴については脇に置いて、今回はGoogleスプレッドシートからDeepLのAPIを呼び出す方法を紹介します。

■準備

DeepLのサービス(=API)を活用するには、DeepLのサイトにアクセスし、アカウント登録&Keyを入手する必要があります。

APIは無料アカウント登録でも使えますが、1か月に50万文字までの翻訳制限や、なぜかクレジットカードの登録が必要です。。。

気に入ったら、1ヶ月単位で支払うプロプランがお薦めです。

■作成手順

準備ができたら、スプレッドシートを作成しましょう。まずは次のようなシートを作成します。

そして、Apps Script(=スクリプトエディター)を開きます。

エディターでは次のコードを記載(or コピペ)します。

unction translateByDeepL() {
 
 // DeepL Keyを指定
 const key = "ここにKeyを入力";
 const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
 const sheet       = spreadsheet.getSheetByName('シート1');
 const values      = sheet.getDataRange().getValues();
 const lastRow   = sheet.getLastRow();
 // 英語から
 const fromL = "en";
 // 日本語へ
 const toL = "ja";
 const results      = [];
 
 // 見出しを除いて、A列のデータを取得
 for(let i = 1; i < values.length; i++){
   const sourceColumn  = values[i][0];
 // 英語から日本語に翻訳

  const txt = 'https://api-free.deepl.com/v2/translate?auth_key=' + key + '&text=' + encodeURIComponent(sourceColumn) + '&target_lang='+ toL +'&source_lang=' + fromL;

  const response = UrlFetchApp.fetch(txt);
  const json = response.getContentText(); 
  const data = JSON.parse(json); 
  const exportColumn = data.translations[0].text;

   results.push([exportColumn]);
 }
 // B列に翻訳データを記入
 sheet.getRange(22, lastRow-1).setValues(results);
}

コピペした後、

const key = "ここにKeyを入力";

に取得したDeepLのキーを貼り付けたら( "と"で挟んで、;を付けることを忘れずに!)、保存します。

さて試してみましょう。例えば、

と言う文章を用意し、上述のコードを実行すると、初回は

と権限確認が表示されるので、承認をします。すると、

と翻訳されます。以前紹介したGoogle翻訳では、「桃太郎の仲間が〜」でちょっと違いが出ます。

■コード解説

コーディングの内容は、以前紹介したGoogle翻訳APIの時と処理の流れは一緒です(実際コピペしました)。大きく違うのはAPIの読み出し方です。

Google翻訳のAPIは、
・LanguageApp.translate(〜, "en", "ja")
で、ほぼ済みますが、

DeepLのAPIを使いデータを加工するにはどうしても数ステップ必要です。

const txt = 'https://api-free.deepl.com/v2/translate?auth_key=' + key + '&text=' + encodeURIComponent(sourceColumn) + '&target_lang='+ toL +'&source_lang=' + fromL;

  const response = UrlFetchApp.fetch(txt);
  const json = response.getContentText(); 
  const data = JSON.parse(json); 

また、いろいろな英文を試したところ時々エラーが出て、調べてみたら、記号の処理でこけることが判明しました。上述の文章だと、 ””(←ダブルクオテーションマーク)の処理が引っかかり、

encodeURIComponent(〜)

と、エンコード処理も含めてます。

なお、DeepLはGoogle翻訳に比べると対応言語は少ないです。主要言語は網羅しているのであまり支障はないと思うけど念の為。

さいごに

Google翻訳、DeepL翻訳、並べて使うのも良いです。

DeepLのAPI活用をネットで調べるとPythonやCurlなどが多く、GAS利用は乏しいので、自分が試した内容を備忘録として書きました(色々試してるとDeepLの方が自分好みの翻訳をする)。この記事が少しでも参考になると嬉しいです。


この記事が気に入ったらサポートをしてみませんか?