代表一系列事件 (週期性活動)。
方法
內容詳盡的說明文件
add Email Reminder(minutesBefore)
為活動新增電子郵件提醒。提醒時間必須在活動前至少 5 分鐘,最多 4 週 (40320 分鐘)。
// Gets an event by its ID. For an event series, use getEventSeriesById(iCalId) // instead. // TODO(developer): Replace the string with the event ID that you want to get. const event = CalendarApp.getEventById('abc123456'); // Adds an email notification for 15 minutes before the event. event.addEmailReminder(15);
參數
名稱 | 類型 | 說明 |
---|---|---|
minutes | Integer | 活動開始前的分鐘數 |
回攻員
Calendar
:用於鏈結的 Calendar
擲回
Error
:如果活動有超過 5 個提醒,或時間不在法定範圍內
授權
使用這個方法的程式碼需要具備下列一或多個範圍的授權,或是相關 REST API 中的適當範圍:
-
https://www.googleapis.com/auth/calendar
-
https://www.google.com/calendar/feeds
add Guest(email)
將邀請對象新增到活動中。
// Example 1: Add a guest to one event function addAttendeeToEvent() { // Replace the below values with your own const attendeeEmail = 'user@example.com'; // Email address of the person you need to add const calendarId = 'calendar_123@group.calendar.google.com'; // ID of calendar containing // event const eventId = '123abc'; // ID of event instance const calendar = CalendarApp.getCalendarById(calendarId); if (calendar === null) { // Calendar not found console.log('Calendar not found', calendarId); return; } const event = calendar.getEventById(eventId); if (event === null) { // Event not found console.log('Event not found', eventId); return; } event.addGuest(attendeeEmail); } // Example 2: Add a guest to all events on a calendar within a specified // timeframe function addAttendeeToAllEvents() { // Replace the following values with your own const attendeeEmail = 'user@example.com'; // Email address of the person you need to add const calendarId = 'calendar_123@group.calendar.google.com'; // ID of calendar with the // events const startDate = new Date('YYYY-MM-DD'); // The first date to add the guest to the events const endDate = new Date('YYYY-MM-DD'); // The last date to add the guest to the events const calendar = CalendarApp.getCalendarById(calendarId); if (calendar === null) { // Calendar not found console.log('Calendar not found', calendarId); return; } // Get the events within the specified timeframe const calEvents = calendar.getEvents(startDate, endDate); console.log(calEvents.length); // Checks how many events are found // Loop through all events and add the attendee to each of them for (let i = 0; i < calEvents.length; i++) { const event = calEvents[i]; event.addGuest(attendeeEmail); } }
參數
名稱 | 類型 | 說明 |
---|---|---|
email | String | 邀請對象的電子郵件地址。 |
回攻員
Calendar
:用於鏈結的 Calendar
。
授權
使用這個方法的腳本需要具備下列一或多個範圍的授權,或是相關 REST API 中的適當範圍:
-
https://www.googleapis.com/auth/calendar
-
https://www.google.com/calendar/feeds
add Popup Reminder(minutesBefore)
為事件新增彈出式通知。通知必須在事件發生前至少 5 分鐘,最多 4 週 (40320 分鐘)。
// Gets an event by its ID. For an event series, use getEventSeriesById(iCalId) // instead. // TODO(developer): Replace the string with the event ID that you want to get. const event = CalendarApp.getEventById('abc123456'); // Adds a pop-up notification for 15 minutes before the event. event.addPopupReminder(15);
參數
名稱 | 類型 | 說明 |
---|---|---|
minutes | Integer | 活動開始前的分鐘數 |
回攻員
Calendar
:用於鏈結的 Calendar
授權
使用這個方法的腳本需要具備下列一或多個範圍的授權,或是相關 REST API 中的適當範圍:
-
https://www.googleapis.com/auth/calendar
-
https://www.google.com/calendar/feeds
add Sms Reminder(minutesBefore)
為活動新增 SMS 提醒。提醒時間必須在活動前至少 5 分鐘,最多 4 週 (40320 分鐘)。
參數
名稱 | 類型 | 說明 |
---|---|---|
minutes | Integer | 活動開始前的分鐘數 |
回攻員
Calendar
:用於鏈結的 Calendar
擲回
Error
:如果活動有超過 5 個提醒,或時間不在法定範圍內
授權
使用這個方法的程式碼需要具備下列一或多個範圍的授權,或是相關 REST API 中的適當範圍:
-
https://www.googleapis.com/auth/calendar
-
https://www.google.com/calendar/feeds
anyone Can Add Self()
判斷使用者是否可以將自己新增為日曆活動的邀請對象。
// Gets an event by its ID. For an event series, use getEventSeriesById(iCalId) // instead. // TODO(developer): Replace the string with the event ID that you want to get. const event = CalendarApp.getEventById('abc123456'); // Determines whether people can add themselves as guests to the event and logs // it. console.log(event.anyoneCanAddSelf());
回攻員
Boolean
:如果非邀請對象可以將自己新增至活動,則為 true
;如果不行,則為 false
授權
使用這個方法的程式碼需要具備下列一或多個範圍的授權,或是相關 REST API 中的適當範圍:
-
https://www.googleapis.com/auth/calendar
-
https://www.googleapis.com/auth/calendar.readonly
-
https://www.google.com/calendar/feeds
delete Event Series()
刪除活動系列。
授權
使用這個方法的腳本需要具備下列一或多個範圍的授權,或是相關 REST API 中的適當範圍:
-
https://www.googleapis.com/auth/calendar
-
https://www.google.com/calendar/feeds
delete Tag(key)
從事件中刪除鍵/值代碼。
參數
名稱 | 類型 | 說明 |
---|---|---|
key | String | 標記鍵 |
回攻員
Calendar
:用於鏈結的 Calendar
授權
使用這個方法的腳本需要具備下列一或多個範圍的授權,或是相關 REST API 中的適當範圍:
-
https://www.googleapis.com/auth/calendar
-
https://www.google.com/calendar/feeds
get All Tag Keys()
取得已在事件上設定的標記的所有鍵。
回攻員
String[]
- 字串索引鍵陣列
授權
使用這個方法的程式碼需要具備下列一或多個範圍的授權,或是相關 REST API 中的適當範圍:
-
https://www.googleapis.com/auth/calendar
-
https://www.googleapis.com/auth/calendar.readonly
-
https://www.google.com/calendar/feeds
get Color()
傳回日曆活動的顏色。
// Gets an event by its ID. For an event series, use getEventSeriesById(iCalId) // instead. // TODO(developer): Replace the string with the event ID that you want to get. const event = CalendarApp.getEventById('abc123456'); // Gets the color of the calendar event and logs it. const eventColor = event.getColor(); console.log(eventColor);
回攻員
String
:事件顏色的字串表示法,為 Calendar
值的索引 (1-11)。
授權
使用這個方法的腳本需要具備下列一或多個範圍的授權,或是相關 REST API 中的適當範圍:
-
https://www.googleapis.com/auth/calendar
-
https://www.googleapis.com/auth/calendar.readonly
-
https://www.google.com/calendar/feeds
get Creators()
取得事件的建立者。
// Gets an event by its ID. For an event series, use getEventSeriesById(iCalId) // instead. // TODO(developer): Replace the string with the event ID that you want to get. const event = CalendarApp.getEventById('abc123456'); // Gets a list of the creators of the event and logs it. console.log(event.getCreators());
回攻員
String[]
:活動建立者的電子郵件地址
授權
使用這個方法的腳本需要具備下列一或多個範圍的授權,或是相關 REST API 中的適當範圍:
-
https://www.googleapis.com/auth/calendar
-
https://www.googleapis.com/auth/calendar.readonly
-
https://www.google.com/calendar/feeds
get Date Created()
取得事件建立日期。你必須具備日曆的存取權。
// Opens the calendar by using its ID. // To get the user's default calendar use CalendarApp.getDefault() instead. // TODO(developer): Replace the calendar ID with your own. const calendar = CalendarApp.getCalendarById( 'abc123456@group.calendar.google.com', ); // Gets the first event from the calendar for February 1st, 2023 that takes // place between 8:10 AM and 4:25 PM. For an event series, use // calendar.getEventSeriesById('abc123456@google.com'); and replace the series // ID with your own. const event = calendar.getEvents( new Date('Feb 01, 2023 08:10:00'), new Date('Feb 01, 2023 16:25:00'), )[0]; if (event) { // If an event exists within the given time frame, gets the date that the // event was created and logs it. const eventCreated = event.getDateCreated(); console.log(eventCreated); } else { // If no event exists within the given time frame, logs that information to // the console. console.log('No events exist for the specified range'); }
回攻員
Date
- 建立日期
授權
使用這個方法的腳本需要具備下列一或多個範圍的授權,或是相關 REST API 中的適當範圍:
-
https://www.googleapis.com/auth/calendar
-
https://www.googleapis.com/auth/calendar.readonly
-
https://www.google.com/calendar/feeds
get Description()
取得事件的說明。你必須擁有日曆的編輯權限。
// Opens the calendar by its ID. // To get the user's default calendar use CalendarApp.getDefault() instead. // TODO(developer): Replace the ID with your own. const calendar = CalendarApp.getCalendarById( 'abc123456@group.calendar.google.com', ); // Gets the first event from the calendar for February 4th, 2023 that takes // place between 4:00 PM and 5:00 PM. For an event series, use // calendar.getEventSeriesById('abc123456@google.com'); and replace the series // ID with your own. const event = calendar.getEvents( new Date('Feb 04, 2023 16:00:00'), new Date('Feb 04, 2023 17:00:00'), )[0]; if (event) { // If an event exists within the given time frame, sets the description of the // event. event.setDescription('Important meeting'); // Gets the description of the event and logs it. const description = event.getDescription(); console.log(description); } else { // If no event exists within the given time frame, logs that information to // the console. console.log('No events exist for the specified range'); }
回攻員
String
- 說明
授權
使用這個方法的程式碼需要具備下列一或多個範圍的授權,或是相關 REST API 中的適當範圍:
-
https://www.googleapis.com/auth/calendar
-
https://www.googleapis.com/auth/calendar.readonly
-
https://www.google.com/calendar/feeds
get Email Reminders()
取得活動的所有電子郵件提醒的分鐘值。你必須具備日曆的編輯權限。
// Opens the calendar by its ID. // TODO(developer): Replace the ID with your own. const calendar = CalendarApp.getCalendarById( 'abc123456@group.calendar.google.com', ); // Gets the first event from the calendar for February 4th, 2023 that takes // place between 5:00 PM and 6:00 PM. For an event series, use // calendar.getEventSeriesById('abc123456@google.com'); and replace the series // ID with your own. const event = calendar.getEvents( new Date('Feb 04, 2023 15:00:00'), new Date('Feb 04, 2023 18:00:00'), )[0]; if (event) { // If an event exists within the given time frame, adds email reminders for // the user to be sent at 4 and 7 minutes before the event. event.addEmailReminder(4); event.addEmailReminder(7); // Gets the minute values for all email reminders that are set up for the user // for this event and logs it. const emailReminder = event.getEmailReminders(); console.log(emailReminder); } else { // If no event exists within the given time frame, logs that information to // the console. console.log('No events exist for the specified range'); }
回攻員
Integer[]
:陣列,其中每個值對應到提醒觸發事件前幾分鐘
授權
使用這個方法的程式碼需要具備下列一或多個範圍的授權,或是相關 REST API 中的適當範圍:
-
https://www.googleapis.com/auth/calendar
-
https://www.googleapis.com/auth/calendar.readonly
-
https://www.google.com/calendar/feeds
get Event Type()
取得此事件的 Event
。
// Opens the default calendar and logs all out-of-office events for the current day. const calendar = CalendarApp.getDefaultCalendar(); const events = calendar.getEventsForDay(new Date()); console.log(events.filter(e => e.getEventType() === CalendarApp.EventType.OUT_OF_OFFICE));
回攻員
Event
:事件類型。
授權
使用這個方法的腳本需要具備下列一或多個範圍的授權,或是相關 REST API 中的適當範圍:
-
https://www.googleapis.com/auth/calendar
-
https://www.googleapis.com/auth/calendar.readonly
-
https://www.google.com/calendar/feeds
get Guest By Email(email)
根據電子郵件地址取得邀請對象。
// Opens the calendar by its ID. You must have edit access to the calendar. // TODO(developer): Replace the ID with your own. const calendar = CalendarApp.getCalendarById( 'abc123456@group.calendar.google.com', ); // Gets the first event from the calendar for February 25th, 2023 that takes // place between 5:00 PM and 5:25 PM. For an event series, use // calendar.getEventSeriesById('abc123456@google.com'); and replace the series // ID with your own. const event = calendar.getEvents( new Date('Feb 25,2023 17:00:00'), new Date('Feb 25,2023 17:25:00'), )[0]; // Gets a guest by email address. const guestEmailId = event.getGuestByEmail('alex@example.com'); // If the email address corresponds to an event guest, logs the email address. if (guestEmailId) { console.log(guestEmailId.getEmail()); }
參數
名稱 | 類型 | 說明 |
---|---|---|
email | String | 房客的地址 |
回攻員
Event
:訪客,如果電子郵件地址不對應至訪客,則為空值
授權
使用這個方法的腳本需要具備下列一或多個範圍的授權,或是相關 REST API 中的適當範圍:
-
https://www.googleapis.com/auth/calendar
-
https://www.google.com/calendar/feeds
get Guest List()
取得活動的邀請對象,不包含活動擁有者。
// Opens the calendar by its ID. You must have edit access to the calendar. // TODO(developer): Replace the ID with your own. const calendar = CalendarApp.getCalendarById( 'abc123456@group.calendar.google.com', ); // Gets the first event from the calendar for February 25th, 2023 that takes // place between 5:00 PM and 5:25 PM. For an event series, use // calendar.getEventSeriesById('abc123456@google.com'); and replace the series // ID with your own. const event = calendar.getEvents( new Date('Feb 25,2023 17:00:00'), new Date('Feb 25,2023 17:25:00'), )[0]; // Adds two guests to the event by using their email addresses. event.addGuest('alex@example.com'); event.addGuest('cruz@example.com'); // Gets the guests list for the event. const guestList = event.getGuestList(); // Loops through the list to get all the guests and logs their email addresses. for (const guest of guestList) { console.log(guest.getEmail()); }
回攻員
Event
:房客陣列
授權
使用這個方法的程式碼需要具備下列一或多個範圍的授權,或是相關 REST API 中的適當範圍:
-
https://www.googleapis.com/auth/calendar
-
https://www.googleapis.com/auth/calendar.readonly
-
https://www.google.com/calendar/feeds
get Guest List(includeOwner)
取得活動的邀請對象,可能包括活動擁有者。
// Opens the calendar by its ID. You must have edit access to the calendar. // TODO(developer): Replace the ID with your own. const calendar = CalendarApp.getCalendarById( 'abc123456@group.calendar.google.com', ); // Gets the first event from the calendar for February 25th, 2023 that takes // place between 5:00 PM and 5:25 PM. For an event series, use // calendar.getEventSeriesById('abc123456@google.com'); and replace the series // ID with your own. const event = calendar.getEvents( new Date('Feb 25,2023 17:00:00'), new Date('Feb 25,2023 17:25:00'), )[0]; // Gets the guests list for the event, including the owner of the event. const guestList = event.getGuestList(true); // Loops through the list to get all the guests and logs it. for (const guest of guestList) { console.log(guest.getEmail()); }
參數
名稱 | 類型 | 說明 |
---|---|---|
include | Boolean | 是否要將擁有者加入為訪客 |
回攻員
Event
:房客陣列
授權
使用這個方法的腳本需要具備下列一或多個範圍的授權,或是相關 REST API 中的適當範圍:
-
https://www.googleapis.com/auth/calendar
-
https://www.googleapis.com/auth/calendar.readonly
-
https://www.google.com/calendar/feeds
get Id()
取得活動的專屬 iCalUID。請注意,日曆 v3 API 和日曆進階服務使用的 iCalUID 和事件 id
並不相同,且不能互換使用。這兩者在語意上的差異在於,在週期性活動中,同一個事件的所有事件都有不同的 ids
,但都共用相同的 iCalUID。
// Opens the calendar by its ID. You must have edit access to the calendar. // TODO(developer): Replace the ID with your own. const calendar = CalendarApp.getCalendarById( 'abc123456@group.calendar.google.com', ); // Gets the first event from the calendar for January 5th, 2023 that takes place // between 9:00 AM and 9:25 AM. // For an event series, use calendar.getEventSeriesById('abc123456@google.com'); // and replace the series ID with your own. const event = calendar.getEvents( new Date('Jan 05, 2023 09:00:00'), new Date('Jan 05, 2023 09:25:00'), )[0]; // Gets the ID of the event and logs it. console.log(event.getId());
回攻員
String
:活動的 iCalUID
授權
使用這個方法的腳本需要具備下列一或多個範圍的授權,或是相關 REST API 中的適當範圍:
-
https://www.googleapis.com/auth/calendar
-
https://www.googleapis.com/auth/calendar.readonly
-
https://www.google.com/calendar/feeds
get Last Updated()
取得事件上次更新的日期。
// Opens the calendar by its ID. You must have view access to the calendar. // TODO(developer): Replace the ID with your own. const calendar = CalendarApp.getCalendarById( 'abc123456@group.calendar.google.com', ); // Gets the first event from the calendar for February 1st, 2023 that takes // place between 4:00 PM and 5:00 PM. For an event series, use // calendar.getEventSeriesById('abc123456@google.com'); and replace the series // ID with your own. const event = calendar.getEvents( new Date('Feb 01, 2023 16:00:00'), new Date('Feb 01, 2023 17:00:00'), )[0]; // Gets the date the event was last updated and logs it. const eventUpdatedDate = event.getLastUpdated(); console.log(eventUpdatedDate);
回攻員
Date
- 上次更新日期
授權
使用這個方法的腳本需要具備下列一或多個範圍的授權,或是相關 REST API 中的適當範圍:
-
https://www.googleapis.com/auth/calendar
-
https://www.googleapis.com/auth/calendar.readonly
-
https://www.google.com/calendar/feeds
get Location()
取得事件的位置。
// Opens the calendar by its ID. You must have edit access to the calendar. // TODO(developer): Replace the ID with your own. const calendar = CalendarApp.getCalendarById( 'abc123456@group.calendar.google.com', ); // Gets the first event from the calendar for February 1st, 2023 that takes // place between 4:10 PM and 4:25 PM. For an event series, use // calendar.getEventSeriesById('abc123456@google.com'); and replace the series // ID with your own. const event = calendar.getEvents( new Date('Feb 01, 2023 16:10:00'), new Date('Feb 01, 2023 16:25:00'), )[0]; if (event) { // If an event exists within the given time frame, sets the location of the // event to Mumbai. event.setLocation('Mumbai'); // Gets the location of the event and logs it. const eventLocation = event.getLocation(); console.log(eventLocation); } else { // If no event exists within the given time frame, logs that information to // the console. console.log('No events exist for the specified range'); }
回攻員
String
:事件位置
授權
使用這個方法的腳本需要具備下列一或多個範圍的授權,或是相關 REST API 中的適當範圍:
-
https://www.googleapis.com/auth/calendar
-
https://www.googleapis.com/auth/calendar.readonly
-
https://www.google.com/calendar/feeds
get My Status()
取得有效使用者的事件狀態 (例如出席或受邀)。如果有效使用者是事件的擁有者,則一律會傳回 Guest
。
// Opens the calendar by its ID. // TODO(developer): Replace the ID with your own. const calendar = CalendarApp.getCalendarById( 'abc123456@group.calendar.google.', ); // Gets the first event from the calendar for February 1st, 2023 that takes // place between 4:10 PM and 4:25 PM. For an event series, use // calendar.getEventSeriesById('abc123456@google.com'); and replace the series // ID with your own. const event = calendar.getEvents( new Date('Feb 01, 2023 16:10:00'), new Date('Feb 01, 2023 16:25:00'), )[0]; if (event) { // If an event exists within the given time frame, gets the event status of // the effective user and logs it. const myStatus = event.getMyStatus(); console.log(myStatus.toString()); } else { // If no event exists within the given time frame, logs that information to // the console. console.log('No events exist for the specified range'); }
回攻員
Guest
:狀態
授權
使用這個方法的程式碼需要具備下列一或多個範圍的授權,或是相關 REST API 中的適當範圍:
-
https://www.googleapis.com/auth/calendar
-
https://www.googleapis.com/auth/calendar.readonly
-
https://www.google.com/calendar/feeds
get Original Calendar Id()
取得當初建立這項活動時所用的日曆 ID。
// Opens the calendar by its ID. You must have edit access to the calendar. // TODO(developer): Replace the ID with your own. const calendar = CalendarApp.getCalendarById( 'abc123456@group.calendar.google.com', ); // Gets the first event from the calendar for February 25th, 2023 that takes // place between 4:00 PM and 4:25 PM. For an event series, use // calendar.getEventSeriesById('abc123456@google.com'); and replace the series // ID with your own. const event = calendar.getEvents( new Date('Feb 25,2023 16:00:00'), new Date('Feb 25,2023 16:25:00'), )[0]; if (event) { // If an event exists within the given time frame, gets the ID of the calendar // where the event was originally created and logs it. const calendarId = event.getOriginalCalendarId(); console.log(calendarId); } else { // If no event exists within the given time frame, logs that information to // the console. console.log('No events exist for the specified range'); }
回攻員
String
:原始日曆的 ID
授權
使用這個方法的腳本需要具備下列一或多個範圍的授權,或是相關 REST API 中的適當範圍:
-
https://www.googleapis.com/auth/calendar
-
https://www.googleapis.com/auth/calendar.readonly
-
https://www.google.com/calendar/feeds
get Popup Reminders()
取得事件所有彈出式提醒的分鐘值。
// Opens the calendar by its ID. You must have edit access to the calendar. // TODO(developer): Replace the ID with your own. const calendar = CalendarApp.getCalendarById( 'abc123456@group.calendar.google.com', ); // Gets the first event from the calendar for February 4th, 2023 that takes // place between 5:05 PM and 5:35 PM. For an event series, use // calendar.getEventSeriesById('abc123456@google.com'); and replace the series // ID with your own. const event = calendar.getEvents( new Date('Feb 04, 2023 17:05:00'), new Date('Feb 04, 2023 17:35:00'), )[0]; if (event) { // If an event exists within the given time frame, adds two pop-up reminders // to the event. The first reminder pops up 5 minutes before the event starts // and the second reminder pops up 3 minutes before the event starts. event.addPopupReminder(3); event.addPopupReminder(5); // Gets the minute values for all pop-up reminders for the event and logs it. const popUpReminder = event.getPopupReminders(); console.log(popUpReminder); } else { // If no event exists within the given time frame, logs that information to // the console. console.log('No events exist for the specified range'); }
回攻員
Integer[]
:陣列,其中每個值對應到提醒觸發事件前幾分鐘
授權
使用這個方法的腳本需要具備下列一或多個範圍的授權,或是相關 REST API 中的適當範圍:
-
https://www.googleapis.com/auth/calendar
-
https://www.googleapis.com/auth/calendar.readonly
-
https://www.google.com/calendar/feeds
get Sms Reminders()
取得活動的所有簡訊提醒的分鐘值。
回攻員
Integer[]
:陣列,其中每個值對應到提醒觸發事件前幾分鐘
授權
使用這個方法的腳本需要具備下列一或多個範圍的授權,或是相關 REST API 中的適當範圍:
-
https://www.googleapis.com/auth/calendar
-
https://www.googleapis.com/auth/calendar.readonly
-
https://www.google.com/calendar/feeds
get Tag(key)
取得事件的代碼值。
參數
名稱 | 類型 | 說明 |
---|---|---|
key | String | 鍵 |
回攻員
String
:標記值
授權
使用這個方法的腳本需要具備下列一或多個範圍的授權,或是相關 REST API 中的適當範圍:
-
https://www.googleapis.com/auth/calendar
-
https://www.googleapis.com/auth/calendar.readonly
-
https://www.google.com/calendar/feeds
get Title()
取得事件的標題。
// Opens the calendar by its ID. You must have edit access to the calendar. // TODO(developer): Replace the ID with your own. const calendar = CalendarApp.getCalendarById( 'abc123456@group.calendar.google.com', ); // Gets the first event from the calendar for January 31st, 2023 that takes // place between 9:05 AM and 9:15 AM. For an event series, use // calendar.getEventSeriesById('abc123456@google.com'); and replace the series // ID with your own. const event = calendar.getEvents( new Date('Jan 31, 2023 09:05:00'), new Date('Jan 31, 2023 09:15:00'), )[0]; if (event) { // If an event exists within the given time frame, logs the title of the // event. console.log(event.getTitle()); } else { // If no event exists within the given time frame, logs that information to // the console. console.log('No events exist for the specified range'); }
回攻員
String
- 標題
授權
使用這個方法的腳本需要具備下列一或多個範圍的授權,或是相關 REST API 中的適當範圍:
-
https://www.googleapis.com/auth/calendar
-
https://www.googleapis.com/auth/calendar.readonly
-
https://www.google.com/calendar/feeds
get Transparency()
取得事件的透明度。使用這個方法,判斷活動是否為 TRANSPARENT
,也就是在該時間顯示為「有空」;或是 OPAQUE
,也就是在該時間顯示為「忙碌」。
// Gets the first event from the default calendar for today. const today = new Date(); const event = CalendarApp.getDefaultCalendar().getEventsForDay(today)[0]; // Gets the event's transparency and logs it. const transparency = event.getTransparency(); Logger.log(transparency);
回攻員
Event
:透明度值。
授權
使用這個方法的腳本需要具備下列一或多個範圍的授權,或是相關 REST API 中的適當範圍:
-
https://www.googleapis.com/auth/calendar
-
https://www.googleapis.com/auth/calendar.readonly
-
https://www.google.com/calendar/feeds
get Visibility()
取得事件的顯示狀態。
// Opens the calendar by its ID. You must have edit access to the calendar. // TODO(developer): Replace the ID with your own. const calendar = CalendarApp.getCalendarById( 'abc123456@group.calendar.google.com', ); // Gets the first event from the calendar for February 1st, 2023 that takes // place between 4:10 PM and 4:25 PM. For an event series, use // calendar.getEventSeriesById('abc123456@google.com'); and replace the series // ID with your own. const event = calendar.getEvents( new Date('Feb 01, 2023 16:10:00'), new Date('Feb 01, 2023 16:25:00'), )[0]; if (event) { // If an event exists within the given time frame, gets the visibility of the // event and logs it. const eventVisibility = event.getVisibility(); console.log(eventVisibility.toString()); } else { // If no event exists within the given time frame, logs that information to // the console. console.log('No events exist for the specified range'); }
回攻員
Visibility
:可見度值
授權
使用這個方法的腳本需要具備下列一或多個範圍的授權,或是相關 REST API 中的適當範圍:
-
https://www.googleapis.com/auth/calendar
-
https://www.googleapis.com/auth/calendar.readonly
-
https://www.google.com/calendar/feeds
guests Can Invite Others()
判斷邀請對象是否可以邀請其他人。
// Opens the calendar by its ID. You must have view access to the calendar. // TODO(developer): Replace the ID with your own. const calendar = CalendarApp.getCalendarById( 'abc123456@group.calendar.google.com', ); // Gets the first event from the calendar for February 1st, 2023 that takes // place between 9:35 AM and 9:40 AM. For an event series, use // calendar.getEventSeriesById('abc123456@google.com'); and replace the series // ID with your own. const event = calendar.getEvents( new Date('Feb 01, 2023 09:35:00'), new Date('Feb 01, 2023 09:40:00'), )[0]; if (event) { // If an event exists within the given time frame, determines whether guests // can invite other guests and logs it. console.log(event.guestsCanInviteOthers()); } else { // If no event exists within the given time frame, logs that information to // the console. console.log('No events exist for the specified range'); }
回攻員
Boolean
:如果邀請對象可以邀請其他使用者,則為 true
;如果不可以,則為 false
授權
使用這個方法的腳本需要具備下列一或多個範圍的授權,或是相關 REST API 中的適當範圍:
-
https://www.googleapis.com/auth/calendar
-
https://www.googleapis.com/auth/calendar.readonly
-
https://www.google.com/calendar/feeds
guests Can Modify()
決定邀請對象是否可以修改活動。
// Opens the calendar by its ID. You must have edit access to the calendar. // TODO(developer): Replace the ID with your own. const calendar = CalendarApp.getCalendarById( 'abc123456@group.calendar.google.com', ); // Gets the first event from the calendar for February 1st, 2023 that takes // place between 9:35 AM and 9:40 AM. For an event series, use // calendar.getEventSeriesById('abc123456@google.com'); and replace the series // ID with your own. const event = calendar.getEvents( new Date('Feb 01, 2023 09:35:00'), new Date('Feb 01, 2023 09:40:00'), )[0]; if (event) { // If an event exists within the given time frame, sets the event so that // guests can't modify it. event.setGuestsCanModify(false); // Determines whether guests can modify the event and logs it. console.log(event.guestsCanModify()); } else { // If no event exists within the given time frame, logs that information to // the console. console.log('No events exist for the specified range'); }
回攻員
Boolean
:如果邀請對象可以修改活動,則為 true
;如果不行,則為 false
授權
使用這個方法的程式碼需要具備下列一或多個範圍的授權,或是相關 REST API 中的適當範圍:
-
https://www.googleapis.com/auth/calendar
-
https://www.googleapis.com/auth/calendar.readonly
-
https://www.google.com/calendar/feeds
guests Can See Guests()
決定房客能否看到其他房客。
// Opens the calendar by its ID. You must have view access to the calendar. // TODO(developer): Replace the ID with your own. const calendar = CalendarApp.getCalendarById( 'abc123456@group.calendar.google.com', ); // Gets the first event from the calendar for February 1st, 2023 that takes // place between 9:35 AM and 9:40 AM. For an event series, use // calendar.getEventSeriesById('abc123456@google.com'); and replace the series // ID with your own. const event = calendar.getEvents( new Date('Feb 01, 2023 09:35:00'), new Date('Feb 01, 2023 09:40:00'), )[0]; if (event) { // If an event exists within the given time frame, determines whether guests // can see other guests and logs it. console.log(event.guestsCanSeeGuests()); } else { // If no event exists within the given time frame, logs that information to // the console. console.log('No events exist for the specified range'); }
回攻員
Boolean
:如果邀請對象可以看到其他邀請對象,則為 true
;如果不行,則為 false
授權
使用這個方法的程式碼需要具備下列一或多個範圍的授權,或是相關 REST API 中的適當範圍:
-
https://www.googleapis.com/auth/calendar
-
https://www.googleapis.com/auth/calendar.readonly
-
https://www.google.com/calendar/feeds
is Owned By Me()
判斷您是否為活動擁有者。
// Opens the calendar by its ID. You must have view access to the calendar. // TODO(developer): Replace the ID with your own. const calendar = CalendarApp.getCalendarById( 'abc123456@group.calendar.google.com', ); // Gets the first event from the calendar for January 31st, 2023 that takes // place between 9:05 AM and 9:15 AM. For an event series, use // calendar.getEventSeriesById('abc123456@google.com'); and replace the series // ID with your own. const event = calendar.getEvents( new Date('Jan 31, 2023 09:05:00'), new Date('Jan 31, 2023 09:15:00'), )[0]; if (event) { // If an event exists within the given time frame, determines whether you're // the owner of the event and logs it. console.log(event.isOwnedByMe()); } else { // If no event exists within the given time frame, logs that information to // the console. console.log('No events exist for the specified range'); }
回攻員
Boolean
:如果事件屬於有效使用者,則為 true
;如果不是,則為 false
授權
使用這個方法的腳本需要具備下列一或多個範圍的授權,或是相關 REST API 中的適當範圍:
-
https://www.googleapis.com/auth/calendar
-
https://www.googleapis.com/auth/calendar.readonly
-
https://www.google.com/calendar/feeds
remove All Reminders()
從活動中移除所有提醒。
// Opens the calendar by its ID. You must have edit access to the calendar // TODO(developer): Replace the ID with your own. const calendar = CalendarApp.getCalendarById( 'abc123456@group.calendar.google.com', ); // Gets the first event from the calendar for February 1st, 2023 that takes // place between 4:10 PM and 4:25 PM. For an event series, use // calendar.getEventSeriesById('abc123456@google.com'); and replace the series // ID with your own. const event = calendar.getEvents( new Date('Feb 1,2023 16:10:00'), new Date('Feb 1,2023 16:25:00'), )[0]; if (event) { // If an event exists within the given time frame, removes all reminders from // the event. event.removeAllReminders(); } else { // If no event exists within the given time frame, logs that information to // the console. console.log('No events exist for the specified range'); }
回攻員
Calendar
:用於鏈結的 Calendar
授權
使用這個方法的程式碼需要具備下列一或多個範圍的授權,或是相關 REST API 中的適當範圍:
-
https://www.googleapis.com/auth/calendar
-
https://www.google.com/calendar/feeds
remove Guest(email)
將邀請對象從活動中移除。
// Example 1: Remove a guest from one event function removeGuestFromEvent() { // Replace the below values with your own const attendeeEmail = 'user@example.com'; // Email address of the person you need to remove const calendarId = 'calendar_123@group.calendar.google.com'; // ID of calendar containing // event const eventId = '123abc'; // ID of event instance const calendar = CalendarApp.getCalendarById(calendarId); if (calendar === null) { // Calendar not found console.log('Calendar not found', calendarId); return; } const event = calendar.getEventById(eventId); if (event === null) { // Event not found console.log('Event not found', eventId); return; } event.removeGuest(attendeeEmail); } // Example 2: Remove a guest from all events on a calendar within a specified // timeframe function removeGuestFromAllEvents() { // Replace the following values with your own const attendeeEmail = 'user@example.com'; // Email address of the person you need to remove const calendarId = 'calendar_123@group.calendar.google.com'; // ID of calendar with the // events const startDate = new Date( 'YYYY-MM-DD'); // The first date to remove the guest from the events const endDate = new Date( 'YYYY-MM-DD'); // The last date to remove the attendee from the events const calendar = CalendarApp.getCalendarById(calendarId); if (calendar === null) { // Calendar not found console.log('Calendar not found', calendarId); return; } // Get the events within the specified timeframe const calEvents = calendar.getEvents(startDate, endDate); console.log(calEvents.length); // Checks how many events are found // Loop through all events and remove the attendee from each of them for (let i = 0; i < calEvents.length; i++) { const event = calEvents[i]; event.removeGuest(attendeeEmail); } }
參數
名稱 | 類型 | 說明 |
---|---|---|
email | String | 訪客的電子郵件地址 |
回攻員
Calendar
:用於鏈結的 Calendar
授權
使用這個方法的腳本需要具備下列一或多個範圍的授權,或是相關 REST API 中的適當範圍:
-
https://www.googleapis.com/auth/calendar
-
https://www.google.com/calendar/feeds
reset Reminders To Default()
使用日曆的預設設定重設提醒事項。
// Opens the calendar by its ID. You must have edit access to the calendar. // TODO(developer): Replace the ID with your own. const calendar = CalendarApp.getCalendarById( 'abc123456@group.calendar.google.com', ); // Gets the first event from the calendar for February 1st, 2023 that takes // place between 4:10 PM and 4:25 PM. For an event series, use // calendar.getEventSeriesById('abc123456@google.com'); and replace the series // ID with your own. const event = calendar.getEvents( new Date('Feb 1, 2023 16:10:00'), new Date('Feb 1, 2023 16:25:00'), )[0]; if (event) { // If an event exists within the given time frame, resets the reminders using // the calendar's default settings. event.resetRemindersToDefault(); } else { // If no event exists within the given time frame, logs that information to // the console. console.log('No events exist for the specified range'); }
回攻員
Calendar
:用於鏈結的 Calendar
授權
使用這個方法的程式碼需要具備下列一或多個範圍的授權,或是相關 REST API 中的適當範圍:
-
https://www.googleapis.com/auth/calendar
-
https://www.google.com/calendar/feeds
set Anyone Can Add Self(anyoneCanAddSelf)
設定非邀請對象是否可以將自己新增至活動。
// Opens the calendar by its ID. You must have edit access to the calendar. // TODO(developer): Replace the ID with your own. const calendar = CalendarApp.getCalendarById( 'abc123456@group.calendar.google.com', ); // Gets the first event from the calendar for February 15th, 2023 that takes // place between 3:30 PM and 4:30 PM. For an event series, use // calendar.getEventSeriesById('abc123456@google.com'); and replace the series // ID with your own. const event = calendar.getEvents( new Date('Feb 15, 2023 15:30:00'), new Date('Feb 15, 2023 16:30:00'), )[0]; if (event) { // If an event exists within the given time frame, sets the event so that // non-guests can't add themselves to the event. event.setAnyoneCanAddSelf(false); } else { // If no event exists within the given time frame, logs that information to // the console. console.log('No events exist for the specified range'); }
參數
名稱 | 類型 | 說明 |
---|---|---|
anyone | Boolean | 是否允許任何人自行邀請 |
回攻員
Calendar
:用於鏈結的 Calendar
授權
使用這個方法的腳本需要具備下列一或多個範圍的授權,或是相關 REST API 中的適當範圍:
-
https://www.googleapis.com/auth/calendar
-
https://www.google.com/calendar/feeds
set Color(color)
設定日曆活動的顏色。
// Opens the calendar by its ID. You must have edit access to the calendar. // TODO(developer): Replace the ID with your own. const calendar = CalendarApp.getCalendarById( 'abc123456@group.calendar.google.com', ); // Gets the first event from the calendar for February 1st, 2023 that takes // place between 4:10 PM and 4:25 PM. For an event series, use // calendar.getEventSeriesById('abc123456@google.com'); and replace the series // ID with your own. const event = calendar.getEvents( new Date('Feb 01, 2023 16:10:00'), new Date('Feb 01, 2023 16:25:00'), )[0]; if (event) { // If an event exists within the given time frame, sets the color of the // calendar event to green. event.setColor(CalendarApp.EventColor.GREEN); } else { // If no event exists within the given time frame, logs that information to // the console. console.log('No events exist for the specified range'); }
參數
名稱 | 類型 | 說明 |
---|---|---|
color | String | 整數色彩索引 (字串) 或 Calendar 的值。 |
回攻員
Calendar
:這個日曆活動,用於鏈結。
授權
使用這個方法的腳本需要具備下列一或多個範圍的授權,或是相關 REST API 中的適當範圍:
-
https://www.googleapis.com/auth/calendar
-
https://www.google.com/calendar/feeds
set Description(description)
設定事件的說明。
// Opens the calendar by its ID. You must have edit access to the calendar. // TODO(developer): Replace the ID with your own. const calendar = CalendarApp.getCalendarById( 'abc123456@group.calendar.google.com', ); // Gets the first event from the calendar for February 4th, 2023 that takes // place between 5:05 PM and 5:35 PM. For an event series, use // calendar.getEventSeriesById('abc123456@google.com'); and replace the series // ID with your own. const event = calendar.getEvents( new Date('Feb 04, 2023 17:05:00'), new Date('Feb 04, 2023 17:35:00'), )[0]; if (event) { // If an event exists within the given time frame, sets the description of the // event to 'Meeting.' event.setDescription('Meeting'); } else { // If no event exists within the given time frame, logs that information to // the console. console.log('No events exist for the specified range'); }
參數
名稱 | 類型 | 說明 |
---|---|---|
description | String | 新說明 |
回攻員
Calendar
:用於鏈結的 Calendar
授權
使用這個方法的腳本需要具備下列一或多個範圍的授權,或是相關 REST API 中的適當範圍:
-
https://www.googleapis.com/auth/calendar
-
https://www.google.com/calendar/feeds
set Guests Can Invite Others(guestsCanInviteOthers)
設定邀請對象是否可以邀請其他人。
// Opens the calendar by its ID. // TODO(developer): Replace the ID with your own. You must have edit access to // the calendar. const calendar = CalendarApp.getCalendarById( 'abc123456@group.calendar.google.com', ); // Gets the first event from the calendar for February 1st, 2023 that takes // place between 9:35 AM and 9:40 AM. For an event series, use // calendar.getEventSeriesById('abc123456@google.com'); and replace the series // ID with your own. const event = calendar.getEvents( new Date('Feb 01, 2023 09:35:00'), new Date('Feb 01, 2023 09:40:00'), )[0]; if (event) { // If an event exists within the given time frame, sets the event so that // guests can invite other guests. event.setGuestsCanInviteOthers(true); } else { // If no event exists within the given time frame, logs that information to // the console. console.log('No events exist for the specified range'); }
參數
名稱 | 類型 | 說明 |
---|---|---|
guests | Boolean | 邀請對象是否可邀請他人 |
回攻員
Calendar
:用於鏈結的 Calendar
授權
使用這個方法的程式碼需要具備下列一或多個範圍的授權,或是相關 REST API 中的適當範圍:
-
https://www.googleapis.com/auth/calendar
-
https://www.google.com/calendar/feeds
set Guests Can Modify(guestsCanModify)
設定邀請對象是否可以修改活動。
參數
名稱 | 類型 | 說明 |
---|---|---|
guests | Boolean | 邀請對象是否可以修改活動 |
回攻員
Calendar
:用於鏈結的 Calendar
授權
使用這個方法的腳本需要具備下列一或多個範圍的授權,或是相關 REST API 中的適當範圍:
-
https://www.googleapis.com/auth/calendar
-
https://www.google.com/calendar/feeds
set Guests Can See Guests(guestsCanSeeGuests)
設定房客是否可以看到其他房客。
參數
名稱 | 類型 | 說明 |
---|---|---|
guests | Boolean | 邀請對象是否能看到其他人 |
回攻員
Calendar
:用於鏈結的 Calendar
授權
使用這個方法的腳本需要具備下列一或多個範圍的授權,或是相關 REST API 中的適當範圍:
-
https://www.googleapis.com/auth/calendar
-
https://www.google.com/calendar/feeds
set Location(location)
設定活動地點。
// Opens the calendar by its ID. You must have edit access to the calendar. // TODO(developer): Replace the ID with your own. const calendar = CalendarApp.getCalendarById( 'abc123456@group.calendar.google.com', ); // Gets the first event from the calendar for February 1st, 2023 that takes // place between 4:10 PM and 4:25 PM. For an event series, use // calendar.getEventSeriesById('abc123456@google.com'); and replace the series // ID with your own. const event = calendar.getEvents( new Date('Feb 01, 2023 16:10:00'), new Date('Feb 01, 2023 16:25:00'), )[0]; if (event) { // If an event exists within the given time frame, sets the location of the // event to Noida. event.setLocation('Noida'); } else { // If no event exists within the given time frame, logs that information to // the console. console.log('No events exist for the specified range'); }
參數
名稱 | 類型 | 說明 |
---|---|---|
location | String | 新位置 |
回攻員
Calendar
:用於鏈結的 Calendar
授權
使用這個方法的腳本需要具備下列一或多個範圍的授權,或是相關 REST API 中的適當範圍:
-
https://www.googleapis.com/auth/calendar
-
https://www.google.com/calendar/feeds
set My Status(status)
設定有效使用者的事件狀態 (例如出席或受邀)。
// Opens the calendar by its ID. You must have edit access to the calendar. // TODO(developer): Replace the ID with your own. const calendar = CalendarApp.getCalendarById( 'abc123456@group.calendar.google.com', ); // Gets the first event from the calendar for February 1st, 2023 that takes // place between 4:10 PM and 4:25 PM. For an event series, use // calendar.getEventSeriesById('abc123456@google.com'); and replace the series // ID with your own. const event = calendar.getEvents( new Date('Feb 01, 2023 16:10:00'), new Date('Feb 01, 2023 16:25:00'), )[0]; if (event) { // If an event exists within the given time frame, sets the event status for // the current user to maybe. event.setMyStatus(CalendarApp.GuestStatus.MAYBE); } else { // If no event exists within the given time frame, logs that information to // the console. console.log('No events exist for the specified range'); }
參數
名稱 | 類型 | 說明 |
---|---|---|
status | Guest | 新的狀態 |
回攻員
Calendar
:用於鏈結的 Calendar
授權
使用這個方法的腳本需要具備下列一或多個範圍的授權,或是相關 REST API 中的適當範圍:
-
https://www.googleapis.com/auth/calendar
-
https://www.googleapis.com/auth/calendar.readonly
-
https://www.google.com/calendar/feeds
set Recurrence(recurrence, startDate)
設定全天活動系列的週期性規則。套用此方法會將一般活動系列變更為全天活動系列。
// Sets the events in a series to take place every Wednesday in 2013. const eventSeries = CalendarApp.getDefaultCalendar().getEventSeriesById( '123456789@google.com', ); const startDate = new Date('January 2, 2013 03:00:00 PM EST'); const recurrence = CalendarApp.newRecurrence() .addWeeklyRule() .onlyOnWeekday(CalendarApp.Weekday.WEDNESDAY) .until(new Date('January 1, 2014')); eventSeries.setRecurrence(recurrence, startDate);
參數
名稱 | 類型 | 說明 |
---|---|---|
recurrence | Event | 要使用的重複規則 |
start | Date | 系列中第一個事件的日期 (只使用日期,時間部分會遭到忽略) |
回攻員
Calendar
- 用於鏈結的 CalendarEventSeries
授權
使用這個方法的腳本需要具備下列一或多個範圍的授權,或是相關 REST API 中的適當範圍:
-
https://www.googleapis.com/auth/calendar
-
https://www.google.com/calendar/feeds
set Recurrence(recurrence, startTime, endTime)
設定這個活動系列的週期性規則。套用這個方法會將全天活動系列變更為一般活動系列。
// Sets the events in a series to take place from 3pm to 4pm every Tuesday and // Thursday in 2013. const eventSeries = CalendarApp.getDefaultCalendar().getEventSeriesById( '123456789@google.com', ); const startTime = new Date('January 1, 2013 03:00:00 PM EST'); const endTime = new Date('January 1, 2013 04:00:00 PM EST'); const recurrence = CalendarApp.newRecurrence() .addWeeklyRule() .onlyOnWeekdays( [CalendarApp.Weekday.TUESDAY, CalendarApp.Weekday.THURSDAY]) .until(new Date('January 1, 2014')); eventSeries.setRecurrence(recurrence, startTime, endTime);
參數
名稱 | 類型 | 說明 |
---|---|---|
recurrence | Event | 要使用的重複規則 |
start | Date | 系列活動的第一個活動開始的日期和時間 |
end | Date | 系列活動中第一個活動結束的日期和時間 |
回攻員
Calendar
- 用於鏈結的 CalendarEventSeries
授權
使用這個方法的腳本需要具備下列一或多個範圍的授權,或是相關 REST API 中的適當範圍:
-
https://www.googleapis.com/auth/calendar
-
https://www.google.com/calendar/feeds
set Tag(key, value)
為事件設定鍵/值代碼,用於儲存自訂中繼資料。
參數
名稱 | 類型 | 說明 |
---|---|---|
key | String | 標記鍵 |
value | String | 標記值 |
回攻員
Calendar
:用於鏈結的 Calendar
授權
使用這個方法的腳本需要具備下列一或多個範圍的授權,或是相關 REST API 中的適當範圍:
-
https://www.googleapis.com/auth/calendar
-
https://www.google.com/calendar/feeds
set Title(title)
設定事件的標題。
// Opens the calendar by its ID. You must have edit access to the calendar. // TODO(developer): Replace the ID with your own. const calendar = CalendarApp.getCalendarById( 'abc123456@group.calendar.google.com', ); // Gets the first event from the calendar for January 31st, 2023 that takes // place between 9:05 AM and 9:15 AM. For an event series, use // calendar.getEventSeriesById('abc123456@google.com'); and replace the series // ID with your own. const event = calendar.getEvents( new Date('Jan 31, 2023 09:05:00'), new Date('Jan 31, 2023 09:15:00'), )[0]; if (event) { // If an event exists within the given time frame, changes its title to // Event1. event.setTitle('Event1'); } else { // If no event exists within the given time frame, logs that information to // the console. console.log('No events exist for the specified range'); }
參數
名稱 | 類型 | 說明 |
---|---|---|
title | String | 新標題 |
回攻員
Calendar
:用於鏈結的 Calendar
授權
使用這個方法的程式碼需要具備下列一或多個範圍的授權,或是相關 REST API 中的適當範圍:
-
https://www.googleapis.com/auth/calendar
-
https://www.google.com/calendar/feeds
set Transparency(transparency)
設定事件的透明度。使用這個方法設定活動是否為 TRANSPARENT
,表示在該時段內顯示為「有空」,或是 OPAQUE
,表示在該時段內顯示為「忙碌」。
// Gets an event by its ID. For an event series, use getEventSeriesById(iCalId) // instead. // TODO(developer): Replace the string with the event ID that you want to get. const event = CalendarApp.getEventById('abc123456'); // Sets the event's transparency to TRANSPARENT. event.setTransparency(CalendarApp.EventTransparency.TRANSPARENT);
參數
名稱 | 類型 | 說明 |
---|---|---|
transparency | Event | 透明度值。 |
回攻員
Calendar
:用於鏈結的 Calendar
。
授權
使用這個方法的腳本需要具備下列一或多個範圍的授權,或是相關 REST API 中的適當範圍:
-
https://www.googleapis.com/auth/calendar
-
https://www.google.com/calendar/feeds
set Visibility(visibility)
設定事件的瀏覽權限。
參數
名稱 | 類型 | 說明 |
---|---|---|
visibility | Visibility |
回攻員
Calendar
:用於鏈結的 Calendar
授權
使用這個方法的腳本需要具備下列一或多個範圍的授權,或是相關 REST API 中的適當範圍:
-
https://www.googleapis.com/auth/calendar
-
https://www.google.com/calendar/feeds