Python+LINE Bot 輕鬆打造股市機器人(三) : Python與LINE Bot串接測試

閱讀時間約 12 分鐘
在上一篇文章中,我們已經準備好製作LINE機器人的工具了,接下來我們就要來做一個最簡單的Python與LINE的串接練習,讓我們的機器人活起來,並且做出最基本的回話功能,如果還沒準備好串接所需的工具,記得先去看《【python】Python+LINE Bot 輕鬆打造股市機器人(二) : 所需準備的工具

開啟Visual Studio Code

創建資料夾

首先,我們先創建要存放LINE機器人所需要的程式碼以及相關檔案的資料夾,在此我在桌面創建一個名為test的資料夾
接著打開Visual Studio Code,點選左上角第一個圖案,接著點選開啟資料夾選擇我們剛剛創建的資料夾
選擇好資料夾後,再來我們必須創建3個基本的檔案,將滑鼠指標移至檔案名上(此為TEST),此時右方就會出現四個可以選擇的圖案,我們點選第一個為新增檔案,分別創建為「app.py」、「Procfile」以及「requirements.txt」(記得大小寫及單字不可打錯喔,否則佈署到heroku上會失敗)
創建完會如下圖這樣

編寫Procfile

首先,我們先編寫Procfile這個檔案,該檔案的用處是要讓heroku能夠辨認哪個檔案是主程式檔,也就是主要執行的程式檔,在此我們通常會將主程式檔設定為app.py,但如果想要更改主程式檔,只要把下方程式碼的app.py改成想要的檔名即可
(記得,在 Visual Studio Code中每次編寫好的程式碼都要用「Ctrl + s」才會儲存唷!!)
web: python app.py

編寫requirements.txt

再來我們要編寫requirements.txt,由於新創建的heroku是一個相當乾淨的環境,因此許多模組本身是無法使用的,就像我們一開始下載python一樣,許多模組都必須透過pip install進行額外安裝,而 requirements.txt的用途就是告訴heroku我們的檔案需要安裝哪些模組,而以下是我目前有使用到的模組,這些都是根據不斷增加所需程式碼時不斷新增的,而如果想讓模組跟本機端的版本一致,記得加上「==版本」,免得有些功能因為版本不同而造成本機端跟heroku中執行不一致的狀況
flask==1.1.2 
numpy==1.23.2 
beautifulsoup4==4.6.3 
requests==2.20.1 
scipy 
pandas==1.2.4 
lxml==4.5.2 
line-bot-sdk==1.19.0 
datetime  
matplotlib 
gspread==4.0.1 
oauth2client==4.1.3 
pyimgur 
mpl_finance 
arrow

編寫app.py

接下來主程式檔app.py要寫的程式碼就比較多了唷!!
我們就分段來簡單說明一下
首先當然要先import所需要的模組,這邊都是為了讓pyhtont串接linebot所需要的一些line官方提供的模組,所以就照抄就好,往後越寫越多時就自然明白該模組的功用了
#載入LineBot所需要的模組 
from flask import Flask, request, abort  
from linebot import (
  LineBotApi, WebhookHandler
 ) 
from linebot.exceptions import (
  InvalidSignatureError
 ) 
from linebot.models import *
接下來我們就要將python跟line做結合,那要怎麼結合呢?
其實很簡單,我們首先輸入以下的程式碼,該段程式碼就是串接linebot的鑰匙,其中可以看到兩個值得注意的部分,分別為「你自己的token」以及「你自己的secret」,這兩段是要填入自己linebot的token以及secret,但這兩個部分該去哪裡取得呢?
app = Flask(__name__)  
# 必須放上自己的Channel Access Token 
line_bot_api = LineBotApi('你自己的token')  
# 必須放上自己的Channel Secret
 handler = WebhookHandler('你自己的secret')
我們打開上篇教學中創建LINE Bot的LINE developer,並且登入自己的line帳戶,選擇上篇我們所創建的LINE Bot
進入以下畫面後,點選「Messaging API」,並且用滑鼠往下滑至底部
最底部有一個名為「Channel access token」的部分,點選「Issue」
點選後就會出現如下一串的代碼,此就是我們上方提到的token部分,將這段代碼複製起來,並且貼到程式碼中「 你自己的token」 的地方
接下來回到最上方,點選「Basic settings
往下滑到「Channel secret」,一樣將代碼複製到程式碼中的 「你自己的secret」 上
當我自己的機器人仍然處於製作狀態時,我習慣加上如下的一段程式碼,該程式碼是當程式啟動後,便會主動告訴我們可以開始的一段程式碼,該部分我們之後的教學會做介紹,這裡就先寫上去嘗試看看
line_bot_api.push_message('你自己的ID', TextSendMessage(text='你可以開始了'))
其中值得我們注意的是「你自己的ID」的部分,該部分一樣回到剛剛的 LINE developer,在 Channel secret 下方有一個名為「Your user ID」,一樣將該段代碼複製到程式碼中 「你自己的ID」 的地方
上放的部分主要是讓python與我們的LINE Bot做串接,但還記得嗎,我們的程式碼是要放到heroku中,因此我們也需要讓heroku跟LINE Bot做串接才行,因此我們先加上如下的程式碼,主要是回報我們串接是否成功
# 監聽所有來自 /callback 的 Post Request 
@app.route("/callback", methods=['POST']) 
def callback():     
  # get X-Line-Signature header value     
  signature = request.headers['X-Line-Signature']
  # get request body as text     
  body = request.get_data(as_text=True)     
  app.logger.info("Request body: " + body)      
  # handle webhook body     
  try:         
    handler.handle(body, signature)     
  except InvalidSignatureError:         
    abort(400)      
  return 'OK'
然而寫上程式碼後仍然沒有告訴程式碼我們要串接的heroku在哪,因此,我們打開上篇教學中我們創建的heroku雲端伺服器,並且點選右上角的「Open app
我們需要的是該網頁的網址,所以將網址複製起來
接著回到LINE developer的Messaging API中,往下滑到「Webhook settings」,並點選「Edit
接著將剛剛複製的網址貼上,並在後方加上「/callback」,最後按下「Update」進行更新
再來我們可以進行一些設定,像是第一個為「是否機器人加入群組」,預設為否,第二個為「機器人是否自動回覆訊息」,預設為是,但我們為了不讓機器人回覆不必要的罐頭訊息,因此我們要點選右方的「Edit」,進去進行修改
進去後往下看到進階設定的地方,我們要將「自動回應訊息」設為「停用」,這時順便檢查下方的「Webhook」是否為「啟用
大致上串接的工作到這就算正式完成了,之後就不太需要進行變更了,我們就可以專注於撰寫功能程式碼即可

linebot功能程式碼

接下來,我們仍然要在app.py中進行主程式的撰寫
我們今天就先複製以下的程式碼進行測試看看,往後的教學會一一介紹有哪些linebot的功能程式碼
簡單說一下,該段程式碼就是我們輸入什麼內容,機器人就會原封不動的回傳給你一模一樣的功能
#訊息傳遞區塊 
##### 基本上程式編輯都在這個function ##### 
@handler.add(MessageEvent, message=TextMessage) 
def handle_message(event):     
  message = event.message.text     
  line_bot_api.reply_message(event.reply_token,TextSendMessage(message))
而最後我們就必須執行程式碼,所以記得加上以下的程式碼,以表示執行
#主程式 
import os if __name__ == "__main__":    
  port = int(os.environ.get('PORT', 5000))     
  app.run(host='0.0.0.0', port=port)
記得以上的程式碼都要用「Ctrl + s」儲存後再上傳唷!!

上傳至github

當我們以上三個程式碼都編寫完畢後,我們接下來就要將這些程式碼上傳至github中
首先,先開啟我們上篇教學中創建的github資料夾,點選右上角的「Add file」,再點選「Upload files
進去以後,點選畫面中間的「choose your files」,並選擇上述編寫程式碼的檔案,等到檔案都上傳完後,最後按下「commit changes
上傳完的資料夾會顯示如下多出了3個檔案
接著回到heroku中,我們點選左上角的「Deploy」,並點選要用「GitHub」上傳的方式,如果剛剛有登入github,應該會顯示如下圖第3步驟的樣子,前方為你github的帳戶,如果沒有就自行登錄你的github帳戶,而後方輸入你創立的github資料夾,並按下search,這時應該會出現一個如圖第4步驟的路徑,這時按下右方的「Connect」進行串接
串接後,由於我們目前github中沒有其他分支版本,所以預設的版本就是main,如果往後有使用到分支再跟大家分享,這裡我們只需要按下「Deploy Branch」進行佈署
第一次佈署應該都會比較久一點,所有耐心等待一下,而佈署完成會出現如下圖的樣子,表示佈署成功
佈署完成後,這時我們先前用LINE加入的機器人就會突然說出一句「你可以開始了」,表示程式碼佈署成功,這時我們隨便輸入,像我輸入了「你好」,機器人也就會回覆「你好」,我輸入「我誰~~~~」,機器人一樣會回覆 「我誰~~~~」

結論

是不是開始覺得興奮啦!!今天我們學會了如何將python、github、heroku以及linebot進行串接,往後的程式碼教學只會著重在主程式(app.py)中的功能程式碼那部分,其餘皆為設定一次即可,大家就先熟悉如何熟練的串接各個平台,往後不斷更新程式碼後,仍然需要重複上傳與佈署等動作,有興趣的也可自行摸索各個平台的一些功能唷!!
為什麼會看到廣告
156會員
56內容數
我出生於財務金融與資訊背景,滿20歲便開始踏入股市。從當初對股市一無所知的菜鳥,到現在成為一名專注於AI股市研究的分析師,這是我的成長歷程。   我崇尚彼得·林區所強調的理念,認為在生活和工作中觀察,從周遭環境中挑選出適合投資的股票,並搭配近期快速崛起的程式交易、大數據分析等AI技術,立志打造輕鬆又便利的投資之路。
留言0
查看全部
發表第一個留言支持創作者!