Gメールの添付画像をGASでGoogle Drive に保存

福井の堆積場にはハイクカムを設置して撮影を始めた雪堆積場のタイムラプスですが、忘備録的にシステムの紹介。
ハイクカムにはSIMを挿すスロットがあり、Hyke Works 経由でメール添付で最新画像が送られてきます。
今回はgmailのアドレスを新しく取得して、ハイクカム側でそのアドレスを指定しています。
APNの設定や、画質の設定、時間間隔の設定などもあります。今回は5分間隔でgmailのアドレスに送られてくるというわけです。
これをどうにかしてローカルにごっそり保存しておいて展示の時に使いたいというのが今回のお題です。

いくつか方法はありそうですが、今回はサーバで動くGoogle Apps Script(GAS) を使ってみました。
Google Drive上に専用のフォルダを準備して、HykeCam からのメールに添付された画像をそのフォルダに保存。
もちろんGASからではローカルには触れることができないので、
展示するときは、Google Drive のデスクトップアプリで同期してしまおうという作戦です。

*FOLDER_ID はgoogleDrive上のフォルダに振られているランダムな(?)文字列です。アクセスすればURLの下にくっついてます。
*SEARCH_TERM は、検索条件ですが、HykeCamからの未読メッセージということにしました。
*フォルダにファイルを作って、最終的には既読にし、削除するとこまでやっています。(容量を気にして)


const FOLDER_ID = ‘xxxxxxxxxxxxxxxxxxxxxxx’;
const SEARCH_TERM = 'from:(HykeCam) is:unread';

function fetchFile(){
  
  const folder = DriveApp.getFolderById(FOLDER_ID);
  const threads = GmailApp.search(SEARCH_TERM, 0, 10);
  const messages = GmailApp.getMessagesForThreads(threads);

  for(const thread of messages){
    for(const message of thread){
      
      const attachments = message.getAttachments();
      for(const attachment of attachments){
        folder.createFile(attachment);
      }
      
      GmailApp.markMessageRead( message );
      GmailApp.moveMessageToTrash( message );
      
    }   
  }
}

というわけでコードは無事に動いていたら、実行するトリガーを1分間隔に設定して準備完了。
明日は月寒の堆積場にカメラ設置に行ってきます。
それが済めば、あとは雪が降って堆積場が稼働するのを待つだけです!