PythonでLINEの通訳BOTを作成する方法についてです。LINEの通訳BOTは既に存在していますが、自作することで色々な応用BOTが作れるようになります。あらゆる言語の通訳BOTもできるようになるでしょう。ぜひ自作にチャレンジすることをお勧めします。
作成する通訳BOTについて
今回は、日本語と英語の文を見極めて、日本語のメッセージなら英語に、英語のメッセージなら日本語に翻訳する通訳BOTを作成します。
サーバーやAPIを使用するための事前登録
PythonでLINEのBOTを作成するには、以下のように事前登録が必要になります。
①LINE Developerの登録
チャンネルアクセストークンとシークレットキーを入手し、Pythonプログラムからメッセージを送るためのAPIを使用できるようにします。
②Herokuの登録
サーバーはHerokuを使用します。Herokuサーバー上でFlaskのWebアプリケーション(Pythonプログラム)を動作させ、LINEからのメッセージが来た時に翻訳して返答します。
これらの登録方法の詳細については、以下の記事を参照して行ってください。
-
-
Pythonで作る竈門炭治郎のLINE BOT
こんな方におすすめ PythonでLINE BOTを作りたい LINEでメッセージに応じた自動応答をやってみたい LINE BOTの作り方についてです。まずはコピーして作成してみて、動いたら自分なりに ...
③Google Cloud Platformの登録
言語の翻訳には、Google Cloud Platformの Translate APIを使用します。以下のページで、Google text to speechのAPIの使い方を説明していますので、同様に、Translateも登録してみてください。従量課金制ですが、500,000文字までは、無料となってますので、しばらくは充分だと思います。
-
-
Google text to speech をPythonで実行!
こんな方におすすめ Google text to speechについて知りたい Google text to speechを使いたい Google text to speech をPythonで動かし ...
プログラムの内容(main.py)
Pythonのプログラムのソースコードの内容です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# インポートするライブラリ from flask import Flask, request, abort from linebot import ( LineBotApi, WebhookHandler ) from linebot.exceptions import ( InvalidSignatureError ) from linebot.models import ( FollowEvent, MessageEvent, TextMessage, TextSendMessage, ImageMessage, ImageSendMessage, TemplateSendMessage, ButtonsTemplate, PostbackTemplateAction, MessageTemplateAction, URITemplateAction ) import os #日本語と英語を見分けるために使用する正規表現のモジュール import re #GoogleのTranslate モジュール from google.cloud import translate_v2 as translate translate_client = translate.Client() # 軽量なウェブアプリケーションフレームワーク:Flask app = Flask(__name__) #環境変数からLINE Access Tokenを設定 LINE_CHANNEL_ACCESS_TOKEN = "xxxxxxxxxx" #環境変数からLINE Channel Secretを設定 LINE_CHANNEL_SECRET = "xxxxxxx" line_bot_api = LineBotApi(LINE_CHANNEL_ACCESS_TOKEN) handler = WebhookHandler(LINE_CHANNEL_SECRET) @app.route("/callback", methods=['POST']) def callback(): # get X-Line-Signature header value signature = request.headers['X-Line-Signature'] # get request body as text body = request.get_data(as_text=True) app.logger.info("Request body: " + body) # handle webhook body try: handler.handle(body, signature) except InvalidSignatureError: abort(400) return 'OK' # MessageEvent @handler.add(MessageEvent, message=TextMessage) def handle_message(event): #isalumで判定できるように、記号や空欄を除く。 str_m=event.message.text str_m = re.sub(r'[!-/:-@[-`{-~]', "",str_m) str_m = re.sub(' ', "",str_m) #isalnumは英数字ならTrueとなる。ここで日本語か英語を見分ける if str_m.isalnum(): message_orig = translate_client.translate(event.message.text, target_language='ja') transmessage = message_orig['translatedText'] # print(trans_en) line_bot_api.reply_message( event.reply_token, TextSendMessage(text=transmessage) ) else: message_orig = translate_client.translate(event.message.text, target_language='en') transmessage=message_orig['translatedText'] #print(trans_en) line_bot_api.reply_message( event.reply_token, TextSendMessage(text=transmessage) ) if __name__ == "__main__": port = int(os.getenv("PORT",5000)) app.run(host="0.0.0.0", port=port) |
設定ファイルの作り方
以下、3つの設定ファイルの作成が必要になります。これらは、main.pyと同じフォルダに置く必要があります。
- runtime.txt →Pythonのバージョンを記載を記載する
1 |
python-3.6.10 |
- requirements.txt →インストールするライブラリの記載する
1 2 3 |
Flask==0.12.2 line-bot-sdk==1.17.0 google-cloud-translate==2.0.1 |
- Procfile →プログラムの実行方法を定義する。(.txtなし)
1 |
web: python main.py |
- xxxxxxxx.json →Google Cloud PlatformのTranslate APIを使用するためのjsonファイルを同一フォルダにおきます。
デプロイする
以下のコマンドをターミナルから順に実行します。
1 2 3 4 5 6 7 8 9 |
$ git init $ heroku git:remote -a (自分で決めたアプリ名) $ git add . $ git commit -m "inital commit" $ git push heroku master |
環境変数を設定します。LINEのMessaging APIのチャンネルアクセストークンとチャンネルシークレットキーを入れます。また、Google Cloud PlartformのTranlate APIを使用するための秘密キーも入力します。
1 2 3 |
$ heroku config:set LINE_CHANNEL_ACCESS_TOKEN=XXXXXXXXXXXXXXXXXXXXXXXXX $ heroku config:set LINE_CHANNEL_SECRET=XXXXXXXXXXXXXXXXXXXXX $ heroku config:set GOOGLE_APPLICATION_CREDENTIALS=xxxxxx.json |
以上でデプロイが完了します。
動作しないときの対処法
設定が完了したのに正しく動作しないようなときは、ターミナルから以下のコマンドを実行しエラーが出ていないか確認してください。エラーが出た場合は、そのエラーの指示に従って、プログラムを修正してください。
1 |
$ heroku logs --tail |
まとめ
LINEで通訳BOTが動作できましたでしょうか。この記事では、日本語⇆英語の通訳を実現して見せました。プログラムでは、event.message.textで受け取ったメッセージに対して処理をしていることが理解できたと思います。受け取ったメッセージに対して、異なる処理を行うプログラムを作成すれば、様々なBOTが作れます。ぜひ、自分なりのBOT作りに挑戦してみてください。