使用LINE Notify傳送貼圖與上傳圖像

嗨!我的名字是長谷部良輔,負責LINE Notify的開發工作。

在前面的文章中,我們介紹了如何藉由命令列模式使用LINE Notify發送訊息給LINE。今天我將要介紹LINE Notify API上的二個新功能:傳送貼圖與上傳圖像。

傳送貼圖

在上一篇文章中所展示的範例是使用LINE Notify將Jenkins的建置結果發送到LINE。在那個範例中,使用了傳送一張饅頭人嘲笑的圖片來展示如何通知我們建置失敗了。正是在那段時間我們有了個新想法:「為什麼不讓LINE Notify傳送貼圖與圖像呢?」

我們認為傳送貼圖將會使LINE Notify更加「LINE化」,那就是我們決定開發這個功能的原因。

從命令列傳送貼圖

我們試試看利用curl指令傳送一張貼圖。

$ curl -X POST https://notify-api.line.me/api/notify -H 'Authorization: Bearer
YOUR_PERSONAL_ACCESS_TOKEN' -F 'message=test' -F 'stickerPackageId=1' -F 'stickerId=113'

你現在可以使用這種方式發送貼圖。

你可以在API文件中找到能夠傳送的貼圖列表。基本上它與Messaging API的列表相同。

上傳圖像

使用LINE Notify發送圖像的舊方法非常不方便。你必須先上傳圖像到公開伺服器上,並且指定這個圖像的URL。

由於LINE Notify的首要任務是提供更好更方便的使用方式給用戶,因此我們新增了一項功能,可以幫助用戶更輕鬆地上傳圖像。此功能可以允許用戶直接從私人網絡上的伺服器發送圖像!

你可以閱讀API文件以了解更多詳細資訊,例如支援哪些圖像格式或允許上傳多少檔案等。

從命令列模式上傳圖像

我們來試試使用curl指令傳送一張圖像。圖像會以multipart/form-data格式傳送。

$ curl -X POST https://notify-api.line.me/api/notify 
       -H 'Authorization: Bearer YOUR_PERSONAL_ACCESS_TOKEN' \
       -F 'message=test' \
       -F 'imageFile=@/PATH/TO/IMAGE/cony.jpg'       

你現在可以使用這種方式上傳與發送圖像。在下一個章節中,我們將要來探討一些可能對你有用的案例。

使用樹莓派架設位移偵測攝影機器人

我將向您展示如何使用一個稱為Motion的開源軟體,以及安裝在家庭網路上的「樹莓派」輕鬆架設位移偵測攝影機器人。

需求

  • 硬體
    • 樹莓派3
    • 樹莓派照相機模組v2
  • 作業系統
    • Raspbian Jessie Lite 2016-09-23

你可以使用一個容易獲取的小樹莓派伺服器以及其官方的照相機模組。我使用截至2016年10月25日為止的最新版Raspbian作業系統來開發。

設定

你可以依據你的環境進行一般設定,例如網路設定。想要使用配備Motion的照相機模組,請啟用照相機並且載入核心模組。

# Enable the camera module to use a camera
$ sudo raspi-config
 
# Load the kernel module to run the camera module with V4L2
$ sudo modprobe bcm2835-v4l2
$ echo "bcm2835-v4l2" | sudo tee -a /etc/modules

使用apt-get指令安裝Motion軟體。

$ sudo apt-get install motion
 
# Change the owner to enable writes when Motion is running as a daemon
$ chown motion:motion /var/lib/motion

一旦Motion安裝完成,編輯motion.conf以允許在照相機偵測到任何位移時傳送圖像到LINE Notify。

/etc/motion/motion.conf

# The image specifications of LINE Notify is maximum 1024x1024 pixels.
width 1024
height 768
 
# A series of motion detection events that occur within N seconds 
are considered as a single event. Set the value to around 5 seconds 
so as not to be alerted too late.
event_gap 5
 
# Save the picture which was taken at the nearest midpoint 
within a motion detection event.
output_pictures center
 
# Movies are not saved.
ffmpeg_output_movies off
 
# Send the image to LINE Notify when the image is saved.
on_picture_save curl https://notify-api.line.me/api/notify -X POST -H 'Authorization: 
Bearer YOUR_PERSONAL_ACCESS_TOKEN' -F 'message=!' -F 'imageFile=@%f'

編輯/etc/defaults/motion以讓Motion能在背景執行。

/etc/defaults/motion

start_motion_daemon=yes    # Change "no" to "yes"

執行下列指令以啟動或停止Motion。

$ sudo service motion start          # Start Motion
$ sudo service motion stop           # Stop Motion
$ sudo update-rc.d motion defaults   # Autorun Motion when Raspberry Pi is run

安裝

我把照相機安裝在我冰箱的門上,因為我找不到更好的目標物來實驗。當冰箱的門被打開時,照相機會偵測到,然後會拍攝冰箱內部的照片,並將照片發送到LINE。

以下是我打開冰箱後的幾秒鐘所收到LINE Notify發送給我的照片。

這一共花了我10分鐘進行設定與執行照像機器人。(雖然為了拍攝照片,我整整花了一個小時來清理我的冰箱)

藉由拍照來保護你的Mac電腦防止未經授權的使用

假設某人在未經過你同意的情況下登入你的Mac電腦。如果你的電腦能夠拍下此人的照片並且傳送到LINE,就可以幫助你逮到此人。

與先前所介紹的樹莓派範例不同,你只能使用你的Mac電腦來進行拍照。

設定

首先,你必須在你的Mac電腦上設定login hook。當某人登入時,login hook會觸發並執行預先寫好的script。

sudo defaults write com.apple.loginwindow LoginHook /path/to/login_hook.sh

將下列內容寫到login_hook.sh中。

login_hook.sh

#!/bin/sh
 
at -f "/path/to/notify.sh" now+10sec

這會讓at指令在10秒後執行notify.sh。這麼做的原因是:以下面所述的相機拍攝需要幾秒鐘的工作時間。此外,在某些環境下,at指令可能無法正常運作。在這種情況下,請使用下列指令啟用它。

sudo launchctl load -F /System/Library/LaunchDaemons/com.apple.atrun.plist

將下列內容寫到notify.sh中。

notify.sh

#!/bin/sh
  
ACCESS_TOKEN="YOUR_PERSONAL_ACCESS_TOKEN"
PICTURE_PATH="/PATH/TO/PICTURE/login_camera.jpg"
  
# Take pictures using ImageSnap.
/usr/local/bin/imagesnap -w 2 -q $PICTURE_PATH
curl -X POST https://notify-api.line.me/api/notify -H "Authorization: 
Bearer $ACCESS_TOKEN" -F "message=login" -F "imageFile=@$PICTURE_PATH" 
> /dev/null 2>&1

如果不曾安裝過,請安裝ImageSnap。

brew install imagesnap

結果

當某人登入你的Mac電腦,會被拍照並且傳送給你如下的畫面。(基於保護隱私,刻意加上馬賽克效果)

我測試這個機器人長達一個星期。嗯,你可能已經猜到了,所有我收到的照片都是我自己,因此我只好把它關掉了。

總結

在這篇文章中,我介紹了LINE Notify的新功能 – 傳送貼圖與上傳圖像。請參考API文件以瞭解更多的細節規格。更棒的是:以前僅有PDF格式的API文件,現在已經有HTML格式了。我鼓勵大家試試看!

Related Post