4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SLOGANAdvent Calendar 2017

Day 22

slackのログをGmailで送る

Last updated at Posted at 2017-12-21

ログ残してるけど、あんま見ないのでgmailでみんなに見える化する

スプレッドシートにslackのログを残す

これでやりました、ありがとうございます。
http://motemen.hatenablog.com/entry/2015/11/gas-slack-log-spreadsheet

gmailで指定のチャンネルのログを流す

スプレッドシートからメール文面を作成し、送信処理を行う

send_mail.gas
// Configuration: Obtain Slack web API token at https://api.slack.com/web
var API_TOKEN = PropertiesService.getScriptProperties().getProperty('slack_api_token');
var FOLDER_NAME = 'Slack Logs';

// メール送信先
var mail_to = [
  "hogehoge@gmail.com",
  "fugafuga@gmail.com"
];

var dObj = new Date();
dObj.setDate(0);

// ここでシートを指定する
var sheetName = "no-name-sheet (C2SDE2D2)";
var body=sheetName+"のaログ\n\n";

var subject = "【slacklog】";
  
function StoreLogsDelta() {
    var logger = new SlackChannelHistoryLogger();
    logger.run();
}
;
var SlackChannelHistoryLogger = (function () {
    function SlackChannelHistoryLogger() {
        this.memberNames = {};
    }
    // slackの情報をとってくる
    SlackChannelHistoryLogger.prototype.requestSlackAPI = function (path, params) {
        if (params === void 0) { params = {}; }
        var url = "https://slack.com/api/" + path + "?";
        var qparams = [("token=" + encodeURIComponent(API_TOKEN))];
        for (var k in params) {
            qparams.push(encodeURIComponent(k) + "=" + encodeURIComponent(params[k]));
        }
        url += qparams.join('&');
        Logger.log("==> GET " + url);
        var resp = UrlFetchApp.fetch(url);
        var data = JSON.parse(resp.getContentText());
        if (data.error) {
            throw "GET " + path + ": " + data.error;
        }
        return data;
    };
    SlackChannelHistoryLogger.prototype.run = function () {
        var _this = this;
        var usersResp = this.requestSlackAPI('users.list');
        usersResp.members.forEach(function (member) {
            _this.memberNames[member.id] = member.name;
        });
        var teamInfoResp = this.requestSlackAPI('team.info');
        this.teamName = teamInfoResp.team.name;
        this.importChannelHistoryDelta();
    };
    // ログのフォルダ関連
    SlackChannelHistoryLogger.prototype.getLogsFolder = function () {
        var folder = DriveApp.getRootFolder();
        var path = [FOLDER_NAME, this.teamName];
        path.forEach(function (name) {
            var it = folder.getFoldersByName(name);
            if (it.hasNext()) {
                folder = it.next();
            }
            else {
                folder = folder.createFolder(name);
            }
        });
        return folder;
    };
    SlackChannelHistoryLogger.prototype.getSheet = function (d, readonly) {
        if (readonly === void 0) { readonly = false; }
        var dateString;
        if (d instanceof Date) {
            dateString = this.formatDate(d);
        }
        else {
            dateString = '' + d;
        }
        //シートの取得
        var spreadsheet;
        var sheetByID = {};
        var spreadsheetName = dateString;
        var folder = this.getLogsFolder();
        var it = folder.getFilesByName(spreadsheetName);
        if (it.hasNext()) {
            var file = it.next();
            spreadsheet = SpreadsheetApp.openById(file.getId());    
            Logger.log(file.getId());
        }

        var sheets = spreadsheet.getSheets();
        
        for ( var i in sheets ){
          if ( sheets[i].getSheetName() == sheetName ) {
            var sheet = sheets[i];
            
            var startrow = 1;
            var startcol = 1;
            var lastrow = sheet.getLastRow();
            var lastcol = sheet.getLastColumn();
            var sheetdata = sheet.getSheetValues(startrow, startcol, lastrow, lastcol);
            // ログの整形
            for (var k=0; k<lastrow; k++){
              for (var j=0; j<3; j++){
                if(j==0){
                  date=sheetdata[k][j];
                  
                  body += '[' + (date.getMonth() + 1) + '/' + date.getDate() + ' ' + date.getHours()+ ':' + date.getMinutes()+':'+ date.getSeconds()+' ] ';
                }
                else{  
                  body+=" | ";
                  body+=(sheetdata[k][j]);
                  body+='\n';
                }
              }
              body+='\n';
            }
          }
        }
     
      MailApp.sendEmail(
        mail_to,
        subject,
        body
      );

    };
    SlackChannelHistoryLogger.prototype.importChannelHistoryDelta = function () {
        var _this = this;
        var now = new Date();
      // 指定した日付のログををとりたいとき用
      var year = now.getYear();
      var month = now.getMonth();
      
      subject += (month+1) +"月分";
        var existingSheet = this.getSheet(now, true);
    };
    SlackChannelHistoryLogger.prototype.formatDate = function (dt) {
        return Utilities.formatDate(dt, Session.getScriptTimeZone(), 'yyyy-MM');
    };
    return SlackChannelHistoryLogger;
})();

感想

もっときれいに整形できるはず
無料枠の限界を感じる

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?