質問編集履歴
1
追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -50,11 +50,11 @@
|
|
50
50
|
|
51
51
|
function RSSread() {
|
52
52
|
|
53
|
-
var LIMIT_TIME = 24*60*60;
|
53
|
+
var LIMIT_TIME = 24*60*60;
|
54
|
-
|
54
|
+
|
55
|
-
var NOW_UNIX_TIME = Math.floor((new Date().getTime())/1000);//現在時刻
|
55
|
+
var NOW_UNIX_TIME = Math.floor((new Date().getTime())/1000);//現在時刻
|
56
|
-
|
56
|
+
|
57
|
-
var URL = "https://wifjkege8uhsogfxto.com/rss";//取得
|
57
|
+
var URL = "https://wifjkege8uhsogfxto.com/rss";//取得RSSのURL
|
58
58
|
|
59
59
|
|
60
60
|
|
@@ -80,7 +80,7 @@
|
|
80
80
|
|
81
81
|
var pubDateUnixTime = Math.floor(pubDate.getTime()/1000);
|
82
82
|
|
83
|
-
//もしitemの配信時刻と現在時刻の差が24時間以内だったら
|
83
|
+
//もしitemの配信時刻と現在時刻の差が24時間以内だったら
|
84
84
|
|
85
85
|
if(NOW_UNIX_TIME-pubDateUnixTime<LIMIT_TIME){
|
86
86
|
|
@@ -92,7 +92,7 @@
|
|
92
92
|
|
93
93
|
});
|
94
94
|
|
95
|
-
|
95
|
+
|
96
96
|
|
97
97
|
var mySheet = SpreadsheetApp.getActiveSheet();
|
98
98
|
|
@@ -100,7 +100,7 @@
|
|
100
100
|
|
101
101
|
//スプレッドシートに書き込み
|
102
102
|
|
103
|
-
var cellnum = 1;
|
103
|
+
var cellnum = 1;
|
104
104
|
|
105
105
|
for(var i = 0; i < items.length; i++) {
|
106
106
|
|
@@ -120,7 +120,7 @@
|
|
120
120
|
|
121
121
|
}
|
122
122
|
|
123
|
-
//D列の「~」をスペースに置換
|
123
|
+
//D列の「~」を半角スペースに置換
|
124
124
|
|
125
125
|
var lastrow = mySheet.getLastRow();
|
126
126
|
|
@@ -134,7 +134,7 @@
|
|
134
134
|
|
135
135
|
|
136
136
|
|
137
|
-
//D列をスペースで分割
|
137
|
+
//D列を半角スペースで分割
|
138
138
|
|
139
139
|
var beforeSplit = mySheet.getRange(i+1,5).setValue(replace);
|
140
140
|
|
@@ -214,6 +214,282 @@
|
|
214
214
|
|
215
215
|
}//end of RSSread
|
216
216
|
|
217
|
+
|
218
|
+
|
219
|
+
|
220
|
+
|
221
|
+
// カレンダーからTweet
|
222
|
+
|
223
|
+
// Twitter AppのConsumer Api Key
|
224
|
+
|
225
|
+
var API_KEY = "yyyyyyyyyyyyyy";
|
226
|
+
|
227
|
+
var API_SECRET = "zzzzzzzzzzzzzzzzz";
|
228
|
+
|
229
|
+
|
230
|
+
|
231
|
+
/* サービスの設定 */
|
232
|
+
|
233
|
+
function getService() {
|
234
|
+
|
235
|
+
return OAuth1.createService('Twitter')
|
236
|
+
|
237
|
+
.setAccessTokenUrl('https://api.twitter.com/oauth/access_token')
|
238
|
+
|
239
|
+
.setRequestTokenUrl('https://api.twitter.com/oauth/request_token')
|
240
|
+
|
241
|
+
.setAuthorizationUrl('https://api.twitter.com/oauth/authorize')
|
242
|
+
|
243
|
+
.setConsumerKey(API_KEY)
|
244
|
+
|
245
|
+
.setConsumerSecret(API_SECRET)
|
246
|
+
|
247
|
+
.setCallbackFunction('authCallback')
|
248
|
+
|
249
|
+
.setPropertyStore(PropertiesService.getUserProperties());
|
250
|
+
|
251
|
+
}
|
252
|
+
|
253
|
+
|
254
|
+
|
255
|
+
/* コールバック関数 */
|
256
|
+
|
257
|
+
function authCallback(request) {
|
258
|
+
|
259
|
+
var service = getService();
|
260
|
+
|
261
|
+
var authorized = service.handleCallback(request);
|
262
|
+
|
263
|
+
if (authorized) return HtmlService.createHtmlOutput('認証成功');
|
264
|
+
|
265
|
+
}
|
266
|
+
|
267
|
+
|
268
|
+
|
269
|
+
/* 認証リセット */
|
270
|
+
|
271
|
+
function reset() {
|
272
|
+
|
273
|
+
getService().reset();
|
274
|
+
|
275
|
+
}
|
276
|
+
|
277
|
+
|
278
|
+
|
279
|
+
/* 認証用URL */
|
280
|
+
|
281
|
+
function getOAuthURL() {
|
282
|
+
|
283
|
+
Logger.log(getService().authorize());
|
284
|
+
|
285
|
+
}
|
286
|
+
|
287
|
+
|
288
|
+
|
289
|
+
|
290
|
+
|
291
|
+
/*------------------------------------*
|
292
|
+
|
293
|
+
* 毎分カレンダーから1週間先までの予定を見る。
|
294
|
+
|
295
|
+
* ↓
|
296
|
+
|
297
|
+
* 予定が現在、または通知を登録していた時間だった場合お知らせする
|
298
|
+
|
299
|
+
*------------------------------------*/
|
300
|
+
|
301
|
+
function MinuteCheckCalender() {
|
302
|
+
|
303
|
+
//カレンダーからイベントの取得
|
304
|
+
|
305
|
+
var myCals = CalendarApp.getCalendarById('xxxxxxx@gmail.com'); //特定のIDのカレンダーを取得
|
306
|
+
|
307
|
+
if (myCals != null) { //権限がないなどの時はnullになるので処理をスルーする
|
308
|
+
|
309
|
+
//カレンダーから現在〜1週間後までのイベントを取得
|
310
|
+
|
311
|
+
var startDate = new Date();
|
312
|
+
|
313
|
+
startDate = new Date(startDate.getFullYear(), startDate.getMonth(), startDate.getDate(), startDate.getHours(), startDate.getMinutes(), 0);
|
314
|
+
|
315
|
+
var endDate = new Date();
|
316
|
+
|
317
|
+
endDate.setDate(endDate.getDate()+7);
|
318
|
+
|
319
|
+
var myEvents = myCals.getEvents(startDate, endDate);
|
320
|
+
|
321
|
+
|
322
|
+
|
323
|
+
if (myEvents.length > 0) { //カレンダーに予定がない時はスルーする
|
324
|
+
|
325
|
+
//お知らせが必要な予定一覧を作成する
|
326
|
+
|
327
|
+
var strBody = "";
|
328
|
+
|
329
|
+
for(var i = 0; i < myEvents.length; i++){
|
330
|
+
|
331
|
+
var alertTime = -1;
|
332
|
+
|
333
|
+
var strStart = myEvents[i].getStartTime(); //イベントの開始時刻
|
334
|
+
|
335
|
+
//予定の日付と今日が同じかチェックする
|
336
|
+
|
337
|
+
if (startDate.getFullYear() == strStart.getFullYear()) {
|
338
|
+
|
339
|
+
if (startDate.getMonth() == strStart.getMonth()) {
|
340
|
+
|
341
|
+
if (startDate.getDate() == strStart.getDate()) {
|
342
|
+
|
343
|
+
//予定の日時と今が同じ時分かチェックする
|
344
|
+
|
345
|
+
if (startDate.getHours() == strStart.getHours()) {
|
346
|
+
|
347
|
+
if (startDate.getMinutes() == strStart.getMinutes()) {
|
348
|
+
|
349
|
+
//何分前の通知かを保持
|
350
|
+
|
351
|
+
alertTime = 0;
|
352
|
+
|
353
|
+
}
|
354
|
+
|
355
|
+
}
|
356
|
+
|
357
|
+
}
|
358
|
+
|
359
|
+
}
|
360
|
+
|
361
|
+
}
|
362
|
+
|
363
|
+
|
364
|
+
|
365
|
+
var intReminders = myEvents[i].getPopupReminders(); //何分前にお知らせするか
|
366
|
+
|
367
|
+
if (intReminders != null) {
|
368
|
+
|
369
|
+
if (intReminders.length > 0) {
|
370
|
+
|
371
|
+
//予定の日時じゃなくても通知が登録されていれば通知時間にお知らせする
|
372
|
+
|
373
|
+
if (alertTime == -1) {
|
374
|
+
|
375
|
+
for (var j = 0; j < intReminders.length; j++) {
|
376
|
+
|
377
|
+
//通知として登録していた日時を取得
|
378
|
+
|
379
|
+
var minute = intReminders[j];
|
380
|
+
|
381
|
+
var alertDate = new Date(strStart.getTime());
|
382
|
+
|
383
|
+
alertDate.setMinutes(alertDate.getMinutes()-minute);
|
384
|
+
|
385
|
+
|
386
|
+
|
387
|
+
//通知の日時と今日が同じかチェックする
|
388
|
+
|
389
|
+
if (startDate.getFullYear() == alertDate.getFullYear()) {
|
390
|
+
|
391
|
+
if (startDate.getMonth() == alertDate.getMonth()) {
|
392
|
+
|
393
|
+
if (startDate.getDate() == alertDate.getDate()) {
|
394
|
+
|
395
|
+
//通知の日時と今が同じ時分かチェックする
|
396
|
+
|
397
|
+
if (startDate.getHours() == alertDate.getHours()) {
|
398
|
+
|
399
|
+
if (startDate.getMinutes() == alertDate.getMinutes()) {
|
400
|
+
|
401
|
+
//何分前の通知かを保持
|
402
|
+
|
403
|
+
alertTime = minute;
|
404
|
+
|
405
|
+
break;
|
406
|
+
|
407
|
+
}
|
408
|
+
|
409
|
+
}
|
410
|
+
|
411
|
+
}
|
412
|
+
|
413
|
+
}
|
414
|
+
|
415
|
+
}
|
416
|
+
|
417
|
+
}
|
418
|
+
|
419
|
+
}
|
420
|
+
|
421
|
+
}
|
422
|
+
|
423
|
+
}
|
424
|
+
|
425
|
+
|
426
|
+
|
427
|
+
if (alertTime > 0) {
|
428
|
+
|
429
|
+
var strTitle = myEvents[i].getTitle(); //イベントのタイトル
|
430
|
+
|
431
|
+
var strLocation = myEvents[i].getLocation(); //場所
|
432
|
+
|
433
|
+
var strDescription = "\n"+myEvents[i].getDescription(); //説明
|
434
|
+
|
435
|
+
var strEvent = "";
|
436
|
+
|
437
|
+
if (myEvents[i].isAllDayEvent()) {//終日イベント
|
438
|
+
|
439
|
+
strEvent += "【本日のお知らせ】\n本日は、"+strTitle+"です。"+strDescription;
|
440
|
+
|
441
|
+
} else {
|
442
|
+
|
443
|
+
var strEnd = myEvents[i].getEndTime(); //イベントの終了時刻
|
444
|
+
|
445
|
+
strEvent += "【まもなく】\n"+Utilities.formatDate(strStart,'JST','HH:mm')+"~"+Utilities.formatDate(strEnd,'JST','HH:mm')+" "+strLocation+"\n"+strTitle+strDescription;
|
446
|
+
|
447
|
+
|
448
|
+
|
449
|
+
}
|
450
|
+
|
451
|
+
if (strEvent != "") {
|
452
|
+
|
453
|
+
strBody += strEvent;
|
454
|
+
|
455
|
+
}
|
456
|
+
|
457
|
+
}
|
458
|
+
|
459
|
+
}
|
460
|
+
|
461
|
+
|
462
|
+
|
463
|
+
|
464
|
+
|
465
|
+
if (strBody != "") {//Twitterに予定を投稿する
|
466
|
+
|
467
|
+
var service = getService();
|
468
|
+
|
469
|
+
var endPointUrl = 'https://api.twitter.com/1.1/statuses/update.json';
|
470
|
+
|
471
|
+
|
472
|
+
|
473
|
+
var response = service.fetch(endPointUrl, {
|
474
|
+
|
475
|
+
method: 'post',
|
476
|
+
|
477
|
+
payload: {
|
478
|
+
|
479
|
+
status: strBody
|
480
|
+
|
481
|
+
}
|
482
|
+
|
483
|
+
}
|
484
|
+
|
485
|
+
)
|
486
|
+
|
487
|
+
}
|
488
|
+
|
489
|
+
}
|
490
|
+
|
491
|
+
}
|
492
|
+
|
493
|
+
}
|
494
|
+
|
217
495
|
```
|
218
|
-
|
219
|
-
↓続きます
|