现在我们可以来尝试能对收到的 Image message 做怎样的操作,我们可以使用line_bot_api.get_message_content()
来获取档案资讯
@handler.add(MessageEvent)
def handle_message(event):
if (event.message.type == "image"):
SendImage = line_bot_api.get_message_content(event.message.id)
print(SendImage)
我们可以取得如下的资讯
<linebot.models.responses.Content object at 0x000001A19C24E908>
而如果我们想要看到对应的图片,需要将它重新写档下来,并存放到自己指定的位置,如下列程序码,这时候当我们接受到 Image message 时,就可以在资料夹中看到对应的图片了。
@handler.add(MessageEvent)
def handle_message(event):
if (event.message.type == "image"):
SendImage = line_bot_api.get_message_content(event.message.id)
path = './Image/' + event.message.id + '.png'
with open(path, 'wb') as fd:
for chenk in SendImage.iter_content():
fd.write(chenk)
再来如果我们想要回传 Image message, Line API 会要求你给的资讯是图片的 URL,而如果你想要将使用者传送过来的图片直接或处理过後回传,图片的 URL 要怎麽取得呢?这边尝试了两种方式,一是透过 imgur 的 API 上传图片并取得对应的 URL,二是透过 static 让静态档案路径可以转为URL被外部浏览。
用 imgur API 的方式会需要先去注册一个 Imgur App 帐号(连接在上方),Authorization type 部分选择第二个不用回传 URL。再输入完 email 後按下 submit,就可以看到 App 的 ID。
接着我们要到 cmd install pyimgur,并在程序码中引入,再来我们可以写个函式去取得图片的 URL。pyimgur 中要上传图片会需要给 App ID 来让他知道要上传到哪个帐号,并告诉他要将哪一张图片上传,就可以取得对应的 URL了。
def glucose_graph(client_id, imgpath):
im = pyimgur.Imgur(client_id)
upload_image = im.upload_image(imgpath, title="Uploaded with PyImgur")
return upload_image.link
接着我们就可以在 handle_message
中加上呼叫glucose_graph
来取得图片的 url 去做回传。且因为这次要传送的是 Image message,所以在linebot.models
的地方要多引入ImageSendMessage
@handler.add(MessageEvent)
def handle_message(event):
if (event.message.type == "image"):
SendImage = line_bot_api.get_message_content(event.message.id)
local_save = './Image/' + event.message.id + '.png'
with open(local_save, 'wb') as fd:
for chenk in SendImage.iter_content():
fd.write(chenk)
img_url = glucose_graph(client_id, local_save)
line_bot_api.reply_message(event.reply_token, ImageSendMessage(original_content_url=img_url, preview_image_url=img_url))
flask 本身默认静态档案会放置於 static 中,所以可以一开始就将图片存放在 static 资料夹,传送的时用 网址 + static + 图片名称就可以正常传送。像是我现在测试是用 ngrok 取得网址,因此就会写成下面这样。
ngrok_url = "https://88b3-1-171-241-102.ngrok.io"
@handler.add(MessageEvent)
def handle_message(event):
if (event.message.type == "image"):
SendImage = line_bot_api.get_message_content(event.message.id)
local_save = './static/' + event.message.id + '.png'
with open(local_save, 'wb') as fd:
for chenk in SendImage.iter_content():
fd.write(chenk)
line_bot_api.reply_message(event.reply_token, ImageSendMessage(original_content_url = ngrok_url + "/static/" + event.message.id + ".png", preview_image_url = ngrok_url + "/static/" + event.message.id + ".png"))
现在就可以尝试传送图片给 Line bot,看他能否成功的将图片给回传了。
<<: Day 25 - 影像处理篇 - 用Canvas实作在IE上也可运行的模糊滤镜I - 成为Canvas Ninja ~ 理解2D渲染的精髓
各位朋友好! 这是第一次参加iThome铁人赛~ 本次参加主要目标为完成挑战後,有能力制作个人网站,...
numpy介绍: 一个可操作高维度阵列的套件,可快速的对整个资料做运算。 就不多说了,让我们直接实际...
PHP函数 匿名函数 匿名函数(Anonymous functions),也称作闭包函数(closu...
今天我们将介绍 AWS S3 的架构及其版本控管(Versioning)的概念。 Bucket 的...
第二十天 各位点进来的朋友,你们好阿 小的不才只能做这个系列的文章,但还是希望分享给点进来的朋友,知...