前言、
近日學校開了一堂用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(不用按驗證)
五、開始測試!
來使用看看剛剛做出來的成品吧~
留言列表