close

前言、

近日學校開了一堂用Python打造第1個聊天機器人

請來的是荔枝智慧股份有限公司執行長的 何健偉

雖然因為時間的關係,進度有些快

加上當時我電腦不知道為什麼抓不到GET POST,所以當下也沒做出Line Bot

但我還是有將整堂課程重點記錄下來

最後也自己努力做出來囉~

25991358_1588891381225342_850771148_o.jpg

 

一、申請帳號

首先要申請個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

將下方網址複製

developers.line.me 

填入 Webhook URL  後點選 UPDATE(不用按驗證)

 

 

五、開始測試!

來使用看看剛剛做出來的成品吧~

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 ivankao 的頭像
    ivankao

    IvanKao的部落格

    ivankao 發表在 痞客邦 留言(1) 人氣()