用Line機器人上傳imgur圖片教學(Express,@line/bot-sdk)

閱讀時間約 6 分鐘
用Line機器人上傳imgur圖片教學(Express,@line/bot-sdk)封面
本篇文章雖然是Line機器人操作教學,但如何申請機器人請自己去搜尋一下,創建也自己創一下,有很多篇手把手教學

目標想達到的效果

Line機器人收到圖片後將圖片上傳至imgur雲端空間,回傳使用者圖片url

閱讀前需具備知識

  • Line機器人創建設置
  • Nodejs與express基礎配置
  • @line/bot-sdkSDK的基本認知

步驟說明

收到line機器人訊息取得圖片訊息ID

每個使用者傳送圖片後程式這裡會收到訊息事件 大概是長成這樣
{
"destination": "xxxxxxxxxx",
"events": [
{
"type": "message",
"message": {
"type": "image",
"id": "354718705033693859",
"contentProvider": {
"type": "line"
},
"imageSet": {
"id": "xxxxxxxxxx",
"index": 1,
"total": 2
}
},
"timestamp": xxxxxxxxxx,
"source": {
"type": "user",
"userId": "xxxxxxxxxx"
},
"webhookEventId": "xxxxxxxxxx",
"deliveryContext": {
"isRedelivery": false
},
"replyToken": "xxxxxxxxxx",
"mode": "active"
}
]
}
主要先判斷訊息事件中類型是屬於image後即可確定是使用者傳送圖片
和一般的思路不一樣的地方是Line並不是直接把圖片整張丟過來 而且需要使用Line的API詢問這張圖片是什麼
記下圖片ID即可繼續操作
參考官方文件內容官方文檔

使用Line API取得圖片訊息內容

使用Line官方提供的 getContent API 簡單解釋ㄧ下大概就是圖片、影片、音訊、檔案等等訊息都要透過這個API來取得檔案本體
直接上官方範例程式SDK
const line = require('@line/bot-sdk');

const client = new line.Client({
channelAccessToken: '<channel access token>'
})
client.getMessageContent('<messageId>')
.then((stream) => {
stream.on('data', (chunk) => {
...
});
stream.on('error', (err) => {
// error handling
})
})
回來的資料並不是圖檔本體 而是readable stream的資料格式
操考官方文檔Get content

處理buffer資料

readable stream大概就是資料被切分很多小塊buffer 需要把資料全部搜集好以後再一次轉換成我們需要的格式
查詢過imgur API中上傳圖片的指定格式後發現可以接受3種格式 stream, base64, url
所以預計處理方式是把buffer的資料搜集完成後全部轉換成stream的圖片格式
  • 把buffer搜集起來
const buffers = []
readableBuffer.on('data', chunk => {
buffers.push(chunk)
})
  • 結束時將資料轉換成stream的格式
const { Readable } = require('stream')
readableBuffer.on('end', async () => {
const stream = Readable.from(buffers)
})

使用imgur API上傳

最後再使用api直接上傳,初始化成imgur_client 以後繼續操作
album 是指定相簿名稱,我有事先在imgur空間建立一個自己的相簿取得ID,往後要刪除照片比較方便
const imgur_client = require('../imgur/index')
const data = await imgur_client.upload({
image: stream,
type: 'stream',
album: process.env.IMGUR_ALBUM_ID
})
const link = data.data.link
成功上傳後會返回關於此次上傳的詳細資料 其中包含圖片的url位置
最後可以將url返回Line訊息即可。
6會員
23內容數
沙龍新手
留言0
查看全部
發表第一個留言支持創作者!
技術叢林 的其他內容
對於前端工程師來說github上的gh-page是一個很適合放置自己作品的地方 尤其適合想要練練手感的時候可以方便地展示成果的地方 在過去使用手動commit至gh-page的分支上,或是使用deploy.sh檔來部署,對於我這種懶人來說都是多一個步驟,時常會覺得麻煩 現在能夠透過github ac
對於前端工程師來說github上的gh-page是一個很適合放置自己作品的地方 尤其適合想要練練手感的時候可以方便地展示成果的地方 在過去使用手動commit至gh-page的分支上,或是使用deploy.sh檔來部署,對於我這種懶人來說都是多一個步驟,時常會覺得麻煩 現在能夠透過github ac
你可能也想看
Google News 追蹤
Thumbnail
接下來第二部分我們持續討論美國總統大選如何佈局, 以及選前一週到年底的操作策略建議 分析兩位候選人政策利多/ 利空的板塊和股票
Thumbnail
🤔為什麼團長的能力是死亡筆記本? 🤔為什麼像是死亡筆記本呢? 🤨作者巧思-讓妮翁死亡合理的幾個伏筆
Thumbnail
LINE Pay 作為 LINE 推出的行動支付平臺,在臺灣和其他國家越來越受到歡迎。不僅僅是收款工具,LINE Pay 還能簡化支付流程、提升顧客體驗,並有效整合行銷策略。透過自動好友轉化,商家能擴大顧客關係管理,並降低交易成本,吸引更多年輕消費者。
她一直很在意我消失 但我已經沒有在消失了啊 終於我搞懂她要的是我要在line 上面聊 講什麼都好,不要太久沒出現 她說她跟朋友都這樣聊 貼一張圖給我看 說我這樣她都不想找我聊天了 聽完覺得T果然只是外表man 內心還是女孩子啊 有時她真的比我還要女生喔 我反而比較像披著婆皮的白目
Thumbnail
真的是新發現欸 因為真的很想分開工作和生活 所以一直在想辦法
Thumbnail
職場上的主管難為,面對Z世代總總與自己年代不同的價值觀,究竟該如何面對? 閱讀完整文章,請看 這裡
Thumbnail
基於 LINE 在資源整合的優勢以及看好未來發展,非營利組織現階段使用 LINE OA 有流量紅利,應該積極經營佈局
Thumbnail
一、前言 你是否覺得每天要做的事情很多,不管是公司的事,例如各項專案、會議、老闆交辦事項、客戶要求辦理的事,或者是自己日常生活要做的事,買牛奶啦、要洗衣服啦、打掃房間啦、做假期旅遊規劃啦,理想的狀況是,我們每天都能依排程,一件件處理完畢,然而實際的狀況卻是,每天不論何時都會有別人指示的(另一半、老
Thumbnail
本文教你如何運用終端機指令來操作你的電腦,包括Mac和Windows用法。包括指令如pwd, ls, cd, mkdir, touch, rm, rmdir, cp, mv。另外,還附有相關的影片教學和額外資源教學。
Thumbnail
接下來第二部分我們持續討論美國總統大選如何佈局, 以及選前一週到年底的操作策略建議 分析兩位候選人政策利多/ 利空的板塊和股票
Thumbnail
🤔為什麼團長的能力是死亡筆記本? 🤔為什麼像是死亡筆記本呢? 🤨作者巧思-讓妮翁死亡合理的幾個伏筆
Thumbnail
LINE Pay 作為 LINE 推出的行動支付平臺,在臺灣和其他國家越來越受到歡迎。不僅僅是收款工具,LINE Pay 還能簡化支付流程、提升顧客體驗,並有效整合行銷策略。透過自動好友轉化,商家能擴大顧客關係管理,並降低交易成本,吸引更多年輕消費者。
她一直很在意我消失 但我已經沒有在消失了啊 終於我搞懂她要的是我要在line 上面聊 講什麼都好,不要太久沒出現 她說她跟朋友都這樣聊 貼一張圖給我看 說我這樣她都不想找我聊天了 聽完覺得T果然只是外表man 內心還是女孩子啊 有時她真的比我還要女生喔 我反而比較像披著婆皮的白目
Thumbnail
真的是新發現欸 因為真的很想分開工作和生活 所以一直在想辦法
Thumbnail
職場上的主管難為,面對Z世代總總與自己年代不同的價值觀,究竟該如何面對? 閱讀完整文章,請看 這裡
Thumbnail
基於 LINE 在資源整合的優勢以及看好未來發展,非營利組織現階段使用 LINE OA 有流量紅利,應該積極經營佈局
Thumbnail
一、前言 你是否覺得每天要做的事情很多,不管是公司的事,例如各項專案、會議、老闆交辦事項、客戶要求辦理的事,或者是自己日常生活要做的事,買牛奶啦、要洗衣服啦、打掃房間啦、做假期旅遊規劃啦,理想的狀況是,我們每天都能依排程,一件件處理完畢,然而實際的狀況卻是,每天不論何時都會有別人指示的(另一半、老
Thumbnail
本文教你如何運用終端機指令來操作你的電腦,包括Mac和Windows用法。包括指令如pwd, ls, cd, mkdir, touch, rm, rmdir, cp, mv。另外,還附有相關的影片教學和額外資源教學。