gasを使って特定のGoogleドライブ以下のファイル更新を通知する
概要
特定のGoogleドライブ以下のファイル更新を検知してCWで通知する方法です。
なぜgasなのか(・・?)
何と言ってもスクリプトを実行するサーバーを用意しなくて済むからです。chatworkへの通知も非常にお手軽に実装することが可能です。 Googleドライブとの親和性ももちろん高く、簡単な実装で実現が可能です。
手順
ドライブの「新規作成」->「その他」->「Goggle Apps Script」を選択します。
「リソース」->「ライブラリ」からChatworkClientを導入します。
ライブラリを追加のところに「M6TcEyniCs1xb3sdXFF_FhI-MNonZQ_sT」を入力します。 * https://github.com/cw-shibuya/chatwork-client-gas
いい感じにスクリプトを書きます。
var Token = "xxxxxx"; // chatwork bot var RoomId = xxxxx; // CWの部屋ID //対象とするGoogleDrive親フォルダのID // IDはURLのfolders/以下の英数字 var PARENT_FOLDER_ID = "xxxx"; // 24時間(ミリsec) var SEARCH_TIME = 86400; function myFunction() { var parentFolder = DriveApp.getFolderById(PARENT_FOLDER_ID); var dateobj = new Date(); var nowUnixTime = Math.floor(dateobj.getTime() / 1000) ; var dayAgoUnixTime = nowUnixTime - SEARCH_TIME; var mes = ""; mes += "[info][title](F)本日更新されたドキュメント一覧(F)[/title]"; var allFiles = getAllFilesName(parentFolder); for(var i = 0; i < allFiles.length; i++){ // ファイル更新のタイムスタンプ(unixtime) var fileTimeStamp = Math.floor(Date.parse(allFiles[i].getLastUpdated())/1000); if(fileTimeStamp > dayAgoUnixTime){ mes += "* "; mes += allFiles[i].getName(); mes += "\n"; mes += " * "; mes += allFiles[i].getUrl(); mes += "\n"; } //Logger.log(allFiles[i].getName()); } mes += "[/info]"; // CW通知 var client = ChatWorkClient.factory({token: Token}); client.sendMessage({room_id: RoomId, body: mes}); } function getAllFilesName(parentFolder){ var fileList = []; var files = parentFolder.getFiles(); while(files.hasNext()){ fileList.push(files.next()); } var childFolders = parentFolder.getFolders(); while(childFolders.hasNext()){ var childFolder = childFolders.next(); // 再帰的な呼び出し fileList = fileList.concat(getAllFilesName(childFolder)); } return fileList; }
getFiles()
やgetFolders()
では、そのフォルダに属したファイルやフォルダしか取れないため再帰的に取得を行う必要があります。
トリガーを好きな時間に設定します。 「編集」->「現在のプロジェクトのトリガー」->「新しいトリガーを追加」から設定します。
通知が来ます