Androidのメモとか

ポキオの日記です。今日も遅延してない。

技術書典に向けてGoogle Drive上のファイル監視をGASからやってみる(後編)

なお、まだ執筆着手してない。

ポキオ Google Drive Google Apps Script enebular Node-RED Slack

自分を追い込むツール

どういうことかというと・・・

relativelayout.hatenablog.com

前回は、GASから技術書典向け原稿を格納してあるGoogle Driveの情報をGASから取得してみました。ただ、本当にやりたいことは「他の人がいかに進捗を出しているか通知することで、自分のモチベーションを向上させる」ことであるわけです。

そこで今回は、

  • 技術書典向け原稿が格納してあるGoogle Drive上のあるフォルダの情報をGASから取得できるようにする
  • それをこっそりWebAPIとして叩けるようにする
  • 定期的にenebular(Node-RED)からそのAPIを叩く
  • 誰かが進捗を出したときに、Slackに通知して自分を鼓舞する

みたいな仕組みを作ってみました。

まずはGAS側の実装

前回のように、DriveAppクラスDriveクラスの両方を使っていきます。

  • DriveAppクラスで特定のフォルダ内のファイルのリストを取得しそれぞれのIDを割り出す
  • DriveクラスでIDを使って「最終更新日」などの情報を取得
  • それらのデータをJSONに整形しWebAPIからGETできるようにする

こんな感じでセキュリティホール情報を取得できる術を作ってあげます。実際の実装はこんな感じ。

function doGet(e){
  return ContentService.createTextOutput(JSON.stringify(getFileList()))
}

function getFileList() {
  var id = 'xxxxx'
  var data = {}
  data.fileList = []
  
  var files = DriveApp.getFolderById(id).getFiles()
  while(files.hasNext()) {
    var file = files.next();
    var fileDetail = Drive.Files.get(file.getId())
    
    var fileInfo = {}
    fileInfo.name = file.getName()
    fileInfo.user = fileDetail.lastModifyingUserName
    fileInfo.date = fileDetail.modifiedDate
    
    data.fileList.push(fileInfo)
  }
  
  Logger.log(JSON.stringify(data))
  return data
}

そして、これをGASのメニューの「ウェブアプリケーションとして導入...」からWebAPI化します。GET時にはdoGet()が呼ばれ、JSONがレスポンスとして返るようになります。

次にenebular側の実装

フローはこんな感じです。

ポキオ Google Drive Google Apps Script enebular Node-RED Slack

  • 先程ののWebAPIを定期的に叩く
  • 最終更新日のタイムスタンプから最近更新されたファイルがあるかないかを判断
  • ある場合は特定のSlackに対してWebhookを投げて通知を行う

Functionノードでは、一応タイムスタンプを見ています。

var message = '';
var criteriaDate = new Date(Date.now() - 1 * 60 * 60 * 1000);

msg.payload.fileList.forEach(file => {
    if(criteriaDate < Date.parse(file.date)){
        message += file.user + 'さんが頑張っています!\n'
    }
});

msg.payload = message;
return msg;

大したことをしていないですが、ここでは1時間以内に更新されたファイルが有るかないかを検知しています。あった場合は、ここで生成されたmessageをSlackに投稿します。

動かしてみた

こんな感じで通知されます。

ポキオ Google Drive Google Apps Script enebular Node-RED Slack

ふふふ・・・みんな頑張ってますね・・・ふふふ・・・。

そろそろ僕も頑張って執筆します・・・。

「Androidのメモとか」は、Amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、Amazonアソシエイト・プログラムの参加者です。

このブログは個人的なメモ書きであったり、考えを書く場所であります。執筆者の所属する団体や企業のコメントや意向とは無関係であります。また、このブログは必ずしも正しいことが書かれているとは限らず、誤字脱字や意図せず誤った情報を載せる場合がありえます。それが原因で読者が不利益を被ったとしても、執筆者はいかなる責任も負いません。ありがとうございます。