#■はじめに
Google App Engine(GAE) + Python3.7 + LINE Message API + Google Cloud Natural Language API を使用して、LINE BOTを作成しましたので、その手順を投稿します。
各手順は画面キャプチャーとコメントを記載してますので、手順に沿って作業すれば、どなたもLINE BOTが作成できると思います。
(あわせて、作ったアプリの後片付けも記載してます)
※本投稿は2018年11月時点のものになります
(Cloudサービスは日々かわりますので、いつ時点の情報と書いていておきます)
#■本投稿の背景
Google Cloud Platform で、何かできることはないかを探してたら、
Google Cloud Natural Language というものがありました。
・https://cloud.google.com/natural-language/
感情分析は、テキスト内で表現されている全体的な態度(ポジティブかネガティブか)を特定します。
score: -1.0(ネガティブ)~1.0(ポジティブ)のスコアで感情が表されます。これは、テキストの全体的な感情の傾向に相当します。
・https://cloud.google.com/natural-language/docs/basics
簡単な動作確認は https://cloud.google.com/natural-language/ で確認ができます。
これを使用すれば、
嫁からのLINEが来て、このメッセージ怒っているのか?と判断できると思い、
Google App Engine(GAE) + Python3.7 + LINE Message API + Google Cloud Natural Language API を使用してLINE BOTを作成しました。
#■やることのイメージ
嫁からのLINEが来た場合、メッセージをLINE BOTに転送(or メッセージを貼り付け)、感情分析をしたい。
⇒相手のLINEメッセージを感情分析して-100点~100点の範囲で結果を返します
ガンツ先生 が得点とアドバイスを返します。
※ガンツ先生はロボコンにでてくるキャラクターで、ロボコンの行動に点数をつける先生です
点数は 0点~100点をつけていたと思います。
Cloud Natural Language APIから返る値は、-1.0 ~ 1.0 なので、
x100 にして、あたかもガンツ先生が採点しているかのようにします。
(100点が最高にポジティブ(機嫌がよい)、-100点が最高にネガティブ(機嫌が悪い))
LINE BOTを動かす環境は、Google Cloud Platform の Google App Engine(GAE) を使用します。
Google App Engine(GAE) は、
Google Cloud Platform 上でアプリケーションを作り、実行できるようにする PaaS
( Platform as a Service )です。
⇒環境(たとえばPythonのインストールが実施済み)が設定されている状態で使用できます
また、Google App Engine、 Google Cloud Natural Language は制限を越えなければ無料です。
※2018年7月から Python3.7が Google App Engine のスタンダード環境で実行できるようになりました。
#■やること
以下のステップを実施します。
** 1. Google Cloud Platform 申し込み**
** 2. Google Cloud Platform プロジェクトの作成**
** 3. Google Cloud Natural Language APIを有効にする**
** 4. LINE Message API 申請**
** 5. Python+設定ファイル作成**
** 6. Google App Engine(GAE) にデプロイ**
** 7. LINE 設定**
##1. Google Cloud Platform 申し込み
Google Cloud Platform の申し込みはこちら参照させて頂きました
Google Cloud Platform(GCP) 無料トライアルの開始方法
##2. Google Cloud Platform プロジェクトの作成
https://console.cloud.google.com/?hl=ja
にアクセスして、新規プロジェクトを作成します。
##3. Google Cloud Natural Language APIを有効にする
作成したプロジェクトでCloud Natural Language APIが使えるように設定します。
ユニットって何?については以下のURLに説明されてます。
https://cloud.google.com/natural-language/pricing
ドキュメントの文字数が 1,000 文字を超えている場合、1,000 文字ごとに 1 件のテキスト レコードとしてカウントされます。たとえば、Natural Language API に送信する 3 件のリクエストそれぞれに、800 文字、1,500 文字、600 文字が含まれている場合、1 番目のリクエスト(800)が 1 件、2 番目のリクエスト(1,500)が 2 件、3 番目のリクエスト(600)が 1 件、合計 4 件のテキスト レコードとして課金されます。
⇒1ユニットはAPIコール回数で、1000文字超えるとコール回数が加算されるということかと
#4. LINE Message API 申請
LINE developers で API申請を行います。
※幾つも他記事でありますが、画面が若干変わっていたので書きます。※本投稿は2019年11月時点のものになります
・https://developers.line.biz/ja/
##4-1.ログイン
LINE developersにログインします。LINEアプリでメールアドレス、パスワードを設定していない場合は
登録します。
##4-2.開発者登録
LINEアプリで設定している情報が表示されるので、変更することなく登録します
##4-3.新規プロバイダ登録
APIを使用するにあたり必要な設定。プロバイダ名はなんでもかまいません
[作成する]ボタンをクリックすると、プロバイダが作成されます
##4-4.新規チャネル登録
LINEBOTの設定をします。
##4-5.アクセストークンを取得
PythonスクリプトにLINE Message API のアクセストークンが必要になりますので再発行します。
画面を下におくり、「アクセストークン(ロングターム) 」を[再発行]ボタンをクリックして取得します。
※Pythonスクリプトで設定します
##4-6.Channel Secretを取得
チャネルの基本情報のChannel Secret があるのでこちらも控えておきます。
※Pythonスクリプトで設定します
#5. Python+設定ファイル作成
Google App Engine(GAE) で動かすLINEBOTの Pythonスクリプト、設定ファイルを作成します。
ローカル環境(自分のPC)にプロジェクトフォルダ(今回はGAELINEBOT)を作成して、以下のフォルダ、ファイルを作成します
ファイル名 | 説明 |
---|---|
lib | Google App Engine が使用するライブラリを格納するフォルダ。ローカル環境ではフォルダのみ作成 |
app.yaml | Google App Engine の設定ファイル(Google App Engineがpython3.7で起動とか、起動インスタンス数などを設定) |
appengine_config.py | サードパーティ製ライブラリを使用する際、lib フォルダに格納する設定 |
main.py | LINEBotを動かすスクリプト |
requirements.txt | Google App Engineでインストールが必要なライブラリを記載 |
##5-1 lib
新規フォルダ作成のみ
##5-2 app.yaml
Python3.7を使用、Google App Engine(GAE) の起動設定を実施
runtime: python37
handlers:
- url: /.*
secure: always
script: auto
automatic_scaling:
min_idle_instances: automatic
max_idle_instances: 1
min_pending_latency: 3000ms
max_pending_latency: automatic
app.yaml は以下の記事を参考にしました。
App Engine Scaling Config
##5-3 appengine_config.py
LINEなどのサードパーティ製ライブラリを使用する際、Google App Engine(GAE) 側 lib フォルダに格納する設定
import vendor
vendor.add('lib')
##5-4 main.py
Pythonスクリプト
# coding: utf-8
import json
import os
import sys
#import logging
#logging.getLogger().setLevel( logging.DEBUG )
from google.cloud import language
from google.cloud.language import enums
from google.cloud.language import types
import flask
from linebot import (
LineBotApi, WebhookHandler
)
from linebot.exceptions import (
InvalidSignatureError
)
from linebot.models import (
MessageEvent, TextMessage, TextSendMessage,ImageSendMessage
)
app = flask.Flask(__name__)
#CHANNEL_ACCESS_TOKEN
line_bot_api = LineBotApi('取得したLINE Message API の <アクセストークン(ロングターム)を設定>')
#CANNEL_SECRET
handler = WebhookHandler('<取得したLINE Message API のCANNEL_SECRET を設定>')
# Instantiates a client
client = language.LanguageServiceClient()
#返信メッセージを設定
msglst ={100:"全然問題ない!!!",
90:"全然問題ない!!",
80:"全然問題ない!",
70:"問題ない!!!",
60:"問題ない!!",
50:"問題ない!",
40:"大丈夫",
30:"たぶん大丈夫",
20:"まだ大丈夫",
10:"もう少し大丈夫",
0:"ギリギリ大丈夫",
-10:"様子見しますか",
-20:"もう少し様子見しますか",
-30:"あと少し様子見しますか",
-40:"少し機嫌が悪いかも。落ち着こう",
-50:"機嫌が悪いかも。何かしたか思い出せ",
-60:"ちょっとやばいかも。。",
-70:"少しフォロー必要かも",
-80:"フォロー必要",
-90:"早くフォロー!",
-100:"まずは謝る"
}
@app.route("/")
def hello():
return "hello this page is nothing."
@app.route("/callback", methods=['POST'])
def callback():
# get X-Line-Signature header value
signature = flask.request.headers['X-Line-Signature']
# get request body as text
body = flask.request.get_data(as_text=True)
app.logger.info("Request body: " + body)
# handle webhook body
try:
handler.handle(body, signature)
except InvalidSignatureError:
flask.abort(400)
return 'OK'
@handler.add(MessageEvent, message = TextMessage)
def handle_message(event):
text = event.message.text
document = types.Document(
content=text,
type=enums.Document.Type.PLAIN_TEXT)
# Detects the sentiment of the text
sentiment = client.analyze_sentiment(document=document).document_sentiment
#score = round(sentiment.score, 1)
score = int(sentiment.score * 100)
ret = 'Sentiment: {}, {}'.format(sentiment.score,score)
textresponse = str(score) + "点\n" + msglst[round(score,-1)]
line_bot_api.reply_message(
event.reply_token,
TextSendMessage(text=textresponse))
if __name__ == "__main__":
app.run()
##5-5 requirements.txt
Google App Engine(GAE)でインストールが必要なライブラリを記載
※今回はline-bot-sdk、flask、google-cloud-language を使用するので、ライブラリを指定します
line-bot-sdk
flask
google-cloud-language
#6. Google App Engine(GAE) にデプロイ
Google App Engine にデプロイします。
※ローカル環境(自分のPC)でプログラム作成して、Google App Engine にデプロイする場合、Google Cloud SDKをインストールする必要があります。
※私の環境は Windows7(64bit) + Anaconda5.2-Python 3.6 version の環境での手順になります
この章では、Google App Engine のアプリケーション作成、Google Cloud SDK のインストール と Google App Engine(GAE) へのデプロイ方法を記載します。
##6-1 Google App Engine アプリケーション作成
https://console.cloud.google.com/ にアクセスして[App Engine]をクリックします
環境を選択
※今回は言語はPython 、環境は基本無料の[標準]を選択
##6-2 Google Cloud SDKのインストール
ダウンロードボタンをクリック
インストール.exe をダウンロード
GoogleCloudSDKInstaller.exe がダウンロードされます
GoogleCloudSDKInstaller.exe を実行します。
[Next]をクリック
インストールは結構かかったので辛抱してまつ。終ったら[Next]をクリック
すると、Dos窓が起動してくるので、[Y] + [Enter]
デスクトップに Google Cloud SDK Shell のショートカットが作成されてます
※このショートカットで SDKの設定・デプロイをします
Google Cloud SDKで Google App Engineにある、どのプロジェクトを使用するかを設定
##6-3 Google App Engine(GAE)へのデプロイ
デプロイは自分のPC(ローカル環境)から Google App Engine(GAE)へ Google Cloud SDKを使用してデプロイします。
Google Cloud SDK Shell のショートカットをクリックします。
gcloud init と入力して、new setting [1] を選択
使用するアカウントを選択(Google Cloud SDKで設定したアカウントが表示されているので、そのアカウントを選択)
Google Cloud SDK のパスを スクリプト格納先へ移動する
今回は、Pythonなどのファイル群を、「D:\Python\GAELINEBOT」に格納してますので、そのサンプルで説明します。
gcloud app deploy を入力して、Google Cloud SDK でデプロイ。
デプロイ先のURLを取得します。
※このURLを LINE Message API に設定します
#7. LINE Message API 設定
Google App Engine(GAE) のデプロイ先URLを LINE Message APIに設定します
画面を下におくり、「Webhook URL」を設定します。
[編集]ボタンをクリックして、
Google App Engine(GAE) のデプロイ先URL/callback と設定します
自動応答メッセージを「利用しない」、友達追加あいさつを「利用しない」と設定します
LINEアプリQRコードを携帯に読込ませます
◆◆◆1月9日に、停止しました。◆◆◆
#LINE BOT動作確認
嫁からのLINEメッセージをガンツ先生に転送 or メッセージのコピペしてみる
点数とコメントが返信される
できた!
#不要なGoogle App Engine(GAE)アプリケーションの無効化/プロジェクトの削除
使わなくなったGAEアプリケーション/プロジェクトは止めておきましょう。
※意図せず課金されるのを防ぐためです
##Google App Engine(GAE) アプリケーションの無効化
https://console.cloud.google.com/ にアクセス
##Google Cloud Platformプロジェクトの削除
削除するプロジェクトを選択します。
(現在、削除するプロジェクトになっている場合、プロジェクトの選択はしなくてOKです)
削除するプロジェクトのホーム画面を表示させる
[シャットダウン]をクリック
プロジェクトIDを入力してシャットダウン
シャットダウンして1ヶ月後に完全に削除されるメッセージを確認して[OK]ボタンをクリック
削除されたプロジェクトが一覧から消えていることを確認
プロジェクトを削除するのが無難かと思います。
#最後に
オチとして嫁からのLINEを振り返って確認すると、
「敬語のLINEメッセージは100% 怒っている」 事に気がついたので、LINE BOT作成しなくてもよかったかもしれません。。
Google App Engine(GAE)、Google Cloud Natural Languageは無料枠で使用しているので、
しばらくLINEBOTは起動しておきます。
※事情により停止する事がありますのでご了承ください