# 搭建Python Linebot Python程式設計 張元鴻 & 黃安聖 ---- ## 運行原理 ![](https://camo.githubusercontent.com/2013504727b75eb5d20e6fa121d8143690c2daa7/68747470733a2f2f692e696d6775722e636f6d2f38447a383177682e706e67) ---- ## 請先下載啟動範本 https://github.com/resnick1223/line-bot-python-simple-starter ---- ## 安裝Python Linebot Sdk 在終端機內下 ``` pip install line-bot-sdk ``` ---- ## 試著在本機內執行Flask App 用Visual Studio Code開啟資料夾後執行 ``` python app.py ``` ---- 如果出現找不到module flask的錯誤訊息,在終端機內下 ``` pip install flask ``` ---- 終止Flask App 程序請按下`Ctrl + C` ---- ## 檔案架構 |檔案|功能| |-|-| |app.py|Linebot主程式、Flask應用主程式| |Procfile|成功上架至Heroku後的執行檔案,Heroku將會執行這個檔案內所寫的指令 `python app.py`來執行這主程式| ---- ## 檔案架構 |檔案|功能| |-|-| |requirements.txt|套件需求檔,**所有使用到的外部套件需條列在此檔內**,應用程式上架至Heroku後需透過此檔案替執行環境安裝所需套件| |.gitignore|條列不想要被git紀錄的檔案| ---- ## 開啟Line開發者帳號 [![](https://i.imgur.com/vW54ym5.png)](https://developers.line.me/en/) ---- ## 開啟 Line Channel 1. 至[Line開發者](https://developers.line.me/en/)主頁面登入 2. 登入後選擇 Create New Provider 3. 至Provider裡點選 Create New Channel ---- ## 選擇 Messaging API Line Channel ![](https://i.imgur.com/ZLHegUL.png) ---- ### 取得Line Channel Secret ![](https://i.imgur.com/ybSuAfu.png) ---- ### 取得Line Channel Token ![](https://i.imgur.com/9STptXT.png) ---- ![](https://i.imgur.com/qaEHjev.png) ---- ### 更新Secret與Token至主程式 ```python= CHANNEL_ACCESS_TOKEN = '請將此字串置換成你的 CHANNEL_ACCESS_TOKEN' CHANNEL_SECRET = '請將此字串置換成你的 CHANNEL_SECRET' ``` ---- ## 訊息處理器 ---- ### 文字訊息處理器(TextMessage) ```python= @handler.add(MessageEvent, message=TextMessage) def handle_message(event): # 當有文字訊息傳入時 # event.message.text : 使用者輸入的訊息內容 print(event.message.text) ``` ---- ### 貼圖訊息處理器(StickerMessage) ```python= @handler.add(MessageEvent, message=StickerMessage) def handle_sticker_message(event): # 當有貼圖訊息傳入時 print(str(event)) ``` ---- ### 其餘訊息處理器 - ImageMessage 圖片訊息處理器 - VideoMessage 影片訊息處理器 - AudioMessage 聲音訊息處理器 - LocationMessage 地理位置訊息處理器 - FileMessage 檔案訊息處理器 ---- ### 訊息處理器中回覆訊息 ```python= @handler.add(MessageEvent, message=TextMessage) def handle_message(event): # 準備回覆訊息為字串'Hi' reply = TextSendMessage(text='Hi') # 回傳訊息 line_bot_api.reply_message( event.reply_token, reply) ``` ---- ### 訊息處理器中回覆貼圖 ```python= @handler.add(MessageEvent, message=TextMessage) def handle_message(event): # 準備回覆訊息為一張貼圖 reply = StickerSendMessage(package_id='2', sticker_id='149') # 回傳訊息 line_bot_api.reply_message( event.reply_token, reply) ``` ---- ### 可用貼圖清單 https://devdocs.line.me/files/sticker_list.pdf ---- # 準備上架App ---- ## 下載並安裝Git [![](https://camo.githubusercontent.com/f16ad15dc18925e3f4ac58f23cf90957bf457eb5/68747470733a2f2f692e696d6775722e636f6d2f726768496647532e706e67)](https://git-scm.com/) ---- ## 初次安裝Git的設定程序 ---- 在終端機內下 ```shell= git config --global color.ui true git config --global user.name 你的使用者名稱 git config --global user.email 你的Email ``` ---- ## Heroku申請帳號並新增一個專案 [![](https://camo.githubusercontent.com/a0c12ef13287d6a6f9a9902c7dbd88fee274b60f/68747470733a2f2f692e696d6775722e636f6d2f70356369424b542e706e67)](https://dashboard.heroku.com/) ---- ## 下載並安裝Heroku CLI https://devcenter.heroku.com/articles/heroku-cli ---- ## 透過終端機登入Heroku ```shell= heroku login ``` ---- ### App初次上架 請至App目錄使用以下終端機指令 ```shell= git init git add . git commit -m "本次修改/新增的內容" heroku git:remote -a Heroku的專案名稱 git push heroku master ``` ---- ### 往後App的上架指令 ```shell= git add . git commit -m "本次修改/新增的內容" git push heroku master ``` ---- ### 至Line Channel設定Webhook URL ![](https://i.imgur.com/KegdVzy.png) ---- Webhook URL必須對應到app.py的route ---- 如果在app.py對應的route是: ```python= @app.route("/callback", methods=['POST']) ``` ---- 則Webhook URL為 ```shell= 你的專案名稱.herokuapp.com/callback ``` ---- 如果在app.py對應的route是: ```python= @app.route("/hello", methods=['POST']) ``` ---- 則Webhook URL為 ```shell= 你的專案名稱.herokuapp.com/hello ``` ---- ### 練習(一) 1. 將使用者輸入的文字整理後回傳 2. 比如使用者輸入「Hi」,機器人則回傳「你剛才講的是 Hi」 ---- ### 練習(二) 1. 請試著整合爬蟲程式 `scraper.py` 的功能 2. 讓使用者在輸入如「美金」後可看到銀行買賣價格 ---- ## 字串處理補充 處理使用者輸入的小細節 ```python= sentence = ' Hello World '.strip() print(sentence) # 你將可得到Hello World ```
{"metaMigratedFrom":"YAML","metaMigratedAt":"2023-06-14T17:46:09.225Z","title":"搭建Python Linebot","breaks":true,"slideOptions":"{\"mouseWheel\":true,\"width\":\"100%\",\"height\":\"90%\",\"margin\":0.1,\"minScale\":1,\"maxScale\":2,\"loop\":true}","contributors":"[{\"id\":\"ee8a2e32-575e-4b35-aa4a-fb25c190013c\",\"add\":4358,\"del\":0}]"}
    566 views