這個練習結合了之前的LINE Notify,以及Google Apps Script的Calendar功能
為了避免跟之前的文章推播混淆
申請了新的LINE Notify token
而Google Calendar的部分使用了getEventsForDay(date)
來取得特定日期的所有活動
因為是所有活動的資料,也就是陣列型態的資料,所以透過 For loop的方式逐一取出資料
補充說明註解掉的程式內容
//var twoHoursFromNow = new Date(now.getTime() + 7 * 24 * 60 * 60 * 1000); //日 時 分 秒 毫秒 //var events = cal.getEvents(now, twoHoursFromNow);
這原本是Google的範例,使用了getEvents(startTime, endTime)來取得特定時間範圍內的事件
而變數 twoHoursFromNow則是透過new Date()設定時間範圍
也就是當下時間的變數 now,利用getTime()取得毫秒數,再加上要間隔的時間毫秒數
另外,比較需要注意的是,Google Apps Script的時區不是台北時間
因此必須重新設定時間格式
Utilities.formatDate(new Date(),"GMT+8","yyyy/MM/dd HH:mm")
透過變數now取得當下的台北時間,因為Utilities.formatDate()回傳的是字串型態
於是再透過new Date()將字串轉為日期時間型態
var now = Utilities.formatDate(new Date(),"GMT+8","yyyy/MM/dd HH:mm"); now=new Date(now);
整體的程式分為兩部分
myCalendar()處理Google Calendar的資料,再傳到sendMessage()執行推播功能
因為sendMessage()是直接取用之前的版本
如果不需要傳出圖片的話,在myCalendar()就可以不用傳出pictureURL
當然如果要傳插圖的話,也可以設定傳出的插圖參數
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
function myCalendar() { var cal = CalendarApp.getCalendarById("************************"); var now = Utilities.formatDate(new Date(),"GMT+8","yyyy/MM/dd HH:mm"); now=new Date(now); Logger.log(now); //var twoHoursFromNow = new Date(now.getTime() + 7 * 24 * 60 * 60 * 1000); //日 時 分 秒 毫秒 //var events = cal.getEvents(now, twoHoursFromNow); var events =cal.getEventsForDay(now); //Logger.log(events.length); for (var i = 0; i < events.length; i++) { Logger.log("Event: " + events[i].getTitle() + "\n" +"Event Start Time: " + Utilities.formatDate(events[i].getStartTime(),"GMT+8","yyyy/MM/dd HH:mm") + "\n" +"Event End Time: " + Utilities.formatDate(events[i].getEndTime(),"GMT+8","yyyy/MM/dd HH:mm") + "\n" +"Event Location: " + events[i].getLocation() ); var message = "\n" +"Event: " + events[i].getTitle() + "\n" +"Event Start Time: " + Utilities.formatDate(events[i].getStartTime(),"GMT+8","yyyy/MM/dd HH:mm") + "\n" +"Event End Time: " + Utilities.formatDate(events[i].getEndTime(),"GMT+8","yyyy/MM/dd HH:mm") + "\n" +"Event Location: " + events[i].getLocation(); var pictureURL= "https://i2.kknews.cc/SIG=1hsq8os/ctp-vzntr/r3sn77r39o364q46nps4n57pop734q35.jpg"; sendMessage(message, pictureURL); } } function sendMessage(message, pictureURL){ var Token = "******************************************"; var URL = "https://notify-api.line.me/api/notify"; var payload = { 'message' : message, //'imageThumbnail': pictureURL, //'imageFullsize': pictureURL }; var header = { 'Content-Type':'application/x-www-form-urlencoded', 'Authorization' : 'Bearer ' + Token } var options = { 'method' : 'post', 'payload' : payload, 'headers' : header }; var response = UrlFetchApp.fetch(URL, options); Logger.log(response); } |
因為要達成每日的推播提醒
所以在觸發條件是設定成時間型觸發條件類型的日計時器
這樣就可以在每天的特定時間內觸發程式