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

更新於 發佈於 閱讀時間約 16 分鐘

在我們的上一篇文章中,我們已經準備好了製作LINE Bot所需的各項工具。接下來,我們將一起來進行最基礎的Python與LINE的串接練習。透過這次的練習,我們將喚醒我們的機器人,並讓它展現最基本的回答功能。那麼,讓我們開始吧!

如果還沒準備好串接所需的工具,記得先去看《【python】Python+LINE Bot 輕鬆打造股市機器人(二) : 所需準備的工具

開啟Visual Studio Code

創建資料夾

首先,我們先創建要存放LINE機器人所需要的程式碼以及相關檔案的資料夾,在此我選擇一個路徑創建一個名為LINEBot的資料夾。

raw-image

接著打開Visual Studio Code,點選左上角的「檔案」,接著點選「開啟資料夾」,並且選擇剛剛創建的LINEBot資料夾的路徑。

raw-image

選擇好路徑後,我們必須創建2個基本的檔案,將滑鼠指標移至檔案總管並按下右鍵,選擇新增檔案,分別創建:

  • app.py: 存放Linebot主程式檔
  • requirements.txt: 要安裝的套件版本
raw-image

創建完會如下圖這樣

raw-image

編寫requirements.txt

我們接下來要修改的文件是requirements.txt。由於剛剛建立的Render是一個非常乾淨的環境,許多模組並未被預設安裝。這彷彿我們剛開始下載Python一樣,許多模組需要經由pip install進行額外安裝。而requirements.txt的作用就是告知Render,我們的檔案需要哪些模組的支援。

下面是我目前用到的模組,它們都是在我根據程式需求進行寫作的過程中逐一加入的。如果你想要確保模組在Render上的版本與本地端一致,別忘了加上「==版本號」。這種作法可以預防某些功能因為版本不同,在本地端與Render執行上的不一致。

flask==3.0.3
numpy==1.23.2
beautifulsoup4==4.6.3
requests==2.20.1
scipy
pandas==1.2.4
lxml==4.5.2
line-bot-sdk==3.11.0
datetime
matplotlib
gspread==4.0.1
oauth2client==4.1.3
pyimgur
mpl_finance
arrow

編寫app.py

接下來主程式檔app.py要寫的程式碼就比較多了唷!!

我們就分段來簡單說明一下

首先當然要先import所需要的模組,這邊都是為了讓pyhtont串接linebot所需要的一些line官方提供的模組

  1. Flask:這是一個用於建立 web 應用的 Python 框架。在這裡,它被用來創建一個可以接收和處理來自 LINE 的 HTTP 請求的 web 服務器。
  2. request:這是 Flask 框架中的一個模組,用於處理 HTTP 請求。
  3. abort:這是 Flask 框架中的一個函數,用於中止 HTTP 請求並返回一個錯誤碼。
  4. LineBotApi:這是 Line Bot SDK 中的一個類,提供了與 LINE 伺服器進行溝通的各種方法,例如發送訊息、回覆訊息等。
  5. WebhookHandler:這是 Line Bot SDK 中的一個類,用於處理來自 LINE 的 webhook 事件。當用戶在 LINE 上向你的 bot 發送訊息時,LINE 伺服器會發送一個 webhook 事件到你的服務器,WebhookHandler 就是用來處理這些事件的。
  6. InvalidSignatureError:這是 Line Bot SDK 中的一個異常類,當 webhook 事件的簽名不正確時會拋出這個異常。
  7. MessageEvent:這是 Line Bot SDK 中的一個類,表示一個訊息事件。當用戶向你的 bot 發送訊息時,你的服務器會收到一個 MessageEvent。
  8. TextMessage:這是 Line Bot SDK 中的一個類,表示一個文本訊息。你可以創建一個 TextMessage 對象並通過 LineBotApi 將它發送給用戶。
  9. TextSendMessage:這是 Line Bot SDK 中的一個類,表示一個要發送的文本訊息。你可以創建一個 TextSendMessage 對象並通過 LineBotApi 將它發送給用戶。
from flask import Flask, request, abort
from linebot import (
LineBotApi, WebhookHandler
)
from linebot.exceptions import (
InvalidSignatureError
)
from linebot.models import (
MessageEvent, TextMessage, TextSendMessage,
)

接下來我們就要將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」,並且用滑鼠往下滑至底部。

raw-image

最底部有一個名為「Channel access token」的部分,點選「Issue」便可產生一串代碼,此就是我們上方提到的token部分,將這段代碼複製起來,並且貼到程式碼中「 你自己的token」 的地方。

raw-image

接下來回到最上方,點選「Basic settings」。

raw-image

往下滑到「Channel secret」,一樣將代碼複製到程式碼中的 「你自己的secret」 上。

raw-image

下一步,我們需要注意的是,由於我們使用的雲端服務是免費版,所以在我們長時間未使用時,雲端服務會進入休眠狀態。每次再度啟動都需要花費一些時間。因此,我習慣在開發階段時加上以下的一段程式碼。一但程式開始運行,該程式碼會主動告知我們,服務已經準備好了。這部分的細節,我們將在後續的教學中詳細介紹。現在先嘗試寫上看看。

line_bot_api.push_message('你自己的ID', TextSendMessage(text='你可以開始了'))

其中值得我們注意的是「你自己的ID」的部分,該部分一樣回到剛剛的 LINE developer,在 Channel secret 下方有一個名為「Your user ID」,一樣將該段代碼複製到程式碼中 「你自己的ID」 的地方

raw-image

輸入好token等驗證代碼後,就是要設置一個路由來接收和處理來自 LINE 伺服器的 webhook 事件。以下程式碼主要目的是為了設置一個 HTTP POST 的路由,用於接收和處理來自 LINE 伺服器的 webhook 事件。以下是詳細的步驟:

  1. @app.route("/callback", methods=['POST']):這一行是用來設置一個路由的。當有 HTTP POST 請求發送到你的伺服器的 "/callback" 路徑時,會調用下面的 callback() 函數。
  2. signature = request.headers['X-Line-Signature']:這一行是從 HTTP 請求的頭部獲取 「X-Line-Signature」的值。這個值是 LINE 伺服器為了驗證請求的合法性而添加的一個簽名。
  3. body = request.get_data(as_text=True):這一行是獲取 HTTP 請求的主體,也就是實際的訊息內容。
  4. app.logger.info("Request body: " + body):這一行是將請求主體的內容記錄到日誌中。
  5. handler.handle(body, signature):這一行是調用之前導入的 WebhookHandler的 handle() 方法,將請求主體和簽名作為參數傳入。handle() 方法會驗證簽名的合法性,並根據請求主體的內容處理 webhook 事件。
  6. 如果在處理 webhook 事件時發生了 InvalidSignatureError 異常,則調用 abort(400) 函數中止請求並返回一個 400 錯誤碼。
  7. 如果一切都正常,則返回 'OK' 字符串作為 HTTP 響應的主體。
# 監聽所有來自 /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'

然而寫上程式碼後仍然沒有告訴程式碼我們要串接的Render在哪,因此,我們打開上篇教學中我們創建的Render雲端伺服器

raw-image

我們需要的是該網頁的網址,所以將網址複製起來

raw-image

接著回到LINE developer的Messaging API中,往下滑到「Webhook settings」,並點選「Edit

raw-image

接著將剛剛複製的網址貼上,並在後方加上「/callback」,最後按下「Update」進行更新

raw-image

再來我們可以進行一些設定,像是第一個為「是否機器人加入群組」,預設為否,第二個為「機器人是否自動回覆訊息」,預設為是,但我們為了不讓機器人回覆不必要的罐頭訊息,因此我們要點選右方的「Edit」,進去進行修改

raw-image

進去後往下看到進階設定的地方,我們要將「自動回應訊息」設為「停用」,這時順便檢查下方的「Webhook」是否為「啟用

raw-image

大致上串接的工作到這就算正式完成了,之後就不太需要進行變更了,我們就可以專注於撰寫功能程式碼即可

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

raw-image

進去以後,點選畫面中間的「choose your files」,並選擇上述編寫程式碼的檔案,等到檔案都上傳完後,最後按下「commit changes

raw-image

上傳完的資料夾會顯示如下多出了3個檔案

raw-image

接著回到heroku中,我們點選左上角的「Deploy」,並點選要用「GitHub」上傳的方式,如果剛剛有登入github,應該會顯示如下圖第3步驟的樣子,前方為你github的帳戶,如果沒有就自行登錄你的github帳戶,而後方輸入你創立的github資料夾,並按下search,這時應該會出現一個如圖第4步驟的路徑,這時按下右方的「Connect」進行串接

raw-image

串接後,由於我們目前github中沒有其他分支版本,所以預設的版本就是main,如果往後有使用到分支再跟大家分享,這裡我們只需要按下「Deploy Branch」進行佈署

raw-image

第一次佈署應該都會比較久一點,所有耐心等待一下,而佈署完成會出現如下圖的樣子,表示佈署成功

raw-image

佈署完成後,這時我們先前用LINE加入的機器人就會突然說出一句「你可以開始了」,表示程式碼佈署成功,這時我們隨便輸入,像我輸入了「你好」,機器人也就會回覆「你好」,我輸入「我誰~~~~」,機器人一樣會回覆 「我誰~~~~」

raw-image

結論

是不是開始覺得興奮啦!!今天我們學會了如何將python、github、heroku以及linebot進行串接,往後的程式碼教學只會著重在主程式(app.py)中的功能程式碼那部分,其餘皆為設定一次即可,大家就先熟悉如何熟練的串接各個平台,往後不斷更新程式碼後,仍然需要重複上傳與佈署等動作,有興趣的也可自行摸索各個平台的一些功能唷!!

留言
avatar-img
留言分享你的想法!
黃尹辰-avatar-img
2024/11/16
老師您好,現在line develope不支援使用使用messaging API 要從官方帳號那邊才能創建。 但在官方帳號創建完啟用messaging API後,只有channel ID 與 channel secret 沒有Channel access token這部分,請問您知道如何取得嗎
Lo Rober-avatar-img
2024/09/25
老師,你的圖片都消失看不見了,可以補一下嗎?
Cosdan Lin-avatar-img
2022/10/19
老師您好:按照步驟一步步操作後,在Heroku 按下deply後出現 ERROR: Application not supported by 'heroku/nodejs' buildpack 等等錯誤訊息,請問老師這是哪裡有出錯?
avatar-img
陳式語言の投資之道
187會員
59內容數
我出生於財務金融與資訊背景,滿20歲便開始踏入股市。從當初對股市一無所知的菜鳥,到現在成為一名專注於AI股市研究的分析師,這是我的成長歷程。   我崇尚彼得·林區所強調的理念,認為在生活和工作中觀察,從周遭環境中挑選出適合投資的股票,並搭配近期快速崛起的程式交易、大數據分析等AI技術,立志打造輕鬆又便利的投資之路。
2022/12/03
在上一篇教學中,我們學會了如何創建簡易且免費的資料庫,而本篇我們就來學習如何利用python與SQL進行結合,並將資訊傳遞到LINE BOT之中,我們將以簡單的股票追蹤清單作為教學,如果還沒看過上一篇如何安裝SQL Server 2019 免費開發版的人記得先去安裝唷!!
Thumbnail
2022/12/03
在上一篇教學中,我們學會了如何創建簡易且免費的資料庫,而本篇我們就來學習如何利用python與SQL進行結合,並將資訊傳遞到LINE BOT之中,我們將以簡單的股票追蹤清單作為教學,如果還沒看過上一篇如何安裝SQL Server 2019 免費開發版的人記得先去安裝唷!!
Thumbnail
2022/11/05
當我們抓取了相當多的網站資料,這些來自不同網站的資料總不可能全都匯集成一張Excel吧,因此通常在寫程式的使用者,都需要一個可以存放資料,並進行串聯的資料庫(SQL),因此我們今天就來教大家如何安裝使用免費的資料庫吧!!
Thumbnail
2022/11/05
當我們抓取了相當多的網站資料,這些來自不同網站的資料總不可能全都匯集成一張Excel吧,因此通常在寫程式的使用者,都需要一個可以存放資料,並進行串聯的資料庫(SQL),因此我們今天就來教大家如何安裝使用免費的資料庫吧!!
Thumbnail
2022/10/15
每個人都有自己檢視個股好壞的方式,但總是希望每次在查詢時,如果能一鍵就檢視完成那該有多好。今天我們就來學習如何製作一份地雷股檢視圖,學會後就能夠如法炮製,製作自己的一鍵檢視清單,不用再上網依靠其他網站手動檢查,可以省下一大段時間,又能及時了解要投資的個股好壞,以便能適時做出買賣決策
Thumbnail
2022/10/15
每個人都有自己檢視個股好壞的方式,但總是希望每次在查詢時,如果能一鍵就檢視完成那該有多好。今天我們就來學習如何製作一份地雷股檢視圖,學會後就能夠如法炮製,製作自己的一鍵檢視清單,不用再上網依靠其他網站手動檢查,可以省下一大段時間,又能及時了解要投資的個股好壞,以便能適時做出買賣決策
Thumbnail
看更多
你可能也想看
Thumbnail
家中修繕或裝潢想要找各種小零件時,直接上網採買可以省去不少煩惱~看看Sylvia這回為了工地買了些什麼吧~
Thumbnail
家中修繕或裝潢想要找各種小零件時,直接上網採買可以省去不少煩惱~看看Sylvia這回為了工地買了些什麼吧~
Thumbnail
👜簡單生活,從整理包包開始!我的三款愛用包+隨身小物清單開箱,一起來看看我每天都帶些什麼吧🌿✨
Thumbnail
👜簡單生活,從整理包包開始!我的三款愛用包+隨身小物清單開箱,一起來看看我每天都帶些什麼吧🌿✨
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
其實要為專案建立操作介面的方式很多,除了網頁之外,還能另外寫個專門的手機 APP 連線,或是乾脆升級算法,讓我們能隨口喊一聲「嘿OO!」就搞定,不過⋯
Thumbnail
其實要為專案建立操作介面的方式很多,除了網頁之外,還能另外寫個專門的手機 APP 連線,或是乾脆升級算法,讓我們能隨口喊一聲「嘿OO!」就搞定,不過⋯
Thumbnail
在上一篇教學中,我們學會了如何創建簡易且免費的資料庫,而本篇我們就來學習如何利用python與SQL進行結合,並將資訊傳遞到LINE BOT之中,我們將以簡單的股票追蹤清單作為教學,如果還沒看過上一篇如何安裝SQL Server 2019 免費開發版的人記得先去安裝唷!!
Thumbnail
在上一篇教學中,我們學會了如何創建簡易且免費的資料庫,而本篇我們就來學習如何利用python與SQL進行結合,並將資訊傳遞到LINE BOT之中,我們將以簡單的股票追蹤清單作為教學,如果還沒看過上一篇如何安裝SQL Server 2019 免費開發版的人記得先去安裝唷!!
Thumbnail
在先前的教學中,我都教大家程式寫完以後就架設到「Heroku」的雲端上做使用,但如果你想嘗試其他自創的功能,這時一定會需要一直Debug,如果每次想看結果都要部屬一次Heroku,那這樣就變得相當麻煩,所以今天我就教大家如何利用本機端來提供外網連接的方式吧!!
Thumbnail
在先前的教學中,我都教大家程式寫完以後就架設到「Heroku」的雲端上做使用,但如果你想嘗試其他自創的功能,這時一定會需要一直Debug,如果每次想看結果都要部屬一次Heroku,那這樣就變得相當麻煩,所以今天我就教大家如何利用本機端來提供外網連接的方式吧!!
Thumbnail
第一個實戰,我們就先從如何連接自己的網站開始,當我們輸入「部落格」時,機器人就會輸出一個表格,只要點選「馬上觀看」,我們就可以直接連接到自己的部落格,此功能其實也可以運用在連接粉專或是其他想要觀看的網站唷!! Flex Message 實際製作教學 選擇模板 更改圖片 修改內容物 修改底部box
Thumbnail
第一個實戰,我們就先從如何連接自己的網站開始,當我們輸入「部落格」時,機器人就會輸出一個表格,只要點選「馬上觀看」,我們就可以直接連接到自己的部落格,此功能其實也可以運用在連接粉專或是其他想要觀看的網站唷!! Flex Message 實際製作教學 選擇模板 更改圖片 修改內容物 修改底部box
Thumbnail
還記得之前介紹我的LINE Bot中第一個功能嗎?沒錯,就是部落格的選單,這選單看起來是不是比較華麗一點,但其實製作上相當簡單就可以完成,要如何製作就是我們今天要教的「客製化選單」
Thumbnail
還記得之前介紹我的LINE Bot中第一個功能嗎?沒錯,就是部落格的選單,這選單看起來是不是比較華麗一點,但其實製作上相當簡單就可以完成,要如何製作就是我們今天要教的「客製化選單」
Thumbnail
在前幾篇基本教學中,我們想要LINE Bot回覆某個功能時,都必須要自行手動輸入特定關鍵字,但有時候我們卻希望輸入指令後,LINE Bot回覆的是「選單」功能,可以讓我們進行多樣化的選擇,不需要每個指令都手動輸入,可以讓操作上更加便利
Thumbnail
在前幾篇基本教學中,我們想要LINE Bot回覆某個功能時,都必須要自行手動輸入特定關鍵字,但有時候我們卻希望輸入指令後,LINE Bot回覆的是「選單」功能,可以讓我們進行多樣化的選擇,不需要每個指令都手動輸入,可以讓操作上更加便利
Thumbnail
在上一篇文章中,我們已經準備好製作LINE機器人的工具了,接下來我們就要來做一個最簡單的Python與LINE的串接練習,讓我們的機器人活起來,並且做出最基本的回話功能,如果還沒準備好串接所需的工具,記得先去看《【python】Python+LINE Bot 輕鬆打造股市機器人(二) : 所需準備的
Thumbnail
在上一篇文章中,我們已經準備好製作LINE機器人的工具了,接下來我們就要來做一個最簡單的Python與LINE的串接練習,讓我們的機器人活起來,並且做出最基本的回話功能,如果還沒準備好串接所需的工具,記得先去看《【python】Python+LINE Bot 輕鬆打造股市機器人(二) : 所需準備的
Thumbnail
在我們正式開始Python串接LINE Bot的教程之前,有必要先為大家準備好所需的工具。實際上,製作LINE Bot的工具有很多選擇,我將會介紹我在製作過程中所使用的具體工具有哪些,以及如何進行事前的準備工作。讓我們一起走進這個有趣的製作過程吧!
Thumbnail
在我們正式開始Python串接LINE Bot的教程之前,有必要先為大家準備好所需的工具。實際上,製作LINE Bot的工具有很多選擇,我將會介紹我在製作過程中所使用的具體工具有哪些,以及如何進行事前的準備工作。讓我們一起走進這個有趣的製作過程吧!
Thumbnail
使用 Telegram 官方推薦的方式,實作 webhook 和部署機器人到 Heroku。 本文只講部署(deploy)的部分,撰寫程式和申請帳號、操作 Heroku 教學很多了請自行 google。
Thumbnail
使用 Telegram 官方推薦的方式,實作 webhook 和部署機器人到 Heroku。 本文只講部署(deploy)的部分,撰寫程式和申請帳號、操作 Heroku 教學很多了請自行 google。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News