# 搭建Python Linebot
Python程式設計
張元鴻 & 黃安聖
----
## 運行原理

----
## 請先下載啟動範本
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://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

----
### 取得Line Channel Secret

----
### 取得Line Channel Token

----

----
### 更新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://git-scm.com/)
----
## 初次安裝Git的設定程序
----
在終端機內下
```shell=
git config --global color.ui true
git config --global user.name 你的使用者名稱
git config --global user.email 你的Email
```
----
## Heroku申請帳號並新增一個專案
[](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

----
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}]"}