Shell

Macにログインした時に、カメラを起動し、LINEに通知する

元ネタ:https://engineering.linecorp.com/ja/blog/using-line-notify-to-send-stickers-and-upload-images/ raspberry-piに関する記事を読み漁っていた所、面白そうな記事を見つけ、試してみたのですが、現在のMacOSバージョンでは、上手く行かなかったため、とりあえず動作するようにしてみました。

ちなみに私が現在使用しているOSバージョンは「Catalina 10.15.5」です。

上手く動作しなかった部分

まず、記事内で上手く動作しなかった部分に関してです。 imagesnapによるファイル名指定が行えない。 Login Hookが動作しない。fa-chevron-circle-right imagesnapによるファイル名指定ができない問題については、現在のOSバージョンとの問題がありそうです。 しかし、撮影は行えるため、なんとか利用できそうです。 Login Hookに関しては、なぜ起動しないのかわからないままです。 また、時間がある時に設定方法を再調査してみようと思います。

LINE notifyでの通知を試してみる

まずは、以下のサイトよりアクセストークンを発行します。 https://notify-bot.line.me/my/ 通知は、Line Notifyというアカウントから届きます。

友達に追加していない場合は、追加しておきましょう。 トークン発行画面では、メッセージの受信方法を**「1:1」か「グループ」**で選ぶことができます。 私の場合は、「MacLogin」というグループを作成し、そこを通知場所に選択しました。 ターミナルを開き、以下のコマンドを実行します。 [アクセストークン]という部分は、先ほど取得した自身のトークンに置き換えて実行してください。

curl -X POST https://notify-api.line.me/api/notify -H "Authorization:Bearer [アクセストークン]" -F "message=test"

LINEに「test」というメッセージが送信されていれば成功です。

imagesnapでの撮影を試してみる

まず、gitからimagesnapを取得します。 brew installでも問題ないです。

cd /tmp
git clone https://github.com/rharder/imagesnap.git

取得できたら/user/local/binに移動させます。

mv /tmp/imagesnap/imagesnap /usr/local/bin

macのインカメで撮影し、デスクトップに画像を生成します。 本来であれば、imagesnapの一番後ろの引数にパスを指定すれば、そこに写真が生成されるようなのですが、上手く動作しないため、一度移動し、撮影を行なっています。

cd ~/Desktop
imagesnap -w 2 -q

撮影ができていれば、成功です。

写真撮影をし、LINEに通知をするシェルを作成する

先ほどまでの動作を組み合わせ、「写真撮影し、LINEに通知するまでの手順」をシェルとして作成します。 しかし、ここでひとつ問題が。 LINE Notifyで画像を送信する際には、その画像のパスが必要ですが、 imagesnapでの画像名指定が行えず、またそこで撮影した画像名を返してもらうことも出来なかったため、ちょっと変わった方法で画像名を取得しようと思います。

vi ~/bin/notify.sh
#!/bin/sh
ACCESS_TOKEN="[アクセストークン]"
cd /Users/[ユーザ名]/Pictures/login
/usr/local/bin/imagesnap -w 2 -q
DIR_PATH="/Users/[ユーザ名]/Pictures/login/*"
DIRS=`find $DIR_PATH -maxdepth 0 -type f -name *.jpg`

for DIR in $DIRS; do
  chmod 777 $DIR
  echo $DIR
  curl -X POST https://notify-api.line.me/api/notify -H "Authorization:Bearer ${ACCESS_TOKEN}" -F "message=login" -F "imageFile=@$DIR"
  sleep 5
  rm $DIR
done

かなりダサいですが、とりあえずこれで動作しています。 動きは、写真格納用のディレクトリを作成しておき、その中に写真を格納。 写真格納用のディレクトリ配下のimgファイルを全て取得し、LINEで送信。 送信後、imgファイルを削除。 というような流れです。 シェルが完成したら、一度実行し、写真がLINEに送信されるか確認します。

ログイン時にシェルが実行されるよう設定

macのLogin Hookが動作しなかったため、システム環境設定より行えるログインオプションを使用します。 まず、ログインオプションで指定するための、commandファイルを作成します。

vi ~/bin/login.command

中身は以下。

/path/to/bin/notify.sh

起動時にlogin.commandファイルが実行されるよう、設定を行います。 システムの環境設定よりユーザとグループを選択。

ユーザとグループの画面より、該当ユーザを選択し、ログイン項目に先ほど作成した「login.command」を追加します。

これで、設定が完了しました。

後日談

悲しいことに?送られてくる写真は全て自分の写真ばかりでした。 また、撮られていることを忘れ、ポカーンとした顔ばかりなので、ただただ恥ずかしいだけです。 何の役にも立ちませんが、面白いと思った方は、試されてみては如何でしょうか。