質問編集履歴
1
追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -24,9 +24,9 @@
|
|
24
24
|
|
25
25
|
```
|
26
26
|
function RSSread() {
|
27
|
-
var LIMIT_TIME = 24*60*60;
|
27
|
+
var LIMIT_TIME = 24*60*60;
|
28
|
-
var NOW_UNIX_TIME = Math.floor((new Date().getTime())/1000);//現在時刻
|
28
|
+
var NOW_UNIX_TIME = Math.floor((new Date().getTime())/1000);//現在時刻
|
29
|
-
var URL = "https://wifjkege8uhsogfxto.com/rss";//取得
|
29
|
+
var URL = "https://wifjkege8uhsogfxto.com/rss";//取得RSSのURL
|
30
30
|
|
31
31
|
var body = "";
|
32
32
|
|
@@ -39,17 +39,17 @@
|
|
39
39
|
items.forEach(function(item){
|
40
40
|
var pubDate = new Date(item.getChild("pubDate").getText());
|
41
41
|
var pubDateUnixTime = Math.floor(pubDate.getTime()/1000);
|
42
|
-
//もしitemの配信時刻と現在時刻の差が24時間以内だったら
|
42
|
+
//もしitemの配信時刻と現在時刻の差が24時間以内だったら
|
43
43
|
if(NOW_UNIX_TIME-pubDateUnixTime<LIMIT_TIME){
|
44
44
|
var title = item.getChild("title").getText();
|
45
45
|
var date = item.getChild("description").getText();
|
46
46
|
}
|
47
47
|
});
|
48
|
-
|
48
|
+
|
49
49
|
var mySheet = SpreadsheetApp.getActiveSheet();
|
50
50
|
|
51
51
|
//スプレッドシートに書き込み
|
52
|
-
var cellnum = 1;
|
52
|
+
var cellnum = 1;
|
53
53
|
for(var i = 0; i < items.length; i++) {
|
54
54
|
var pubDate = new Date(items[i].getChild("pubDate").getText());
|
55
55
|
var title = items[i].getChild("title").getText();
|
@@ -59,14 +59,14 @@
|
|
59
59
|
mySheet.getRange("E" + cellnum).setValue(date);
|
60
60
|
cellnum++;
|
61
61
|
}
|
62
|
-
//D列の「~」をスペースに置換
|
62
|
+
//D列の「~」を半角スペースに置換
|
63
63
|
var lastrow = mySheet.getLastRow();
|
64
64
|
for (var i = 0; i < lastrow; i++){
|
65
65
|
var rangeD = mySheet.getRange(i+1,5).getValue();
|
66
66
|
var replace = rangeD.replace("~"," ");
|
67
67
|
mySheet.getRange(i+1,5).setValue(replace);
|
68
68
|
|
69
|
-
//D列をスペースで分割
|
69
|
+
//D列を半角スペースで分割
|
70
70
|
var beforeSplit = mySheet.getRange(i+1,5).setValue(replace);
|
71
71
|
beforeSplit.splitTextToColumns(" ");
|
72
72
|
|
@@ -106,5 +106,143 @@
|
|
106
106
|
}
|
107
107
|
}
|
108
108
|
}//end of RSSread
|
109
|
+
|
110
|
+
|
111
|
+
// カレンダーからTweet
|
112
|
+
// Twitter AppのConsumer Api Key
|
113
|
+
var API_KEY = "yyyyyyyyyyyyyy";
|
114
|
+
var API_SECRET = "zzzzzzzzzzzzzzzzz";
|
115
|
+
|
116
|
+
/* サービスの設定 */
|
117
|
+
function getService() {
|
118
|
+
return OAuth1.createService('Twitter')
|
119
|
+
.setAccessTokenUrl('https://api.twitter.com/oauth/access_token')
|
120
|
+
.setRequestTokenUrl('https://api.twitter.com/oauth/request_token')
|
121
|
+
.setAuthorizationUrl('https://api.twitter.com/oauth/authorize')
|
122
|
+
.setConsumerKey(API_KEY)
|
123
|
+
.setConsumerSecret(API_SECRET)
|
124
|
+
.setCallbackFunction('authCallback')
|
125
|
+
.setPropertyStore(PropertiesService.getUserProperties());
|
126
|
+
}
|
127
|
+
|
128
|
+
/* コールバック関数 */
|
129
|
+
function authCallback(request) {
|
130
|
+
var service = getService();
|
131
|
+
var authorized = service.handleCallback(request);
|
132
|
+
if (authorized) return HtmlService.createHtmlOutput('認証成功');
|
133
|
+
}
|
134
|
+
|
135
|
+
/* 認証リセット */
|
136
|
+
function reset() {
|
137
|
+
getService().reset();
|
138
|
+
}
|
139
|
+
|
140
|
+
/* 認証用URL */
|
141
|
+
function getOAuthURL() {
|
142
|
+
Logger.log(getService().authorize());
|
143
|
+
}
|
144
|
+
|
145
|
+
|
146
|
+
/*------------------------------------*
|
147
|
+
* 毎分カレンダーから1週間先までの予定を見る。
|
148
|
+
* ↓
|
149
|
+
* 予定が現在、または通知を登録していた時間だった場合お知らせする
|
150
|
+
*------------------------------------*/
|
151
|
+
function MinuteCheckCalender() {
|
152
|
+
//カレンダーからイベントの取得
|
153
|
+
var myCals = CalendarApp.getCalendarById('xxxxxxx@gmail.com'); //特定のIDのカレンダーを取得
|
154
|
+
if (myCals != null) { //権限がないなどの時はnullになるので処理をスルーする
|
155
|
+
//カレンダーから現在〜1週間後までのイベントを取得
|
156
|
+
var startDate = new Date();
|
157
|
+
startDate = new Date(startDate.getFullYear(), startDate.getMonth(), startDate.getDate(), startDate.getHours(), startDate.getMinutes(), 0);
|
158
|
+
var endDate = new Date();
|
159
|
+
endDate.setDate(endDate.getDate()+7);
|
160
|
+
var myEvents = myCals.getEvents(startDate, endDate);
|
161
|
+
|
162
|
+
if (myEvents.length > 0) { //カレンダーに予定がない時はスルーする
|
163
|
+
//お知らせが必要な予定一覧を作成する
|
164
|
+
var strBody = "";
|
165
|
+
for(var i = 0; i < myEvents.length; i++){
|
166
|
+
var alertTime = -1;
|
167
|
+
var strStart = myEvents[i].getStartTime(); //イベントの開始時刻
|
168
|
+
//予定の日付と今日が同じかチェックする
|
169
|
+
if (startDate.getFullYear() == strStart.getFullYear()) {
|
170
|
+
if (startDate.getMonth() == strStart.getMonth()) {
|
171
|
+
if (startDate.getDate() == strStart.getDate()) {
|
172
|
+
//予定の日時と今が同じ時分かチェックする
|
173
|
+
if (startDate.getHours() == strStart.getHours()) {
|
174
|
+
if (startDate.getMinutes() == strStart.getMinutes()) {
|
175
|
+
//何分前の通知かを保持
|
176
|
+
alertTime = 0;
|
177
|
+
}
|
178
|
+
}
|
179
|
+
}
|
180
|
+
}
|
181
|
+
}
|
182
|
+
|
183
|
+
var intReminders = myEvents[i].getPopupReminders(); //何分前にお知らせするか
|
184
|
+
if (intReminders != null) {
|
185
|
+
if (intReminders.length > 0) {
|
186
|
+
//予定の日時じゃなくても通知が登録されていれば通知時間にお知らせする
|
187
|
+
if (alertTime == -1) {
|
188
|
+
for (var j = 0; j < intReminders.length; j++) {
|
189
|
+
//通知として登録していた日時を取得
|
190
|
+
var minute = intReminders[j];
|
191
|
+
var alertDate = new Date(strStart.getTime());
|
192
|
+
alertDate.setMinutes(alertDate.getMinutes()-minute);
|
193
|
+
|
194
|
+
//通知の日時と今日が同じかチェックする
|
195
|
+
if (startDate.getFullYear() == alertDate.getFullYear()) {
|
196
|
+
if (startDate.getMonth() == alertDate.getMonth()) {
|
197
|
+
if (startDate.getDate() == alertDate.getDate()) {
|
198
|
+
//通知の日時と今が同じ時分かチェックする
|
199
|
+
if (startDate.getHours() == alertDate.getHours()) {
|
200
|
+
if (startDate.getMinutes() == alertDate.getMinutes()) {
|
201
|
+
//何分前の通知かを保持
|
202
|
+
alertTime = minute;
|
203
|
+
break;
|
204
|
+
}
|
205
|
+
}
|
206
|
+
}
|
207
|
+
}
|
208
|
+
}
|
209
|
+
}
|
210
|
+
}
|
211
|
+
}
|
212
|
+
}
|
213
|
+
|
214
|
+
if (alertTime > 0) {
|
215
|
+
var strTitle = myEvents[i].getTitle(); //イベントのタイトル
|
216
|
+
var strLocation = myEvents[i].getLocation(); //場所
|
217
|
+
var strDescription = "\n"+myEvents[i].getDescription(); //説明
|
218
|
+
var strEvent = "";
|
219
|
+
if (myEvents[i].isAllDayEvent()) {//終日イベント
|
220
|
+
strEvent += "【本日のお知らせ】\n本日は、"+strTitle+"です。"+strDescription;
|
221
|
+
} else {
|
222
|
+
var strEnd = myEvents[i].getEndTime(); //イベントの終了時刻
|
223
|
+
strEvent += "【まもなく】\n"+Utilities.formatDate(strStart,'JST','HH:mm')+"~"+Utilities.formatDate(strEnd,'JST','HH:mm')+" "+strLocation+"\n"+strTitle+strDescription;
|
224
|
+
|
225
|
+
}
|
226
|
+
if (strEvent != "") {
|
227
|
+
strBody += strEvent;
|
228
|
+
}
|
229
|
+
}
|
230
|
+
}
|
231
|
+
|
232
|
+
|
233
|
+
if (strBody != "") {//Twitterに予定を投稿する
|
234
|
+
var service = getService();
|
235
|
+
var endPointUrl = 'https://api.twitter.com/1.1/statuses/update.json';
|
236
|
+
|
237
|
+
var response = service.fetch(endPointUrl, {
|
238
|
+
method: 'post',
|
239
|
+
payload: {
|
240
|
+
status: strBody
|
241
|
+
}
|
242
|
+
}
|
243
|
+
)
|
244
|
+
}
|
245
|
+
}
|
246
|
+
}
|
247
|
+
}
|
109
|
-
```
|
248
|
+
```
|
110
|
-
↓続きます
|