GASとPythonで自動翻訳プログラムを作ってみた!
2021年3月6日
Google App ScriptでGoogle翻訳を使用したAPIを作成しPythonから実行して自動翻訳してみた!
どうも、テック備忘LOGのYuki(@tech_bibo_log)です!!
今回は初の試みでGoogle App Scriptを勉強してみたので備忘録を公開します!!
Google翻訳を使って文字を翻訳してくれるGASプログラムをAPI化し、
Pythonプラグラムから実行できるものをを作成してみました!!
▽▽▽ Twitter Botを作成した時のお話し ▽▽▽
今回はGASプログラムとPythonプログラムを公開、説明していきたいと思います。
想像していた以上に簡単に実装できてしまったので私は感動してしまいました。(笑)
Yuki
この記事で分かること
- GASで翻訳APIを作成する方法
- PythonからGASの翻訳APIを実行する方法
プログラムに慣れ親しんでいれば誰でも簡単に実装できますので、ぜひお試しあれ!!
もっと良いコードの書き方がありましたら、ご教授頂けると泣いて喜びます!
では、始めましょう!!
[ 目次 (開く) ]
Google App Scriptの開発方法
Google App Script(以下、GAS)はGoogleアカウントを持っている方であれば誰でも簡単に開発することが可能です。
01.スプレッドシートを開く
スプレッドシートのトップページを開き、新しいスプレッドシートを作成します。
02.スクリプトエディタを開いて、新しいプロジェクトを作成
作成したスプレッドシート画面の[ ツール ] - [ スクリプトエディタ ]を選択し、スクリプトエディタのトップページを開き、新しいスクリプトエディタを作成します。
プロジェクト名は「webapi_translate」とでもしておきます。
翻訳プログラムを実装
翻訳プログラムを作成し、API化するまでの手順は次の通りです。
GASプログラムの実装をしよう!!
翻訳プログラムをAPI化するまでの流れ
doPost
関数でPOSTリクエストを受ける準備をするtransrate
関数で翻訳するcreateaResponse
関数でJSON型に変換してから返す- プロジェクトをデプロイしてAPIのURLを取得する
まずはプログラムを貼り付けます。
初期表示時のmyFunction
関数は削除します。
function doPost(e) { var text = e.parameter.text; // 翻訳用テキスト var lang_from = e.parameter.lang_from; // 翻訳前言語 var lang_to = e.parameter.lang_to; // 翻訳後言語
result = transrate(text, lang_from, lang_to); return createaResponse(result); }
function transrate(text, lang_from, lang_to) { return LanguageApp.translate(text, lang_from, lang_to); }
function createaResponse(text) { var data = {result:text}; var payload = JSON.stringify(data) var output = ContentService.createTextOutput(); output.setMimeType(ContentService.MimeType.JSON); output.setContent(payload);
return output; }
説明の必要もないくらい簡潔ですが、一応説明します。
まずメイン関数となるdoPost
で、PythonからPOSTリクエストを受け取ります。
そしてtext
, lang_from
, lang_to
にそれぞれのパラメータを代入します。
function doPost(e) { var text = e.parameter.text; // 翻訳用テキスト var lang_from = e.parameter.lang_from; // 翻訳前言語 var lang_to = e.parameter.lang_to; // 翻訳後言語 ... }
次にtransrate
関数に用意した変数を引数としてセットし、あとはLanguageApp.translate
に任せます。
function doPost(e) { ... result = transrate(text, lang_from, lang_to); ... }
function transrate(text, lang_from, lang_to) { return LanguageApp.translate(text, lang_from, lang_to); }
最後にtranslate
関数にて翻訳した結果の文字列を、createaResponse
関数にてJSON型に変換しレスポンスとして返します。
後述しますが、Python側ではresponse['result']
のような感じで取得できます。
function doPost(e) { ... result = transrate(text, lang_from, lang_to); return createaResponse(result); }
function createaResponse(text) { var data = {result:text}; var payload = JSON.stringify(data) var output = ContentService.createTextOutput(); output.setMimeType(ContentService.MimeType.JSON); output.setContent(payload);
return output; }
翻訳プログラムをAPIとして公開
それでは作成したプログラムを次の手順で公開しましょう。
プロジェクトをデプロイしよう!!
画面右上の[ デプロイ ]ボタンをクリックし、[ 新しいデプロイ ]を選択します。
モーダル画面が開かれるので、赤枠の設定をします。
※自分の身の仕様とする場合、[ 次のユーザーとして実行: ]と[ アクセスできるユーザー ]は必ず、添付画像の通りに設定してください。
※特に[ アクセスできるユーザー ]は必ず「全員」を選択すること。
最後に「ウェブアプリ - URL」をコピーしてどこかに控えたら、[ デプロイ ]ボタンをクリックして完了です。
Python側のプログラムを実装
それではここまでに作成したAPIをPythonから叩いて翻訳するプログラムを実装していきましょう。
まずはプログラムを貼り付けます。
import requests
def do_translate(input): """translate関数 渡された文字列を翻訳して返す。 :param input: str 翻訳する文字列 :return text: str 翻訳後の文字列 """
api_url = "コピーしたURLをここに貼る" params = { 'text': input, 'lang_from': 'en', 'lang_to' : 'ja' } r_post = requests.post(api_url, data=params) print(r_post.json()["result"])
if __name__ == '__main__': # 「__」を半角に直してください。 do_translate('Hello everyone.')
以上です。
do_translate('翻訳したい文字')
を実行して、GASのデプロイ時にコピーしたURLに対してparams(翻訳する文字, 翻訳前言語, 翻訳後言語)
をセットしてPOSTリクエストを実行しています。
帰ってきたレスポンスをr_post
に入れて受け取り、JSONに変換してから['result']
で取り出します。
今回は「英語 ⇒ 日本語」の一方通行な翻訳プログラムの公開に留めていますが、
実際にはもう少しだけ使い易く、自由に「翻訳前言語 ⇔ 翻訳後言語」を切り替えられるようにして、ループ処理にて翻訳したい文字列を大量に翻訳。なんて使い方をしたりしています。
めっっちゃくちゃ簡単ですね!
あとはモジュール化していろんなプロジェクトで使いまわせるように改良したりと使い方はあなた次第です!!
Yuki
まとめ
これで「GASとPythonで自動翻訳プログラムを作ってみた!」の説明は以上です。
いかがでしたでしょうか?!
PythonやGASを使えばいろんな作業をいとも簡単に自動化してしまうことができます。
もちろん使いこなす技術と経験は必要ですが、どちらも簡単に扱えるように設計されている言語なので
みなさんもどんどん挑戦してみてください!!!
いっぱいコードを書いて書いて書きまくってエンジニアとしての腕を磨いてていきましょう!!
初心者の方は是非、一度上記のコードをコピペして動かしてみて、さらに一つ一つ理解しながらリタイピングしてみてくださいね!!
ご指摘や質問があれば(@tech_bibo_log)までお願い致します。
※私もPythonは勉強中なのでもっと良い書き方があればぜひ教えてください!よろしくお願いします。
Yuki
私にやってみて欲しいネタとかあれば、(@tech_bibo_log)までDMお待ちしております!!
それでは、ありがとうございました!