英文を自動翻訳するプログラムを作ってみた[Google Sheets API&DeepL API]

プログラミング

どうも、なおです。

今回はIT系の情報を発信するYouTubeチャンネル『エンジニアチャンネル』さんの動画に登場する自動翻訳プログラム”を実際に作ってみました!

動画の内容は、Googleスプレッドシートに並べられた英文を日本語訳して隣の列に書く、という作業を一般人(非エンジニア)が行う場合とプログラマーが行う場合を比較しています。

一般人は英文をコピーしてGoogle翻訳にペースト、日本語訳された文をコピーしてGoogleスプレッドシートにペースト、という作業を1つずつ行っていました。

対してプログラマーはGAS(Google Apps Script)でソースコードを書いて、上記の作業を自動化していました。

動画の趣旨としては「プログラミングを使えば作業を自動化できますよ」ということだけで、ソースコードの紹介や解説などはありませでした

なので今回はこのプログラムの開発手順の紹介、完成したソースコードの解説をします!

プログラムの設計

まずはプログラムの設計を行います。

最初にしっかりとした設計を行っていないと、開発途中で機能が実装不可能なことに気づいたり、開発しながら様々なことを考慮しなければいけなくなり、開発がしづらくなります。

なので設計はとても重要です。

今回は開発言語としてPythonを使います。理由は単純で僕がPythonを使い慣れているからです。

またGoogleスプレッドシートの操作にはGCP(GoogleサービスのAPI)を使うことにします。翻訳に関しては動画とは異なりますが、DeepL API使うことにします。

DeepLとは・・DeepLは翻訳サービスの名称で、Google翻訳よりも優れた翻訳精度を持っています。

  • 言語:Python
  • Googleスプレッドシート操作:GCP
  • 翻訳:DeepL API

ではこれらの通り開発を進めていきます。

Google Sheets APIを取得する

まずはGCPよりGoogle Sheets APIを取得します。

1[ダッシュボード]から[プロジェクトを選択]>[新しいプロジェクト]で新しいプロジェクトを作成します。

2作成したプロジェクトを開いて[ライブラリ]で「Google Sheets API」と検索します。

3Google Sheets APIを選択して[有効にする]をクリックします。

4[認証情報]>[認証情報を作成]>[サービスアカウント]を選択します。

5作成したサービスアカウントの右に表示される[*ペンマーク]をクリックします。

6[キー]>[鍵を追加]>適当な名前を付けて[JSON]を選択し[作成]をクリックします。

これでGoogle Sheets APIの取得は完了です。

ダウンロードされたjsonファイルは後に開発するソースコードと同じディレクトリにあると便利ですので、この段階でディレクトリを作成しておきましょう。この後の解説はjsonファイルがpythonファイルと同じディレクトリにある前提で進めていきます。

【フォルダ】
・jsonファイル
・pythonファイル

Pythonファイルとスプレッドシートを紐づける

次にPythonファイルからスプレッドシートを操作できるように紐づけの作業をします。

今回使用するスプレッドシートの内容がこちらです。

元動画と同じように英文を大量(42行)に用意しています。

ソースコードを書く前にまずは必要なライブラリをインストールします。

  • gspread:スプレッドシートを操作する
  • oauth2client:API認証を行う
pip install gspread
pip install oauth2client

ではソースコードを書いていきます。

import gspread
from oauth2client.service_account import ServiceAccountCredentials

scope = ['https://spreadsheets.google.com/feeds',
     'https://www.googleapis.com/auth/drive']
credentials = ServiceAccountCredentials.from_json_keyfile_name('インストールしたjsonファイル名.json', scope)
gc = gspread.authorize(credentials)
SPREADSHEET_KEY = 'スプレッドシートのID'
worksheet = gc.open_by_key(SPREADSHEET_KEY).sheet1

6行目にはダウンロードしたjsonのファイル名を記載してください。

8行目にはスプレッドシートのIDを記載してください。

スプレッドシードのIDはURL内に記載されています。『https://docs.google.com/spreadsheets/d/スプレッドシートID/~~~』英数字の羅列なのですぐに分かると思います。

次にダウンロードしたjsonファイルを開いて[client_email]という項目のメールアドレスをコピーします。スプレッドシートの[共有]>[ユーザーやグループを追加]でメールアドレスをペーストして[完了]をクリックします。

これでpythonファイルとスプレッドシートの紐づけが完了しました。

スプレッドシート操作する

それではpythonからスプレッドシートの英文を取得していきます。

スプレッドシートの操作は先程のソースコード末尾の「worksheet」を使います。これに対して様々な関数を使ってデータの取得をしたり、書き込みをしたり、編集をしたりします。

data = worksheet.cell(行, 列).value
worksheet.update_cell(行, 列, 入力値)

「cell(行,列).value」で指定のセルのデータを取得できます。また「update_cell(行,列,入力値)」で指定のセルにデータを書き込めます。

この2つさえ使えれば、今回のプログラムは容易に開発できそうですね。

DeepL APIを取得する

次に翻訳するためのDeepL APIを取得します。

DeepL APIの取得はGoogle Sheets APIよりも簡単にできます。

DeepLにアクセスして上部の[API]をクリックします。

2[無料で登録する]よりDeepLのアカウントを作成しログインします。

3右上の[メールアドレス]より[アカウント]>[アカウント]の下の方に記載されている認証キーをコピーします。

Deepl APIで翻訳する

DeepL公式サイトに記載されいているpython用のサンプルコードをコピーします。こちらがそのサンプルコードです。

import requests 
result = requests.get( 
  "https://api.deepl.com/v2/translate",
  params={ 
    "auth_key": auth_key,
    "target_lang": target_language,
    "text": text,
  },
) 
translated_text = result.json()["translations"][0]["text"]

このままだと使えないので、いくつか改良を加えます。

2行目の「request.get」を「request.post」に変更します。

5行目に先程コピーしたDeepL APIの認証キーをペーストします。

6行目に「”source_lang”:”EN”,」を追加します。

改良後のソースコードがこちらです。

import requests 
result = requests.post( 
  "https://api-free.deepl.com/v2/translate",
  params={ 
    "auth_key":"auth_key",
    "source_lang":"EN"
    "target_lang":"JA",
    "text": text,
  },
) 
translated_text = result.json()["translations"][0]["text"]

完成したソースコード

最後にこれらのソースコードを組み合わせます。

import gspread
import json
from oauth2client.service_account import ServiceAccountCredentials
import requests

#Google Sheets APIの設定
scope = ['https://spreadsheets.google.com/feeds','https://www.googleapis.com/auth/drive']
credentials = ServiceAccountCredentials.from_json_keyfile_name('ファイル名.json', scope)
gc = gspread.authorize(credentials)
worksheet = gc.open_by_key(スプレッドシートID).sheet1

#英文の取得および日本語訳
while True:
 n = 1
 try:
   #スプレッドシートより英文を取得
  en = worksheet.cell(n, 1).value
   #DeepL APIを使って日本語訳する
  result = requests.post( 
    "https://api-free.deepl.com/v2/translate",
    params={ 
      "auth_key":"認証キー",
      "source_lang":"EN"
      "target_lang":"JA",
      "text": text,
    },
  ) 
  ja = result.json()["translations"][0]["text"]
   #日本語訳した文をスプレッドシートに書き込む
  worksheet.update_cell(n, 2, ja)
  n += 1
  
  #英文がなくなったら終了する
 except:
  break

プログラム本体の流れとしてはこのような感じです。

・n=1(代入)

–<1列目のn行目にデータが存在する限り繰り返す>–

・1列目のn行目のデータを取得(変数en)

・取得したデータを日本語訳(変数ja)

・日本語訳を2列目のn行目に書き込む

・n+1

–<1列目のn行目にデータが存在しない時>–

・処理が終了する

最後に

今回はエンジニアチャンネルさんの動画に登場するプログラムを実際に作ってみました!

プログラミングに興味がある方は是非1度エンジニアチャンネルさんのYouTubeをご覧ください。

人気であればこのような記事をまた書こうかなと思います。

最後までご覧いただきありがとうございました。それでは、また👍

【なおくんのSNS】

【note】

noteでもスマホやパソコンなどの記事を書いていますので、ぜひご覧ください。あとフォローもお願いします。

【案件の依頼やお問い合わせはこちら】

    プログラミング
    naokunをフォローする
    なおコンサルティング
    タイトルとURLをコピーしました