講者:王婕瑜
日期:2021/5/27
展覽報報機器人

掃我看Demo
OUTLINE
- 前言
- 寫爬蟲
- 修改 Line bot
- 發佈至 Heroku
- Reference
前言
由於疫情關係,對外課程停課。
上週課程,我們已經開發最簡單的 Line 回聲機器人,這週將結合爬蟲,寫出能告訴你展覽資訊的機器人,且會將機器人發布至 Heroku,不用電腦運行專案就可以使用喔。
Stay safe! ヽ(✿゚▽゚)ノ
Demo
輸入有展覽、旅遊字眼的訊息後,可得到最新展覽、旅遊資訊,取自輕旅行、非池中藝術
未來增加功能
- 使用 Heroku 所提供的資料庫 Heroku Postgres,增加紀錄及查詢資料的功能
- 使用Flex Message美化

流程說明
我們會修改上週做好的回聲機器人,還沒有寫過的同學請點選這裡看詳細教學。
首先會使用對外課程中寫過的爬蟲來取得展覽資訊,修改程式碼後,將機器人發佈到 Heroku。
開始囉!
寫爬蟲
這次爬取展覽資訊的程式,在之前的對外課程有詳細的教學,這邊就不介紹細節了
安裝套件
感謝上一堂課的講師,我們可以直接用他們寫的爬蟲,首先來安裝需要的套件,請開啟專案的資料夾,輸入:
# 上一份教材是使用pipenv,由於講者在實作過程遇到困難,所以這邊改用pip
pip -m venv venv # 創造虛擬環境
venv\Scripts\activate # 進入虛擬環境
pip install requests
pip install beautifulsoup4
pip install flask
pip install line-bot-sdk修改 app.py
import requests
from bs4 import BeautifulSoup在 app.py 的開頭新增以下兩行
# 解說以註解的方式寫在裡面
@handler.add(MessageEvent, message = TextMessage)
def handle_message(event):
# 使用者傳送"展覽報報"給機器人時會觸發事件
if event.message.text == '展覽':
user_agent = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'}
r = requests.get('https://artemperor.tw/tidbits', headers = user_agent)
r.encoding = 'utf-8' # UTF-8 格式的編碼方式,建議使用怕亂碼
soup = BeautifulSoup(r.text, 'html.parser')
content = [] # 存展覽資料的陣列
exhibitions = soup.select('h2', limit = 3) # 展覽名稱
date = soup.select('div.list_box p', limit = 3) # 展覽時間
locations = soup.select('h3', limit = 3) # 展覽地點
href = soup.select('div.list_box figure.tag a', limit = 3) # 連結
for i in range(3):
content.append(exhibitions[i].text + "\n" + date[i].text + "\n" + '地點:' + href[i].h3.text + "\n" + '詳情:'+ href[i]['href'] + "\n")
line_bot_api.reply_message(
event.reply_token,
TextSendMessage(text=' '.join(content))
)修改 Message Handler
測試
測試的方法見上一份教材,如此就完成本機端測試了。
但每次想使用機器人都必須運行app.py,使用 Ngrok 產生新網址,為了節省時間,接下來要開始將機器人發布至 Heroku。

發佈至 Heroku - 設定
a.k.a. 幫我們管理伺服器的地方
先前運行機器人的方法就是將伺服器建立在自己的電腦,為了隨時隨地都可以使用,我們會將伺服器架設在 Heroku 這個平台上,並且學習用 Git 來做版本控制。
Git 簡介
Git 是一個版本控制系統,當我們在開發專案時,隨著時間修改會有不同的版本,為了有效管理這些檔案、紀錄更新狀況,則需要使用 Git。
首先,點擊連結來安裝Git,不斷點擊 Next 即可。

設定
git config --global user.name "yourName"1. 使用者名稱
2. 電子信箱
git config --global user.email "yourEmail@gmail.com"開啟終端機,輸入以下指令來設定:
這樣就完成Git的設定了!接下來介紹Heroku。

- Heroku 提供用戶佈屬網站的服務
- 免費、操作簡單,不用煩惱管理機器或硬體維護,適合網路流量小的專案
- 若在 30 分鐘內沒有使用則自動進入睡眠狀態,需約 20 秒啟動系統
接下來開始註冊。
點擊標題的超連結到官網,填寫資料註冊。
除了信箱之外,其他的可以隨意填。

收到電子郵件後點進連結,設定密碼即可。



點擊標題的超連結來安裝 Heroku CLI。
Heroku CLI 是一個用來管理、創建、提交等命令的工具。

找到適合的版本後下載。
一直點 next,最後按 close 即可。
可以在終端機中輸入:
確認是否安裝完成,安裝完成則會呈現以下畫面:

heroku設定
首先登入Heroku,輸入:
heroku login

輸入信箱和密碼
設定
打開終端機,輸入:
新增 Heroku App。
heroku create APP的名字APP 的名字可以自己設定,
也可以空著, Heroku 會自動產生一個名稱
完成所有設定後,接下來將機器人發布至 Heroku。
發佈至 Heroku
開始使用 Git 指令將展覽機器人發佈到 Heroku 上
首先建立.gitignore,這個檔案沒有副檔名,內容放較為機密、不想讓它被 Git 紀錄的檔案:
建立檔案
.env
venv
.gitignorepip freeze > requirements.txt為了讓 Heroku 知道該下載什麼套件,在終端機中輸入:
設定環境變數
到 Heroku 的控制台點擊 Setting,設定 CHANNEL_ACCESS_TOKEN 及 CHANNEL_SECRET,在 Line Developer 裡的 Messanging API 跟 Basic Settings 裡可以找到
建立 Procfile
新增一個檔案 Procfile,注意也沒有副檔名,這是為了讓 Heroku 知道要用什麼指令把我們送上去的程式跑起來
web: gunicorn your_flask_module_or_package_name:app安裝 gunicorn
pip install gunicornweb: gunicorn app:app我們要執行的是 app.py 這個檔案,所以應該寫成:
Git 它
git init開啟終端機,切到專案目錄下後,輸入以下指令﹑初始化這個專案
heroku git:remote -a app_nameapp_name 請更換成自己的 APP 名字
上傳至 Heroku
git push heroku mastergit add . git commit -m "message" 未來如果有更改檔案,也是依照這個順序輸入指令!
設定 Webhook URL

開啟 Heroku 的 後台,點右上角的 Open app
會出現一個網頁,請將該網頁的網址複製下來
通常是 https://APP名字.herokuapp.com/
開啟 Line Developers 的 Messaging API
將得到的網址複製到 Webhook URL 的位置,並打開下面的 Use Webhook

記得在網址後加上 /callback
完成

heroku run python app.py這樣就完成一隻展覽資訊機器人啦!
如果在部屬過程有問題,可以使用下面的指令 debug,如果沒問題會出現在本機端運行時的畫面。
為了表示在本機端跟發布到 Heroku 的區別,這邊用來觸發事件的文字不同喔,請記得改
REFERENCE
- 程式前沿(2018)。全球都在用的分散式版本控制系統 —— git。檢索自:https://bit.ly/2H2LIdS。
- 神Q超人(2019)。Heroku | 搭配 Git 在 Heroku 上部署網站的手把手教學。檢索自:https://bit.ly/39fFRhk。
- 郭佳甯(2018)。第十八天:發布網站到 Heroku 。檢索自:https://ithelp.ithome.com.tw/articles/10196129。
- 黑楓(2017)。LineBot+Python,輕鬆建立聊天機器人。檢索自:https://yaoandy107.github.io/line-bot-tutorial/。
THANKS FOR LISTENING
展覽報報機器人
By juliewah
展覽報報機器人
SIRLA 109-2 對外課程
- 147