teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

追記

2020/03/04 01:11

投稿

kuroryu
kuroryu

スコア7

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;//1日を秒に変換
27
+ var LIMIT_TIME = 24*60*60;
28
- var NOW_UNIX_TIME = Math.floor((new Date().getTime())/1000);//現在時刻のUnixTime
28
+ var NOW_UNIX_TIME = Math.floor((new Date().getTime())/1000);//現在時刻
29
- var URL = "https://wifjkege8uhsogfxto.com/rss";//取得したいRSSのURL
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; //2から開始
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
- ↓続きます