LINEのチャットボットで定期実行をする(Heroku Scheduler)【python】

目次

環境

MacBook Air (11-inch, Early 2015) バージョン11.6(20G165)

Python 3.8.8 64-bit

Heroku

LINE API

経緯

LINEのチャットボットを使っているのだが、「定期実行」ができれば、「幹事などやる時便利かも」と思い調べてみら、「Heroku scheduler」というのがあるらしい。

やったこと


Herokuにスケジュールを追加。

「ターミナル」で

heroku addons:add scheduler:standard

と入力。「Install add-ons」の下に「Heroku Scheduler Standard」と出るはず。

。。。

出ない(T ^ T)

「There are no add-ons for this app」って言ってる。

Herokuへクレジットカードの情報を追加

どうやら、クレジットカードの情報を登録しないといけないらしい。

「Heroku」の画面で右上のアイコンをクリック

「Account settings」をクリック

「Manage Account」のちょい右下にある「Billing」をクリック

「Billing Information」とあるのでそこにクレジットカードを登録する。

アドオンをインストール

ターミナルで

heroku addons:create scheduler:standard --app アプリ名

を入力。

「Heroku Scheduler Standard」と出た。

やったーーー。

scheduler.pyを作成

次に定期実行するファイルを作る。

LINEチャットボットを走らせているpyファイル(私の場合は”app.py”)と同じ階層に「scheduler.py」というファイル名で作ります。ファイル名はなんでもいいはずです。

from flask import Flask, request, abort
import os

from linebot import (
    LineBotApi, WebhookHandler
)
from linebot.exceptions import (
    InvalidSignatureError
)
from linebot.models import (
    MessageEvent, TextMessage, TextSendMessage,
)

app = Flask(__name__)

LINE_CHANNEL_ACCESS_TOKEN = os.environ["LINE_CHANNEL_ACCESS_TOKEN"]
LINE_CHANNEL_SECRET = os.environ["LINE_CHANNEL_SECRET"]
USER_ID = os.environ["USER_ID"]
line_bot_api = LineBotApi(LINE_CHANNEL_ACCESS_TOKEN)

def main():
    pushText = TextSendMessage(text="明日、新宿午後7時からです。よろしくお願いします。")
    line_bot_api.push_message(USER_ID, messages=pushText)

if __name__ == "__main__":
    main()

太赤字のところに自分のLINE情報を入力する。

デプロイする

ターミナル起動

「cd」 でapp.pyとscheduler.pyの場所(path)に移動

「ls」 でpyファイルがちゃんとあるか確認

「git init」 と入力。初期化する

「heroku git:remote -a Herokuのアプリ名」と入力」。”Herokuのアプリ名”は自分で作ったアプリの名前です。

「git remote -v」と入力。

「git add .」と入力。

「git commit -m’適当な名前’」と入力。’適当な名前’は本当になんでもいいです。私はアプリ名と今日の日付を入力してます。

「git pusu heroku mastar」と入力。しばらく待ちます。

・・

・・・

・・・・

remote: Verifying deploy… done.

とか表示されてるはずです。

再度、Herokuのページ画面に戻り、「Heroku Scheduler Standard」を設定する

Heroku Scheduler Standardをクリック。

「Create job」をクリック

「Job Editor」が出てくる

「Schedule」を選ぶ。私は”Every 10 minutes”と選びました。

「Run Command」の「S」のバーに「python sceduler.py」と作ったpyファイル名を入力。

「Save job」をクリック。

これでOKなはず。

10分待ちます。

・・

・・・

LINEに何の反応もありません(T ^ T)

できなーい(T ^ T)遅い時間だからもう寝ます。

次の日

scheduler.pyは本当に動いているのか確認

scheduler.pyで書いたコードはネットからコピペしただけなので

jupyter labで動きを確認。

動かない( ̄◇ ̄;)

なんで?

LINEのユーザーID、チャンネルトークン、秘密鍵の番号を再確認。

合ってるよ〜。

なんで動かないの?(T ^ T)

pythonコード内を確認

コード内にos.environと見慣れない文字があるが、これって何?

グーグルに聞いてみた。

環境変数らしいがよくわからない。

os.environを使わず、そのままIDやTOKENなどを入力。

from flask import Flask, request, abort
import os

from linebot import (
    LineBotApi, WebhookHandler
)
from linebot.exceptions import (
    InvalidSignatureError
)
from linebot.models import (
    MessageEvent, TextMessage, TextSendMessage,
)

app = Flask(__name__)

LINE_CHANNEL_ACCESS_TOKEN = "LINE_CHANNEL_ACCESS_TOKEN"
LINE_CHANNEL_SECRET = "LINE_CHANNEL_SECRET"
USER_ID = "USER_ID"
line_bot_api = LineBotApi(LINE_CHANNEL_ACCESS_TOKEN)

def main():
    pushText = TextSendMessage(text="明日、新宿午後7時からです。よろしくお願いします。")
    line_bot_api.push_message(USER_ID, messages=pushText)

if __name__ == "__main__":
    main()

走らせてみる。

・・・

動いた!!!

やったーー。

再度デプロイする

再度、ターミナルの起動して、デプロイしてみた。

一応、Heroku Scheduler Standard」の設定も作り直した。

10分待つ。

・・

メッセージきた!!!

やったー終わり!

後日談

こんな感じで、無事にheroku schedulerを使うことができましたが、heroku schedulerは”毎分”、”毎時間”、”毎日”しか時間設定できないことに気づく。(やり方はあるかもしれないけど、今の私にはわかりません)

感想

今回一番、手こずったのはos.environです。

os.environがなんなのか、なんの意味があるのか、使い方はこれで合ってるのか、ってか本当にいるのかとかを調べるのに時間がかかりました。

結局、os.environを使わず、そのまま、LINEの情報を入力したら、動いたのでよかったのですが、

一体、os.environはどんな意味だったのでしょう?

勉強します。

最後までブログみていただきありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次