我们回到第三天建立专案那天写的echo程序码。
结果如下:
我们再把这个程序码打出来
def callback(request):
if request.method == 'POST':
signature = request.META['HTTP_X_LINE_SIGNATURE']
body = request.body.decode('utf-8')
try:
events = parser.parse(body, signature) # 传入的事件
except InvalidSignatureError:
return HttpResponseForbidden()
except LineBotApiError:
return HttpResponseBadRequest()
for event in events:
if isinstance(event, MessageEvent): # 如果有讯息事件
line_bot_api.reply_message( # 回复传入的讯息文字
event.reply_token,
TextSendMessage(text=event.message.text)
)
return HttpResponse()
else:
return HttpResponseBadRequest()
我们专注在 Line 13
开始
for event in events:
if isinstance(event, MessageEvent): # 如果有讯息事件
line_bot_api.reply_message( # 回复传入的讯息文字
event.reply_token,
TextSendMessage(text=event.message.text)
)
昨天有提到,event
即是有事件传入。
有多少种事件?昨天都有讲过了~。
if isinstance(event, MessageEvent):
在这里先来讲讲 isinstance
的作用~
isinstance
这个 python funtion 类似 type()
,
两者区别再於:
type()
不会考虑继承关系(class
里的Inheritance
),他不会认为子类别(Sub Class)是父类别(Base Class)的一种。isinstance()
会考虑继承关系,所以 Sub Class 会被认为跟 Base Class 同类别。if isinstance(event, MessageEvent):
line_bot_api.reply_message( # 回复传入的讯息文字
event.reply_token,
TextSendMessage(text=event.message.text)
)
如果我 print
出 event 的内容:
for event in events:
print("event text", event.message.text)
if isinstance(event, MessageEvent): # 如果有讯息事件
event text 哈罗
@csrf_exempt
def callback(request):
if request.method == 'POST':
signature = request.META['HTTP_X_LINE_SIGNATURE']
body = request.body.decode('utf-8')
try:
events = parser.parse(body, signature) # 传入的事件
except InvalidSignatureError:
return HttpResponseForbidden()
except LineBotApiError:
return HttpResponseBadRequest()
for event in events:
print("event", event.message.id)
# print("event", type(event))
if isinstance(event, MessageEvent): # 如果有讯息事件
print("message", event.message)
message = []
if event.message.type == 'text':
text_ = event.message.text
message.append(TextSendMessage(text=text_))
elif event.message.type == 'sticker':
text_ = event.message.id
message.append(TextSendMessage(text=text_))
elif event.message.type == 'image':
text_ = event.message.id
message.append(TextSendMessage(text=text_))
elif event.message.type == 'video':
text_ = event.message.id
message.append(TextSendMessage(text=text_))
elif event.message.type == 'audio':
text_ = event.message.id
message.append(TextSendMessage(text=text_))
elif event.message.type == 'location':
text_ = event.message.id
message.append(TextSendMessage(text=text_))
# 回复传入的讯息文字
line_bot_api.reply_message( event.reply_token, message )
return HttpResponse()
else:
return HttpResponseBadRequest()
我们这边除了文字讯息以外,其他都回传讯息 id 给使用者,我们来看看发生甚麽事。
我们先从这部分开始,之後会一个一个解释。
Message Type 有以下几种(昨天也讲过了)
每一个 type
的 event
里的内容都不同。我们会在之後的天数慢慢把细节补齐(坑一定会补完的!)
这里我们先讲 Text
的部分
这些就是我们在 Text
这个 event
里面有的所有内容。
{
"events": [
{
"replyToken": "nHuyWiB7yP5Zw52FIkcQobQuGDXCTA",
"type": "message",
"mode": "active",
"timestamp": 1462629479859,
"source": {
"type": "user",
"userId": "U4af4980629..."
},
"message": {
"id": "325708",
"type": "text",
"text": "@example Hello, world! (love)",
"emojis": [
{
"index": 23,
"length": 6,
"productId": "5ac1bfd5040ab15980c9b435",
"emojiId": "001"
}
],
"mention": {
"mentionees": [
{
"index": 0,
"length": 8,
"userId": "U850014438e..."
}
]
}
}
}
]
}
我们所传入的讯息被储存在 event.message.text
里面,如果我们要使用的话,也可以随时拿取里面所需的内容。
一开始的 echo
,就是指 TextSendMessage(text=event.message.text)
我们回传的是自己传进来的文字!
之後会填上所有的坑,包含 Line Bot 的应用。
今天就先稍微讲到这里!
今天要开始介绍,如何做自定义helper,并使用。 helpers依照惯例会写在app/helper...
Golang goroutine 我自己理解goroutine 就很类似其他语言的thread[备注...
前言 模型已经训练好了,剩下来的就是如何将模型布署到手机上, 在这之前,我要先带大家安装所需要的软件...
接下来,会就六角学院 UI 设计入门 课程中,针对团队合作时会碰到的情境稍作讨论。 设计稿再好看也没...
GitHub Issue 有点像是专案管理系统内管理工作事项的功能,但它能达到功能更多:无论是个人或...