用 Python 畅玩 Line bot - 06:Image Message

现在我们可以来尝试能对收到的 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 注册页面

用 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))
static

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,看他能否成功的将图片给回传了。


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章