用 Python 畅玩 Line bot - 02:Line bot SDK

在建立好帐号之後,我们可以开始来看看 Line bot SDK,可以从 Line developers ocumentation 中找到 python 的 github,从这边可以找到 Line bot 的最基础架构,我们之後想变化,增加的功能都是从这里开始。

# app.py
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('YOUR_CHANNEL_ACCESS_TOKEN')
handler = WebhookHandler('YOUR_CHANNEL_SECRET')

@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:
        print("Invalid signature. Please check your channel access token/channel secret.")
        abort(400)

    return 'OK'


@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
    line_bot_api.reply_message(
        event.reply_token,
        TextSendMessage(text=event.message.text))


if __name__ == "__main__":
    app.run()

首先,我们可以将整段程序码分为三个区块理解,分别是引入模组、告知 Line bot 的基本资料以及接收 Line 的资讯。
第一个区块的部分,主要引入了为了架设网站用的 Flask 以及整个 Line bot 中最重要的 Line bot API,这边架设网站不一定要使用 Flask,可以根据自己的习惯或是需求去改用其他的网页框架。这两个套件都要记得在 cmd 中进行 install。

pip install

line-bot-sdk
flask

而 Line bot API 的部分,因为最常用到的是讯息事件以及文字的接收与回覆,因此在一开始的架构之中,已经先把MessageEventTextMessageTextSendMessage给先引入完毕,若是後续有要再用到像是图片、音档等其他 API 的时候,就会需要再此处进行引入。

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 decelopers中进入建立好的 channel,从 Basic settings 的下方找到 channel secret,Messaging API 的下方中点选 issue 取得 channel access token,token 在点选 issue 後会让你设置重置的时间,如果不希望他重置的话,可以将时间设定为 0 hours。

line_bot_api = LineBotApi('YOUR_CHANNEL_ACCESS_TOKEN')
handler = WebhookHandler('YOUR_CHANNEL_SECRET')

图一、channel secret

图二、channel access token

图三、设置 token 重置时间

第三个区块是用来接收当 Line bot 被触发各事件时,所得到的资讯,後续我们要对接收到的资讯做判断、归类、处理的时候,都是会在这区块中撰写。

@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:
        print("Invalid signature. Please check your channel access token/channel secret.")
        abort(400)

    return 'OK'


@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
    line_bot_api.reply_message(
        event.reply_token,
        TextSendMessage(text=event.message.text))


if __name__ == "__main__":
    app.run()

<<:  【在厨房想30天的演算法】Day 21 演算法 : 最短路径 Shortest Path Dijkstra 演算法

>>:  [经典回顾]预设密码事件纪录

Day 12 - Rancher 专案管理指南 - Project 概念介绍

本文将於赛後同步刊登於笔者部落格 有兴趣学习更多 Kubernetes/DevOps/Linux 相...

Deserialization

JSON serialization/deserialization 应该是不少 Android a...

[Day 16] 实作-图片轮播 Carousels

今天来实作首页的活动图片轮播, 先介绍这次会用到 Vuetify 的 Carousels 组件 Ca...

DAY 3 - 飞天鲸鲨

大家好~ 我又来乱涂乱画了~~~ 今天来尝试一下有点科幻风格的~~ 目标是画一只 能在天上飞的飞天鲸...

专注,就是你要懂得说不。

专注,就是你要懂得说不。 Focus means saying no. 苹果创办人 Steve Jo...