最新消息

[公告2014/05/30] 如有需要將部落格中,任何一篇文章的程式碼使用在商業用途,請與我聯繫。

[公告2015/04/26] Line版的 iInfo程式與投資應用 群組已上線想加入的朋友們,請先查看 "入群須知" 再與我聯繫 Line : aminwhite5168,加入請告知身分與回答 "入群須知" 的問題。

[公告2018/04/22] 台北 Python + Excel VBA 金融資訊爬蟲課程,課程如網頁內容 金融資訊爬蟲班:台北班 Python 金融資訊爬蟲、EXCEL VBA 金融資訊爬蟲

[公告2019/01/08] 請注意:我再次重申,部落格文章的程式碼,是要提供各位參考與學習,一旦網頁改版請自行修改,別要求東要求西要我主動修改,你們用我寫東西賺錢了、交差了,請問有分我一杯羹嗎?既然賺錢沒分我,請問有什麼理由要求我修改,如果沒能力改,就花錢來找我上課。

[公告2019/12/01] 若各位有 Excel VBA 案子開發需求,歡迎與我聯繫,可接案處理。

[公告2020/05/22] 頁面載入速度慢,起因為部分JS來源(alexgorbatchev.com)失效導致頁面載入變慢,目前已做調整,請多見諒。

2020年3月15日 星期日

Heroku + Flask + Python應用(3):快速建立Line Bot,至Heroku佈署

前一篇 Heroku + Flask + Python應用(2):VSCode建置Line Bot,上傳Heroku佈署 的操作看起來很複雜,因此換一種方式來進行Line Bot建置,環境一樣是在Heroku上執行。
步驟 1:本機端佈屬環境軟體。
  1. 請至 Heroku  https://id.heroku.com/login 註冊一個帳號。
  2. 下載安裝 Heroku CLI https://devcenter.heroku.com/articles/heroku-cli
  3. 下載安裝 Git https://git-scm.com/downloads,上傳檔案到 Heroku 使用。
  4. 下載安裝VSCode https://code.visualstudio.com/
步驟 2:開啟「命令提示字元」輸入以下指令,建立Code資料夾,用 conda 建立「iinfo7」虛擬環境。
cd /
mkdir Code
cd Code
conda create -n iinfo7 python=3.6.2

步驟 3:完成建立「linebot」虛擬環境後,進入「linebot」環境。
activate iinfo7

若要退出虛擬環境,輸入以下指令。
deactivate

activate root

步驟 4:在「命令提示字元」輸入「git init」,產生「.git」資料夾,讓Git開始對「Code」資料夾所有檔案進行版本控管。

步驟 5:安裝「flask」、「gunicorn」到「iinfo7」環境中,後面操作時會使用到。
pip install flask gunicorn

步驟 6:在「命令提示字元」輸入「pip list」查詢在虛擬環境「iinfo7」已安裝的套件與版本。

步驟 7:在「命令提示字元」輸入「code .」開啟 VSCode。

步驟 8:在VSCode 建立Python 檔案,並輸入以下程式碼,存成app.py。
import os

from flask import Flask, request, abort

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.get('LINE_CHANNEL_ACCESS_TOKEN')
LINE_CHANNEL_SECRET = os.environ.get('LINE_CHANNEL_SECRET')
line_bot_api = LineBotApi(LINE_CHANNEL_ACCESS_TOKEN)
handler = WebhookHandler(LINE_CHANNEL_SECRET)

@app.route("/", methods=['GET'])
def hello():
    return 'hello heroku'

@app.route("/callback", methods=['POST'])
def callback():
    signature = request.headers['X-Line-Signature']
    body = request.get_data(as_text=True)

    try:
        handler.handle(body, signature)
    except InvalidSignatureError:
        print("Invalid signature. Please check your channel access token/channel secret.")
        abort(400)

    return 'OK'

@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
    line_bot_api.reply_message(
        event.reply_token,
        TextSendMessage(text=event.message.text))

if __name__ == "__main__":
    app.run()

步驟 9:切換「iinfo7」虛擬環境,由於VSCode會自動偵測與載入虛擬環境,故可直接在VSCode進行切換虛擬環境操作。

步驟 10:開啟終端機畫面。

步驟 11:安裝line-bot-sdk v1.16.0,可使用以下兩種方法操作(任選一種即可)。
  1. 在「VSCode終端機」輸入指令安裝。
  2. 在「命令提示字元」輸入指令安裝。
pip install line-bot-sdk==1.16.0 

步驟 12:建立上傳至Heroku建置執行環境的文件。
  1. runtime.txt:指定Python版本。
  2. Procfile:在Heroku環境指定要執行的檔案。
  3. requirements.txt:將環境操作所需的套件與版本打包起來。
runtime.txt,輸入Heroku需要使用Python版本 python-3.6.2。

Procfile,輸入「web: gunicorn app:app –log-file -」,–log-file - 為打開顯示除錯訊息,若不想顯示除錯訊息可以使用「web: gunicorn app:app」。

requirements.txt,將虛擬環境「linebot」安裝的套件版本儲存起來,用來在 Heroku 雲端上安裝的套件佈署用,在「VSCode終端機」輸入。
pip freeze > requirements.txt

步驟 13:將新增文件加入到「 git 暫存區(Staging Area)」做檔案管理,可使用以下兩種方法操作(任選一種即可)。
  1. 在「VSCode終端機」輸入「git add .」,最後在「原始檔控制」頁籤,點擊「認可(Commit)」按鈕與加入「新增檔案」訊息,最後按下「Enter」。
  2. 在「命令提示字元」輸入「git add .」,最後再輸入「git commit -a -m "新增檔案"」。

步驟 14:到Heroku後台新增一個有效的app。



步驟 15:登入Heroku,可使用以下兩種方法操作(任選一種即可)。
  1. 在「VSCode終端機」輸入以下指令,再輸入登入「Heroku」帳密。
  2. 在「命令提示字元」輸入以下指令,再輸入登入「Heroku」帳密。
heroku login -i

步驟 16:切換在 Heroku 新建的app,可使用以下兩種方法操作(任選一種即可)。
  1. 在「VSCode終端機」輸入以下指令。
  2. 在「命令提示字元」輸入以下指令。
heroku git:remote -a [app名稱]

步驟 17:將虛擬環境「iinfo7」所有的檔案推上至 Heroku進行佈署,可使用以下兩種方法操作(任選一種即可)。
  1. 在「VSCode終端機」輸入以下指令。
  2. 在「命令提示字元」輸入以下指令。
git push heroku master


步驟 18:在 Line Developers 後台,設定「Webhook URL」與取得「Channel secret」、「Channel access token」。

步驟19: Line Developers 後台取得「Channel secret」、「Channel access token」,到 heroku 後台帳號的「Settings」頁籤的「Config Vars」進行「LINE_CHANNEL_ACCESS_TOKEN」、「LINE_CHANNEL_SECRET」設定。

步驟20:最後將Line Bot加入進行測試。

測試不成功的原因與注意事項:
  1. 測試「Webhook URL」,建議先將41~45行的程式碼移除,重新推code到Heroku上,再進行驗證,待「Webhook URL」驗證成功後,再還原程式碼,並且重新再一次推code至Heroku。
  2. 「Webhook URL」在測試成功之前,「Use webhook」都會是關閉狀態,若「Webhook URL」測試成功後,「Use webhook」開起才能順利。
  3. 「Webhook URL」在測試成功之前,每次填入的URL都不會被儲存起來,所以要先讓「Webhook URL」測試可以成功。

沒有留言:

張貼留言