Google CalendarにRSSを読み込んだスケジュールを、Google App Scriptを実行して、カレンダーの通知時間(15分前)にTwitterに投稿したいです。
公開されているGASのコードを参考にTwitter投稿用に書き換えたのですが、通知時間になっても投稿がされません。
以下のようなコードで実行していますが、どこが間違っているのでしょうか?
Twitter認証は完了しており、通知時間になるとポップアップでデスクトップ通知は正常にされています。
GASは「時間主導型」「分ベース」「1分ごと」でトリガー設定してあり、エラーも一切なく、ログを見ると毎分「完了」となっています。
どうぞよろしくお願いいたします。
// Twitter AppのConsumer Api Key var API_KEY = "xxxxxxxxxxxxxxxx"; var API_SECRET = "yyyyyyyyyyyyyyyyyyy"; /* サービスの設定 */ function getService() { return OAuth1.createService('Twitter') .setAccessTokenUrl('https://api.twitter.com/oauth/access_token') .setRequestTokenUrl('https://api.twitter.com/oauth/request_token') .setAuthorizationUrl('https://api.twitter.com/oauth/authorize') .setConsumerKey(API_KEY) .setConsumerSecret(API_SECRET) .setCallbackFunction('authCallback') .setPropertyStore(PropertiesService.getUserProperties()); } /* コールバック関数 */ function authCallback(request) { var service = getService(); var authorized = service.handleCallback(request); if (authorized) return HtmlService.createHtmlOutput('認証成功'); } /* 認証リセット */ function reset() { getService().reset(); } /* 認証用URL */ function getOAuthURL() { Logger.log(getService().authorize()); } /*------------------------------------* * 毎分カレンダーから1週間先までの予定を見る。 * ↓ * 予定が現在、または通知を登録していた時間だった場合お知らせする *------------------------------------*/ function MinuteCheckCalender() { //カレンダーからイベントの取得 var myCals = CalendarApp.getCalendarById('zzzzz@gmail.com'); //特定のIDのカレンダーを取得 if (myCals != null) { //権限がないなどの時はnullになるので処理をスルーする //カレンダーから現在〜1週間後までのイベントを取得 var startDate = new Date(); startDate = new Date(startDate.getFullYear(), startDate.getMonth(), startDate.getDate(), startDate.getHours(), startDate.getMinutes(), 0); var endDate = new Date(); endDate.setDate(endDate.getDate()+7); var myEvents = myCals.getEvents(startDate, endDate); if (myEvents.length > 0) { //カレンダーに予定がない時はスルーする //お知らせが必要な予定一覧を作成する var strBody = ""; for(var i = 0; i < myEvents.length; i++){ var alertTime = -1; var strStart = myEvents[i].getStartTime(); //イベントの開始時刻 //予定の日付と今日が同じかチェックする if (startDate.getFullYear() == strStart.getFullYear()) { if (startDate.getMonth() == strStart.getMonth()) { if (startDate.getDate() == strStart.getDate()) { //予定の日時と今が同じ時分かチェックする if (startDate.getHours() == strStart.getHours()) { if (startDate.getMinutes() == strStart.getMinutes()) { //何分前の通知かを保持 alertTime = 0; } } } } } var intReminders = myEvents[i].getPopupReminders(); //何分前にお知らせするか if (intReminders != null) { if (intReminders.length > 0) { //予定の日時じゃなくても通知が登録されていれば通知時間にお知らせする if (alertTime == -1) { for (var j = 0; j < intReminders.length; j++) { //通知として登録していた日時を取得 var minute = intReminders[j]; var alertDate = new Date(strStart.getTime()); alertDate.setMinutes(alertDate.getMinutes()-minute); //通知の日時と今日が同じかチェックする if (startDate.getFullYear() == alertDate.getFullYear()) { if (startDate.getMonth() == alertDate.getMonth()) { if (startDate.getDate() == alertDate.getDate()) { //通知の日時と今が同じ時分かチェックする if (startDate.getHours() == alertDate.getHours()) { if (startDate.getMinutes() == alertDate.getMinutes()) { //何分前の通知かを保持 alertTime = minute; break; } } } } } } } } } if (alertTime >= 0) { var strTitle = myEvents[i].getTitle(); //イベントのタイトル var strEnd = myEvents[i].getEndTime(); //イベントの終了時刻 var strLocation = myEvents[i].getLocation(); //放送局 var strEvent = ""; if (strBody != "") { //他の予定の後に追加する場合は空白行を追加する strEvent += "\n\n"; } if (0 < alertTime && alertTime < 60) { strEvent += Utilities.formatDate(strStart,'JST','HH:mm')+"~"+Utilities.formatDate(strEnd,'JST','HH:mm')+" "+strLocation+"\n「"+strTitle+"」"; } if (strEvent != "") { strBody += strEvent; } } } if (strBody != "") {//Twitterに予定一覧を投稿する var service = getService(); var endPointUrl = 'https://api.twitter.com/1.1/statuses/update.json'; var response = service.fetch(endPointUrl, { method: 'post', payload: { status: strBody } } ) } } } }
追記ですが、通知時間を判定する部分、
if (0 < alertTime && alertTime < 60)
を
if (0 == alertTime)
に書き換えたところ、イベント開始時間ちょうどにツイート投稿されました。
つまり、通知時間の記述の仕方が間違っているということでしょうか?
素人考えなのですが、Googleカレンダーの通知時間を15分に設定しているのに、alertTime==0と記述するとイベント開始時刻にツイートされるところに違和感があります。
alertTimeは自分で通知時間設定を変更する度に変化するものだと思っているのですが、そうではないのでしょうか?
回答1件
あなたの回答
tips
プレビュー