Grow up

生活とプログラミング

スマホにある子供の写真を親のLINEへ定期的に送ってみた

f:id:knkomko:20210321123702p:plain

はじめに

コロナの影響で実家に帰れない為、子供の写真を親のLINEへ送っています。
しかし段々とLINEから送る事を手間に感じてしまい、送り忘れも増えました。

画像共有アプリの利用も考えましたが、アプリのインストール方法から親に説明する必要があるため、新しいアプリの利用は現実的な方法ではありません。

そこで写真を撮るだけで親のLINEに送れないかと考え、取り組むことにしました。
また無料で使えるサービスを組み合わせて実現することを目標にしました。

料金

LINEに1日1枚の画像を送る程度であれば無料の範囲で実現できました。

容量15GBまで無料で使えます。
Google のストレージを追加購入する - パソコン - Google ドライブ ヘルプ

APIも無料で使えます。
Google Drive Apis の利用に関して

  • LINE Messaging API

フリープランを使用していて無料です。
f:id:knkomko:20210321202737p:plain
料金プラン|LINE for Business

サービス間の連携

f:id:knkomko:20210321154153p:plain

①画像を読み込む
子供の写真を撮影するスマホGoogleフォトのアプリをインストールしています。
同期の設定によりスマホ内の写真はGoogleフォトのクラウドストレージに自動でバックアップされるので、Google Apps Scriptでその画像を毎朝9時に読み込みます。

②画像をコピー

Googleアカウントを持たない人にも共有する一般公開のフォルダにGoogleフォトの画像をコピーします。
一般公開とすることでLINEに画像の表示を可能にしています。

③メッセージの送信
Googleフォトにコピーした画像のURLをLINEに送信します。
画像のURLは外部から閲覧できるよう部分的に変更をしています。

④画像の表示
LINEを開くとGoogleドライブに保存していた画像が表示されます。

学び

Googleドライブ
LINEに画像を表示するにはドライブのURLを変更する必要がありました。
ドライブのURLから画像にアクセスできるURLに変更しています。

var downloadURL = buff.getUrl().replace("/file/d/", "/uc?id=").replace("/view?usp=drivesdk", "")

【変更前】
https://drive.google.com/file/d/<ファイルID>/view?usp
【変更後】
https://drive.google.com/uc?id=<ファイルID>

②ダウンロードリンク
画像のURLに "=d" を付加すると画像のダウンロードリンクになります。
LINEで送った画像のダウンロードを可能にする為に必要でした。
f:id:knkomko:20210321193336p:plain

③LINE Messaging API
画像を送るには imageThumbnail と imageFullSize を使用します。
変数downloadURLにGoogleドライブの画像のURLを格納しています。

      var token = ["XXXXXXXXXXXXXXXX"]; //LINEで自動通知をする宛先のトークン。
      var options =
      {
        "method"  : "post",
        "payload" : {"message": "Today's photo.",
                      "imageThumbnail" : downloadURL,
                      "imageFullsize"  : downloadURL,
                    }, 
        "headers" : {"Authorization" : "Bearer "+ token}
      };
    
      UrlFetchApp.fetch("https://notify-api.line.me/api/notify", options); 
結果

僕自身はLINEを使う事が無くなり写真を撮るだけで良くなりました。
なにより我が子の成長を母と兄に見てもらえて嬉しく思っています。

f:id:knkomko:20210321125528p:plain:w350