今天參考之前在 PC 上傳送 Line 貼圖的函式, 改寫為可在 MicroPython on ESP8266/ESP32 上執行的函式 line_sticker(), 參考 :
# Python 學習筆記 : Line Notify 訊息推播 (二) : 貼圖
from xrequests import post
def line_sticker(token, message, stickerPackageId, stickerId):
url="https://notify-api.line.me/api/notify"
headers={"Authorization": "Bearer " + token}
payload={"message": message,
"stickerPackageId" : stickerPackageId,
"stickerId": stickerId}
r=post(url, headers=headers, params=payload)
if r is not None and r.status_code == 200:
return "The sticker has been sent."
else:
return "Error! Failed to send the sticker."
其中 post() 是 xrequests 模組的函式, 須在前面匯入此函式. 注意, 此處要使用可傳參數的 xrequests 模組而非 MicroPython 內建的 urequests 模組, 因為它無法傳遞參數.
傳送圖片的函式 line_image() 則是參考下面這篇改寫 :
同樣也是要先匯入 xrequests.post() 函式 :
from xrequests import post
def line_image(token, message, image):
url="https://notify-api.line.me/api/notify"
headers={"Authorization": "Bearer " + token}
payload={"message": message,
"imageFile" : open(image, 'rb')}
r=post(url, headers=headers, params=payload)
if r is not None and r.status_code == 200:
return "The image has been sent."
else:
return "Error! Failed to send the image."
我把上面兩個函式添加到 xtools.py 模組中後測試可送出貼圖 :
>>> import xtools
>>> import config
>>> ip=xtools.connect_wifi_led(config.SSID, config.PASSWORD)
network config: ('192.168.192.86', '255.255.255.0', '192.168.192.92', '192.168.192.92')
>>> token=config.LINE_NOTIFY_TOKEN
>>> message='test'
>>> xtools.line_sticker(token, message, 1, 4)
'The sticker has been sent.'
>>> xtools.line_sticker(token, message, 1, 3)
'The sticker has been sent.'
>>> xtools.line_sticker(token, message, 1, 13)
'The sticker has been sent.'
結果如下 :
接下來測試傳送圖片, 我先將一張 16KB 大小的圖片 kitten.jpg 上傳到開發板根目錄下
然後將之前在 PC 上測試的函式修改為如下的 MicroPython 版函式 line_image(), 參考 :
from xrequests import post
def line_image(token, message, image):
url="https://notify-api.line.me/api/notify"
headers={"Authorization": "Bearer " + token}
payload={"message": message,
"imageFile" : open(image, 'rb')}
r=post(url, headers=headers, params=payload)
if r is not None and r.status_code == 200:
return "The image has been sent."
else:
return "Error! Failed to send the image."
此處同樣是要用到 xrequests.post() 送出 POST 請求. 將其添加到 xtools.py 中測試, 結果只有訊息有傳, 圖片沒傳, 而且很常當機須重啟 (不論是 ESP8266/ESP32 皆如此) :
不知是不是 4MB 記憶體太小所致 (溢位造成重新啟動)? 等有 16MB 的 ESP32 時再來測試, line_image() 就暫且還是放在 xtools.py 裡面吧! 我已更新 GitHub 上的 xtools.py 檔案與 lib.zip :
沒有留言:
張貼留言