-
Notifications
You must be signed in to change notification settings - Fork 2
/
06_recieve_and_analysis_img.py
131 lines (106 loc) · 4.41 KB
/
06_recieve_and_analysis_img.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
from flask import Flask, request, abort
import string
from flask import url_for, render_template
from linebot import (
LineBotApi, WebhookHandler
)
from linebot.exceptions import (
InvalidSignatureError, LineBotApiError
)
from linebot.models import (
MessageEvent, TextMessage, TextSendMessage, ImageSendMessage, Video, ExternalLink, PostbackEvent
)
# from linebot.models import ImagemapSendMessage, BaseSize, URIImagemapAction, MessageImagemapAction, ImagemapArea
from linebot.models import TemplateSendMessage, ButtonsTemplate, PostbackTemplateAction, MessageTemplateAction, URITemplateAction
import random
import glob
import os
try:
os.makedirs('./static/user_upload', exist_ok=False)
os.makedirs('./templates', exist_ok=False)
except FileExistsError:
pass
app = Flask(__name__)
PEOPLE_FOLDER = os.path.join('static', 'user_upload')
app.config['UPLOAD_FOLDER'] = PEOPLE_FOLDER
# 設定chatbot
line_bot_api = LineBotApi('Channel access token')
handler = WebhookHandler('Channel secret')
# 推給你自己
line_bot_api.push_message('Your user ID ', TextSendMessage(text='(後臺訊息)啟動豆芽探索共學ECHO機器人!'))
# 推給某個User
# line_bot_api.push_message('UserID', TextSendMessage(text='(後臺訊息)啟動豆芽探索共學ECHO機器人!'))
@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'
button_template_message =ButtonsTemplate(
thumbnail_image_url="https://i.imgur.com/d3vfgZP.png",
title='Menu',
text='Please select',
ratio="1.51:1",
image_size="cover",
actions=[
MessageTemplateAction(
label='message會回傳你好', text='你好'
),
URITemplateAction(
label='uri可回傳網址', uri='https://hackmd.io/DPLQVfzFS3yAs4ZcpY56NQ?view'
)
]
)
# 取得使用者上傳的圖片
@handler.add(MessageEvent)
def handle_img_message(event):
user_id = event.source.user_id
print("user_id =", user_id)
print(event.message.type)
if event.message.type=='image':
image_name = ''.join(random.choice(string.ascii_letters + string.digits) for x in range(4))
image_content = line_bot_api.get_message_content(event.message.id)
image_name = image_name.upper()+'.jpg'
path='./static/user_upload/'+user_id+'_'+image_name
print(path)
with open(path, 'wb') as fd:
for chunk in image_content.iter_content():
fd.write(chunk)
line_bot_api.reply_message(
event.reply_token,
TextSendMessage(text='收到照片,分析中!'))
@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
# get user id when reply
user_id = event.source.user_id
print("user_id =", user_id)
print(event.message.type)
reply_msg = event.message.text+'\nyour User ID is '+user_id+\
' \n輸入「你好」會啟動reply_message回復「不錯喔」'
if event.message.text=='你好':
line_bot_api.reply_message(
event.reply_token,
TextSendMessage(text='不錯喔'))
else:
line_bot_api.reply_message(
event.reply_token,
TextSendMessage(text=reply_msg))
try:
# alt_text 因template只能夠在手機上顯示,因此在PC版會使用alt_Text替代
line_bot_api.push_message(user_id, TemplateSendMessage(alt_text="Template Example",
template=button_template_message))
except LineBotApiError as e:
# error handle
raise e
import os
if __name__ == "__main__":
port = int(os.environ.get('PORT', 5000))
app.run(host='0.0.0.0', port=port)