2021年7月22日 星期四

機器人主動推送通知

學習目標:
  • 在 Flask 上,寫一個網頁,防止 Heroku 主機休眠!
  • 寫一個定時推送通知的 Line Bot 機器人程式!

寫個簡易的 Flask 小網頁
  1. 修改 app/router.py 的內容
    (前方省略....)
    from flask import render_template
    
    # 設定預設網頁
    @app.route("/")
    def home():
        return render_template("home.html")
    (後方省略....)
    
  2. 在專案目錄 LineBot 下,建立 app/templates/home.html 的 HTML 檔案:
    <!DOCTYPE html>
    <html lang="en">
    <head>
    <title>MyLineBot</title>
    </head>
    <body>
    <h1>Hello, World</h1>
    </body>
    </html>
  3. 將專案推向 Heroku 主機....
  4. 打開瀏覽器,輸入http://你的專案.herokuapp.com/

定時推送通知的機器人程式
  1. 安裝 APScheduler
    C:\> pip install APScheduler
    
  2. 在專案目錄中,寫一個 timer.py 的時鐘程式
    from apscheduler.schedulers.blocking import BlockingScheduler
    import urllib.request
    
    scheduleEvent = BlockingScheduler()
    
    @scheduleEvent.scheduled_job('cron',day_of_week='mon-fri',minute='*/20')
    def scheduled_job():
        website = "https://mylinebothellotux.herokuapp.com/"
        connection = urllib.request.urlopen(website)
    
        for i, value in connection.getheaders():
            print(i,value)
    
    scheduleEvent.start()
    
  3. 修改 Procfile 檔案內容
    web: gunicorn main:app --preload
    clock: python timer.py
    
  4. 修改 requirements.txt 檔案內容
    Flask>=1.1.1
    gunicorn>=20.0.4
    line-bot-sdk>=1.15.0
    APScheduler>=3.6.1
    
  5. 上傳專案到 heroku
  6. 修改 Heroku 的設定值
  7. 建立主動推送通知的方式:
    line_bot_api.push_message(to, TextSendMessage(text='Morning Sir'))
    
  8. 修改成需要的樣子:linebotmodules.py
     (前方省略....)
     except:
              #hello_text = echo(event.message.text)
              line_bot_api.push_message(
                '你的 User ID',
                TextSendMessage(text='沒找到')
              )
    
  9. 推送上 Heroku !
  10. 在手機 line 上,輸入任何一個句子!