前言、
近日學校開了一堂用Python打造第1個聊天機器人
請來的是荔枝智慧股份有限公司執行長的 何健偉
雖然因為時間的關係,進度有些快
加上當時我電腦不知道為什麼抓不到GET POST,所以當下也沒做出Line Bot
但我還是有將整堂課程重點記錄下來
最後也自己努力做出來囉~

一、申請帳號
首先要申請個line@的普通帳號
點進自己剛創的帳戶
setting ->Messaging API Settings
隨意填入資料,開啟LINE Developers的模式
二、建立環境
安裝python3.6
安裝pycharm ide(開發環境)
1.設定環境變數
在windows搜尋環境變數並開啟,點選環境變數、系統變數
在PATH的地方貼上python的路徑和 python script的路徑
2.新增虛擬環境
打開 cmd (powershell) # 若有權限問題,請用系統管理員開啟CMD並輸入Set-ExecutionPolicy RemoteSigned
pip install virtualenv #安裝虛擬機套件
mkdir code #創建名為code的新資料夾
ls #列出資料夾清單
cd code #切換路徑至code
virtualenv venv #創建名為venv的虛擬機
.\venv\Scripts\activate.ps1 #執行activate.ps1進入虛擬環境
3.裝入其他需要的套件
pip install requests
pip install line-bot-sdk
pip install flask #網路套件(框架)
三、嘗試取出網路資料
google搜尋 天氣api
選其中一個資料做測試
https://works.ioa.tw/weather/api/weathers/:id.json
把:id改成別的數字
就能簡易取出該json資料
以下為程式碼方
import requests target_url = 'https://works.ioa.tw/weather/api/weathers/1.json' r = requests.get(url=target_url) print(r.json())
之後可以用爬蟲的方式,讓line bot的回應更多元
四、line bot 建立與串接
1.創建一個新的python file,並貼上以下程式碼
將一開始申請帳號後到達的developers.line.me中
Channel access token (long-lived)
Channel secret
分別填入對應的地方
from flask import Flask, request, abort
from linebot import (
LineBotApi, WebhookHandler
)
from linebot.exceptions import (
InvalidSignatureError
)
from linebot.models import (
MessageEvent, TextMessage, TextSendMessage,
)
app = Flask(__name__)
line_bot_api = LineBotApi(' 你的Channel access token (long-lived) ')
handler = WebhookHandler(' 你的Channel secret ')
@app.route("/", methods=['POST'])
def index():
# 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'
@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
if event.message.text==u"==":
line_bot_api.reply_message(event.reply_token,
TextSendMessage(u"2017年底終於有人知道==不要加空格"))
else:
line_bot_api.reply_message(event.reply_token,
TextSendMessage(text=event.message.text))
if __name__ == "__main__":
app.run(host='127.0.0.1', port= 7777)
這邊我自己加上一個判斷
若是line對象輸入"==",就會回覆"2017年底終於有人知道==不要加空格"
此外的情況一律重複line對象輸入的句子
※若是執行遇到問題
從pycharm檢查安裝的套件
file ->setting ->projecct code ->project interpreter ->+
如果有缺失就補安裝
※我遇到過的問題
原先我是到
https://github.com/line/line-bot-sdk-python
直接複製程式碼
但是怎麼樣到最後都被機器人已讀
後來把@app.route("/callback",.....)的callback刪掉才終於回我訊息了(試了兩個小時==)
2.連上伺服器
使用ngrok來做SSL驗證
下載ngrok
解壓縮後打開ngrok
輸入 ngrok http 自己的port
將下方網址複製
填入 Webhook URL 後點選 UPDATE(不用按驗證)
五、開始測試!
來使用看看剛剛做出來的成品吧~