質問編集履歴

2

2018/10/14 追記 その後下記まで作成してみたのですが、「SlackTeamAccess.prototype.run = function () ...」の箇所がエラー(XX行目のSlackT

2018/10/14 12:34

投稿

Tiktokkkk
Tiktokkkk

スコア10

test CHANGED
File without changes
test CHANGED
@@ -20,12 +20,298 @@
20
20
 
21
21
 
22
22
 
23
-
24
-
25
-
26
-
27
23
  Teamlogは下記を指します。
28
24
 
29
25
 
30
26
 
31
27
  https://api.slack.com/methods/team.accessLogs
28
+
29
+
30
+
31
+ =============================
32
+
33
+
34
+
35
+ ```ここに言語を入力
36
+
37
+ // Configuration: Obtain Slack web API token at https://api.slack.com/web
38
+
39
+ var API_TOKEN = PropertiesService.getScriptProperties().getProperty('slack_api_token');
40
+
41
+ if (!API_TOKEN) {
42
+
43
+ throw 'You should set "slack_api_token" property from [File] > [Project properties] > [Script properties]';
44
+
45
+ }
46
+
47
+ var FOLDER_NAME = 'Slack Team Access Logs';
48
+
49
+ /**** Do not edit below unless you know what you are doing ****/
50
+
51
+ var COL_LOG_USERID = 1;
52
+
53
+ var COL_LOG_USERNAME = 2;
54
+
55
+ var COL_LOG_DATEFIRST = 3;
56
+
57
+ var COL_LOG_DATELAST = 4;
58
+
59
+ var COL_LOG_IP =5;
60
+
61
+ var COL_LOG_USERAGENT = 6;
62
+
63
+ var COL_LOG_ISP = 7;
64
+
65
+ var COL_LOG_RAW_JSON = 8;
66
+
67
+ var COL_MAX = COL_LOG_RAW_JSON;
68
+
69
+ // Slack offers 10,000 history logs for free plan teams. As premium, pagination assumes 1,000(maximum count per page assumes 1,000)
70
+
71
+ var MAX_HISTORY_PAGINATION = 1000;
72
+
73
+ var HISTORY_COUNT_PER_PAGE = 1000;
74
+
75
+ function StoreLogsDelta() {
76
+
77
+ var logger = new SlackTeamAccessLogger();
78
+
79
+ logger.run();
80
+
81
+ }
82
+
83
+ ;
84
+
85
+ var SlackTeamAccessLogger = function SlackTeamAccessLogger(){
86
+
87
+
88
+
89
+ SlackTeamAccessLogger.prototype.requestSlackAPI = function (path, params) {
90
+
91
+ if (params === void 0) { params = {}; }
92
+
93
+ var url = "https://slack.com/api/" + path + "?";
94
+
95
+ var qparams = [("token=" + encodeURIComponent(API_TOKEN))];
96
+
97
+ for (var k in params) {
98
+
99
+ qparams.push(encodeURIComponent(k) + "=" + encodeURIComponent(params[k]));
100
+
101
+ }
102
+
103
+ url += qparams.join('&');
104
+
105
+ Logger.log("==> GET " + url);
106
+
107
+ var resp = UrlFetchApp.fetch(url);
108
+
109
+ var data = JSON.parse(resp.getContentText());
110
+
111
+ if (data.error) {
112
+
113
+ throw "GET " + path + ": " + data.error;
114
+
115
+ }
116
+
117
+ return data;
118
+
119
+ };
120
+
121
+ SlackTeamAccess.prototype.run = function () {
122
+
123
+ var teamaccessResp = this.requestSlackAPI('username.list');
124
+
125
+ for (var _i = 0, _a = teamaccessResp.pages; _i < _a.length; _i++) {
126
+
127
+ var page = _a[_i];
128
+
129
+ this.importTeamAccessDelta(page);
130
+
131
+ }
132
+
133
+ };
134
+
135
+ //use google apps to flow data from slack to spreadsheet
136
+
137
+ SlackTeamAccessLogger.prototype.getLogsFolder = function () {
138
+
139
+ var folder = DriveApp.getRootFolder();
140
+
141
+ var path = [FOLDER_NAME];
142
+
143
+ path.forEach(function (name) {
144
+
145
+ var it = folder.getFoldersByName(name);
146
+
147
+ if (it.hasNext()) {
148
+
149
+ folder = it.next();
150
+
151
+ }
152
+
153
+ else {
154
+
155
+ folder = folder.createFolder(name);
156
+
157
+ }
158
+
159
+ });
160
+
161
+ return folder;
162
+
163
+ };
164
+
165
+ //if case "ta", "d", "readonly", then defined proccess would be applied
166
+
167
+ SlackTeamAccessLogger.prototype.getSheet = function (ta, d, readonly) {
168
+
169
+ if (readonly === void 0) { readonly = false; }
170
+
171
+ var dateString;
172
+
173
+ if (d instanceof Date) {
174
+
175
+ dateString = this.formatDate(d);
176
+
177
+ }
178
+
179
+ else {
180
+
181
+ dateString = '' + d;
182
+
183
+ }
184
+
185
+ var spreadsheet;
186
+
187
+ var sheetByID = {};
188
+
189
+ var spreadsheetName = dateString;
190
+
191
+ var folder = this.getLogsFolder();
192
+
193
+ var it = folder.getFilesByName(spreadsheetName);
194
+
195
+ if (it.hasNext()) {
196
+
197
+ var file = it.next();
198
+
199
+ spreadsheet = SpreadsheetApp.openById(file.getId());
200
+
201
+ }
202
+
203
+ else {
204
+
205
+ if (readonly)
206
+
207
+ return null;
208
+
209
+ spreadsheet = SpreadsheetApp.create(spreadsheetName);
210
+
211
+ folder.addFile(DriveApp.getFileById(spreadsheet.getId()));
212
+
213
+ }
214
+
215
+ var sheets = spreadsheet.getSheets();
216
+
217
+ sheets.forEach(function (s) {
218
+
219
+ var name = s.getName();
220
+
221
+ var m = /^(.+) ((.+))$/.exec(username); // eg. "general (C123456)"
222
+
223
+ if (!m)
224
+
225
+ return;
226
+
227
+ sheetByID[m[2]] = s;
228
+
229
+ });
230
+
231
+ var sheet = sheetByID[ch.id];
232
+
233
+ //if sheet isn't sheet
234
+
235
+ if (!sheet) {
236
+
237
+ if (readonly)
238
+
239
+ return null;
240
+
241
+ sheet = spreadsheet.insertSheet();
242
+
243
+ }
244
+
245
+ var sheetName = ta.username ;
246
+
247
+ //if gotten sheet name isn't eqaul to sheet name, set sheet name
248
+
249
+ if (sheet.getName() !== sheetName) {
250
+
251
+ sheet.setName(sheetName);
252
+
253
+ }
254
+
255
+ return sheet;
256
+
257
+ };
258
+
259
+ SlackTeamAccessLogger.prototype.importTeamAccessDelta = function (ta) {
260
+
261
+ var _this = this;
262
+
263
+ Logger.log("importTeamAccessDelta " + "ta.username ");
264
+
265
+ var now = new Date();
266
+
267
+ var page = '1'; // page=0 does not work
268
+
269
+ var existingSheet = this.getSheet(ta, now, true);
270
+
271
+ if (!existingSheet) {
272
+
273
+ // try previous month
274
+
275
+ now.setMonth(now.getMonth() - 1);
276
+
277
+ existingSheet = this.getSheet(ta, now, true);
278
+
279
+ }
280
+
281
+ if (existingSheet) {
282
+
283
+ var lastRow = existingSheet.getLastRow();
284
+
285
+ try {
286
+
287
+ var data = JSON.parse(existingSheet.getRange(lastRow, COL_LOG_RAW_JSON).getValue());
288
+
289
+ oldest = data.ts;
290
+
291
+ }
292
+
293
+ catch (e) {
294
+
295
+ Logger.log("while trying to parse the latest history item from existing sheet: " + e);
296
+
297
+ }
298
+
299
+ }
300
+
301
+
302
+
303
+ };
304
+
305
+ SlackTeamAccessLogger.prototype.formatDate = function (dt) {
306
+
307
+ return Utilities.formatDate(dt, Session.getScriptTimeZone(), 'yyyy-MM');
308
+
309
+ };
310
+
311
+
312
+
313
+ return SlackTeamAccessLogger;}
314
+
315
+
316
+
317
+ ```

1

2018/10/14 12:34

投稿

Tiktokkkk
Tiktokkkk

スコア10

test CHANGED
File without changes
test CHANGED
@@ -24,4 +24,8 @@
24
24
 
25
25
 
26
26
 
27
- ここにより詳細な情報記載てください
27
+ Teamlogは下記ます
28
+
29
+
30
+
31
+ https://api.slack.com/methods/team.accessLogs