高度なカレンダー サービスを使用すると、Apps Script で公開 Google Calendar API を使用できます。Apps Script の組み込みカレンダー サービスと同様に、この API を使用すると、ユーザーが定期購入している追加のカレンダーを含め、ユーザーの Google カレンダーにスクリプトがアクセスして変更できます。ほとんどの場合、組み込みサービスの方が使いやすいですが、この高度なサービスには、個々のイベントの背景色の設定など、いくつかの追加機能があります。
リファレンス
このサービスの詳細については、一般公開版の Google カレンダー API のリファレンス ドキュメントをご覧ください。Apps Script のすべての高度なサービスと同様に、高度なカレンダー サービスでは、公開 API と同じオブジェクト、メソッド、パラメータを使用します。詳細については、メソッド シグネチャの決定方法をご覧ください。
/** * Creates an event in the user's default calendar. * @see https://developers.google.com/calendar/api/v3/reference/events/insert */functioncreateEvent(){constcalendarId='primary';conststart=getRelativeDate(1,12);constend=getRelativeDate(1,13);// event details for creating event.letevent={summary:'LunchMeeting',location:'TheDeli',description:'Todiscussourplansforthepresentationnextweek.',start:{dateTime:start.toISOString()},end:{dateTime:end.toISOString()},attendees:[{email:'gduser1@workspacesample.dev'},{email:'gduser2@workspacesample.dev'}],// Red background. Use Calendar.Colors.get() for the full list.colorId:11};try{// call method to insert/create new event in provided calandarevent=Calendar.Events.insert(event,calendarId);console.log('EventID:'+event.id);}catch(err){console.log('Failedwitherror%s',err.message);}}/** * Helper function to get a new Date object relative to the current date. * @param {number} daysOffset The number of days in the future for the new date. * @param {number} hour The hour of the day for the new date, in the time zone * of the script. * @return {Date} The new date. */functiongetRelativeDate(daysOffset,hour){constdate=newDate();date.setDate(date.getDate()+daysOffset);date.setHours(hour);date.setMinutes(0);date.setSeconds(0);date.setMilliseconds(0);returndate;}
/** * Lists the calendars shown in the user's calendar list. * @see https://developers.google.com/calendar/api/v3/reference/calendarList/list */functionlistCalendars(){letcalendars;letpageToken;do{calendars=Calendar.CalendarList.list({maxResults:100,pageToken:pageToken});if(!calendars.items||calendars.items.length===0){console.log('Nocalendarsfound.');return;}// Print the calendar id and calendar summaryfor(constcalendarofcalendars.items){console.log('%s(ID:%s)',calendar.summary,calendar.id);}pageToken=calendars.nextPageToken;}while(pageToken);}
/** * Lists the next 10 upcoming events in the user's default calendar. * @see https://developers.google.com/calendar/api/v3/reference/events/list */functionlistNext10Events(){constcalendarId='primary';constnow=newDate();constevents=Calendar.Events.list(calendarId,{timeMin:now.toISOString(),singleEvents:true,orderBy:'startTime',maxResults:10});if(!events.items||events.items.length===0){console.log('Noeventsfound.');return;}for(consteventofevents.items){if(event.start.date){// All-day event.conststart=newDate(event.start.date);console.log('%s(%s)',event.summary,start.toLocaleDateString());continue;}conststart=newDate(event.start.dateTime);console.log('%s(%s)',event.summary,start.toLocaleString());}}
/** * Creates an event in the user's default calendar, waits 30 seconds, then * attempts to update the event's location, on the condition that the event * has not been changed since it was created. If the event is changed during * the 30-second wait, then the subsequent update will throw a 'Precondition * Failed' error. * * The conditional update is accomplished by setting the 'If-Match' header * to the etag of the new event when it was created. */functionconditionalUpdate(){constcalendarId='primary';conststart=getRelativeDate(1,12);constend=getRelativeDate(1,13);letevent={summary:'LunchMeeting',location:'TheDeli',description:'Todiscussourplansforthepresentationnextweek.',start:{dateTime:start.toISOString()},end:{dateTime:end.toISOString()},attendees:[{email:'gduser1@workspacesample.dev'},{email:'gduser2@workspacesample.dev'}],// Red background. Use Calendar.Colors.get() for the full list.colorId:11};event=Calendar.Events.insert(event,calendarId);console.log('EventID:'+event.getId());// Wait 30 seconds to see if the event has been updated outside this script.Utilities.sleep(30*1000);// Try to update the event, on the condition that the event state has not// changed since the event was created.event.location='TheCoffeeShop';try{event=Calendar.Events.update(event,calendarId,event.id,{},{'If-Match':event.etag});console.log('Successfullyupdatedevent:'+event.id);}catch(e){console.log('Fetchthrewanexception:'+e);}}
/** * Creates an event in the user's default calendar, then re-fetches the event * every second, on the condition that the event has changed since the last * fetch. * * The conditional fetch is accomplished by setting the 'If-None-Match' header * to the etag of the last known state of the event. */functionconditionalFetch(){constcalendarId='primary';conststart=getRelativeDate(1,12);constend=getRelativeDate(1,13);letevent={summary:'LunchMeeting',location:'TheDeli',description:'Todiscussourplansforthepresentationnextweek.',start:{dateTime:start.toISOString()},end:{dateTime:end.toISOString()},attendees:[{email:'gduser1@workspacesample.dev'},{email:'gduser2@workspacesample.dev'}],// Red background. Use Calendar.Colors.get() for the full list.colorId:11};try{// insert eventevent=Calendar.Events.insert(event,calendarId);console.log('EventID:'+event.getId());// Re-fetch the event each second, but only get a result if it has changed.for(leti=0;i < 30;i++){Utilities.sleep(1000);event=Calendar.Events.get(calendarId,event.id,{},{'If-None-Match':event.etag});console.log('Neweventdescription:'+event.start.dateTime);}}catch(e){console.log('Fetchthrewanexception:'+e);}}
/** * Retrieve and log events from the given calendar that have been modified * since the last sync. If the sync token is missing or invalid, log all * events from up to a month ago (a full sync). * * @param {string} calendarId The ID of the calender to retrieve events from. * @param {boolean} fullSync If true, throw out any existing sync token and * perform a full sync; if false, use the existing sync token if possible. */functionlogSyncedEvents(calendarId,fullSync){constproperties=PropertiesService.getUserProperties();constoptions={maxResults:100};constsyncToken=properties.getProperty('syncToken');if(syncToken && !fullSync){options.syncToken=syncToken;}else{// Sync events up to thirty days in the past.options.timeMin=getRelativeDate(-30,0).toISOString();}// Retrieve events one page at a time.letevents;letpageToken;do{try{options.pageToken=pageToken;events=Calendar.Events.list(calendarId,options);}catch(e){// Check to see if the sync token was invalidated by the server;// if so, perform a full sync instead.if(e.message==='Synctokenisnolongervalid,afullsyncisrequired.'){properties.deleteProperty('syncToken');logSyncedEvents(calendarId,true);return;}thrownewError(e.message);}if(events.items && events.items.length===0){console.log('Noeventsfound.');return;}for(consteventofevents.items){if(event.status==='cancelled'){console.log('Eventid%swascancelled.',event.id);return;}if(event.start.date){conststart=newDate(event.start.date);console.log('%s(%s)',event.summary,start.toLocaleDateString());return;}// Events that don't last all day; they have defined start times.conststart=newDate(event.start.dateTime);console.log('%s(%s)',event.summary,start.toLocaleString());}pageToken=events.nextPageToken;}while(pageToken);properties.setProperty('syncToken',events.nextSyncToken);}
[[["わかりやすい","easyToUnderstand","thumb-up"],["問題の解決に役立った","solvedMyProblem","thumb-up"],["その他","otherUp","thumb-up"]],[["必要な情報がない","missingTheInformationINeed","thumb-down"],["複雑すぎる / 手順が多すぎる","tooComplicatedTooManySteps","thumb-down"],["最新ではない","outOfDate","thumb-down"],["翻訳に関する問題","translationIssue","thumb-down"],["サンプル / コードに問題がある","samplesCodeIssue","thumb-down"],["その他","otherDown","thumb-down"]],["最終更新日 2024-12-21 UTC。"],[[["The Advanced Calendar service in Apps Script allows you to access and modify Google Calendar data using the public Google Calendar API."],["It offers features beyond the built-in Calendar service, such as setting event background colors and using HTTP request headers for conditional updates and retrievals."],["Sample code snippets demonstrate various functionalities like creating, listing, and syncing calendar events, and conditionally modifying or retrieving specific events."],["Before using this advanced service, ensure it's enabled in your Apps Script project settings."],["Refer to the Google Calendar API reference documentation and support guide for detailed information and troubleshooting."]]],[]]