LineBotをPython(Flask)+herokuで無料で簡単に作る。その2
こんにちは!こんばんは、みんろです!
LineBotをPython(Flask)+herokuで無料で簡単に作る。その2です。
前回
(やりたいこと)
僕だけではないと思いますが、毎日同じことを確認するって意外に手間に感じることってないでしょうか??
例えば天気予報であったり、株価であったり、アラームであったり、
必要な情報を定刻にLINEで通知してくれたらかなり助かりますよね。
今回はそんな通知機能について紹介していきたいと思います!

HerokuGitの設定について
前回Heroku CLIのインストールまでは終わってますので、コマンド例にあるように、Gitの設定を行なっていきますよ。

コマンドラインでカタカタかとやっていきます。

ここまでくれば、ソースコードを書いていきます。
サンプルコードについて
必要なファイルは下記の5つです。

早速メインの処理コードから!
今回はプッシュメッセージと単純なリプライメッセージを組み込んでいます。
# -*- coding: utf-8 -*- import os import sys, config import traceback from flask import Flask, request, abort from linebot import ( LineBotApi, WebhookHandler ) from linebot.exceptions import ( InvalidSignatureError, LineBotApiError ) from linebot.models import ( MessageEvent, TextMessage, TextSendMessage ) app = Flask(__name__) app.config['JSON_AS_ASCII'] = False #LINE Access Token YOUR_CHANNEL_ACCESS_TOKEN = config.CHANNEL_ACCESS_TOKEN #LINE Channel Secret YOUR_CHANNEL_SECRET = config.CHANNEL_SECRET #USER_ID USER_ID = config.LINE_USER line_bot_api = LineBotApi(YOUR_CHANNEL_ACCESS_TOKEN) handler = WebhookHandler(YOUR_CHANNEL_SECRET) @app.route("/", methods=["GET"]) def test(): return "test OK" @app.route("/push_message", methods=["GET"]) def push_message(): try: line_bot_api.push_message(USER_ID, TextSendMessage(text='Hello World!')) except LineBotApiError as e: print(traceback.format_exc()) return "error" return "OK" @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" @handler.add(MessageEvent, message=TextMessage) def handle_message(event): print(event) line_bot_api.reply_message( event.reply_token, TextSendMessage(text=event.message.text)) if __name__ == "__main__": port = int(os.environ.get("PORT", 5000)) app.run(host='0.0.0.0', port=port)
次に必要なのは設定ファイル。LineDevelopersのチャネル基本設定画面のそれぞれの項目の値を設定しておきます。
# -*- coding: utf-8 -*- CHANNEL_ACCESS_TOKEN = "チャネル基本設定(アクセストークン)" CHANNEL_SECRET = "チャネル基本設定(Channel Secret)" LINE_USER = "チャネル基本設定(Your user ID)"
herokuに必要なPythonライブラリを設定するファイルを作ります。
Flask gunicorn line-bot-sdk
Pythonのバージョンを指定します。
python-3.7.3
最後に、herokuにデプロイした時に実行する設定として下記のファイルを作ります。
web: gunicorn main:app --log-file -
HerokuへのデプロイとLineの設定
コマンドでプッシュしていきますが、これも超簡単。
必要なディレクトリに移動してプッシュすればOK。

Heroku画面から「Open app」をクリックしてアプリを開き、test OKが表示されれば問題なし。

▪️プッシュメッセージについて
https://(app名).herokuapp.com/push_message
にてアクセスすると「OK」のメッセージと共に、LINEにメッセージが届いています。

▪️リプライメッセージについて
LineDevelopersの画面から、下記の2つの設定変更する。
Webhook送信・・・利用する
WebhookURL・・・HerokuのURLに「/callback」を追加して設定します。

その後、LINEからメッセージを送ってみると、そのままメッセージが返ってきます。

ログの見方
Herokuにログインしてから、下記のコマンド打てばOK。
heroku logs --tail --app (app名)
まとめ
基本的な動作ができたので、プッシュする時間や内容を変更したり、リプライについても分岐させたりが可能です。
ここから引き続き、諸々いじってみて遊んでみたいですね。