slackのログをGoogle Driveに保存
Slackを無料アカウントで利用すると、
10,000発言しか残らないらしい。
でも、一括でエクスポートするAPIが提供されているので、
こまめに保存しておけばOK。
GoogleDriveに保存してみた。
GASはじめて触ったけど、クーロン実行もぽちぽちするだけでとっても便利でした。
//*********************************************************************/ // Slackのログを一括保存 //------------------------------------------------- // //*********************************************************************/ function excSaveLog() { // 定数 var SLACK_BASE_URL = "https://slack.com/api"; var SLACK_API_TOKEN = "YourSlackAPI Token"; var LOG_SAVE_FOLDER = "YourSave Folder"; var SAVE_PERIOD_HOR = 2; //処理開始 Logger.log("===== START =====") // var CHANNEL_LIST_URL = SLACK_BASE_URL + "/channels.list?token=" + SLACK_API_TOKEN; var CHANNEL_HIST_URL = SLACK_BASE_URL + "/channels.history?token=" + SLACK_API_TOKEN; var datNow = Utilities.formatDate(new Date() , 'Asia/Tokyo' , 'yyyy_MM_dd_HH_mm_ss'); //チャンネルリスト取得 var objChListJson = getJson(CHANNEL_LIST_URL); //保存 saveAsText("ChannelList_" + datNow + ".json" ,objChListJson ,LOG_SAVE_FOLDER); //チャンネルループ for(var idxCh = 0; idxCh < objChListJson.channels.length; idxCh++){ Logger.log(objChListJson.channels[idxCh].name); var objChHistJson = getJson( getChannelHistroyURL(CHANNEL_HIST_URL, objChListJson.channels[idxCh].id, SAVE_PERIOD_HOR) ); //保存 saveAsText( objChListJson.channels[idxCh].name + "_" + getTimePeriodString(SAVE_PERIOD_HOR) + ".json" ,objChHistJson ,LOG_SAVE_FOLDER); } //処理終了 Logger.log("===== END =====") } //*************************************************/ // JSON取得 //-------------------------------------------- // return Json or false //*************************************************/ function getJson(JSON_URL){ var Response = UrlFetchApp.fetch(JSON_URL); var JsonStr = Response.getContentText(); if (JsonStr.length > 0){ return JSON.parse(JsonStr); } else { return false; }; } //**************************************************/ // JsonObjectをテキストファイルに保存 //**************************************************/ function saveAsText(FileName, JsonObject, SaveFolderName){ var txtfile = DriveApp.createFile(FileName, JSON.stringify(JsonObject), MimeType.PLAIN_TEXT); var folders = DriveApp.getFoldersByName(SaveFolderName); var file = DriveApp.getFileById(txtfile.getId()); if(folders.hasNext()){ var folder = folders.next(); var newfile = file.makeCopy(folder); newfile.setName(FileName); DriveApp.removeFile(file); } } //**************************************************/ // 履歴取得URL //**************************************************/ function getChannelHistroyURL(BaseUrl, ChannelId, PeriodHour){ //LatestTime算出 var latTime = Math.floor( new Date().getTime() / 1000 ); latTime = latTime - (3600 * PeriodHour); latTime = Math.round(latTime / (3600 * PeriodHour)) * (3600 * PeriodHour); //OldestTime var OldTime = latTime - (3600 * PeriodHour); var retUrl = BaseUrl; retUrl = retUrl + "&channel=" + ChannelId; retUrl = retUrl + "&latest=" + latTime; retUrl = retUrl + "&oldest=" + OldTime; return retUrl; } //**************************************************/ // 期間表示用文字列取得 //**************************************************/ function getTimePeriodString(PeriodHour){ //LatestTime算出 var latTime = Math.floor( new Date().getTime() / 1000 ); latTime = latTime - (3600 * PeriodHour); latTime = Math.round(latTime / (3600 * PeriodHour)) * (3600 * PeriodHour); //OldestTime var OldTime = latTime - (3600 * PeriodHour); var retStr = ""; retStr = retStr + Utilities.formatDate(new Date(OldTime * 1000) , 'Asia/Tokyo' , 'yyyy_MM_dd_HHmm'); retStr = retStr + "to" retStr = retStr + Utilities.formatDate(new Date(latTime * 1000) , 'Asia/Tokyo' , 'HHmm'); return retStr; }