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名)

まとめ

基本的な動作ができたので、プッシュする時間や内容を変更したり、リプライについても分岐させたりが可能です。
ここから引き続き、諸々いじってみて遊んでみたいですね。

おすすめ

コメントを残す

メールアドレスが公開されることはありません。