Bu belgede, düzenli etkinlikler ve bunların örnekleriyle nasıl çalışılacağı açıklanmaktadır.
Düzenli etkinlikler oluşturma
Düzenli etkinlik oluşturmak, Etkinlik kaynağının recurrence alanı ayarlanmış normal (tek seferlik) bir etkinlik oluşturmaya benzer.
Protokol
POST /calendar/v3/calendars/primary/events ... { "summary": "Appointment", "location": "Somewhere", "start": { "dateTime": "2011-06-03T10:00:00.000-07:00", "timeZone": "America/Los_Angeles" }, "end": { "dateTime": "2011-06-03T10:25:00.000-07:00", "timeZone": "America/Los_Angeles" }, "recurrence": [ "RRULE:FREQ=WEEKLY;UNTIL=20110701T170000Z", ], "attendees": [ { "email": "attendeeEmail", # Other attendee's data... }, # ... ], }
Java
Event event = new Event(); event.setSummary("Appointment"); event.setLocation("Somewhere"); ArrayList<EventAttendee> attendees = new ArrayList<EventAttendee>(); attendees.add(new EventAttendee().setEmail("attendeeEmail")); // ... event.setAttendees(attendees); DateTime start = DateTime.parseRfc3339("2011-06-03T10:00:00.000-07:00"); DateTime end = DateTime.parseRfc3339("2011-06-03T10:25:00.000-07:00"); event.setStart(new EventDateTime().setDateTime(start).setTimeZone("America/Los_Angeles")); event.setEnd(new EventDateTime().setDateTime(end).setTimeZone("America/Los_Angeles")); event.setRecurrence(Arrays.asList("RRULE:FREQ=WEEKLY;UNTIL=20110701T170000Z")); Event recurringEvent = service.events().insert("primary", event).execute(); System.out.println(createdEvent.getId());
.NET
Event event = new Event() { Summary = "Appointment", Location = "Somewhere", Start = new EventDateTime() { DateTime = new DateTime("2011-06-03T10:00:00.000:-07:00") TimeZone = "America/Los_Angeles" }, End = new EventDateTime() { DateTime = new DateTime("2011-06-03T10:25:00.000:-07:00") TimeZone = "America/Los_Angeles" }, Recurrence = new String[] { "RRULE:FREQ=WEEKLY;UNTIL=20110701T170000Z" }, Attendees = new List<EventAttendee>() { new EventAttendee() { Email: "attendeeEmail" }, // ... } }; Event recurringEvent = service.Events.Insert(event, "primary").Fetch(); Console.WriteLine(recurringEvent.Id);
Python
event = { 'summary': 'Appointment', 'location': 'Somewhere', 'start': { 'dateTime': '2011-06-03T10:00:00.000-07:00', 'timeZone': 'America/Los_Angeles' }, 'end': { 'dateTime': '2011-06-03T10:25:00.000-07:00', 'timeZone': 'America/Los_Angeles' }, 'recurrence': [ 'RRULE:FREQ=WEEKLY;UNTIL=20110701T170000Z', ], 'attendees': [ { 'email': 'attendeeEmail', # Other attendee's data... }, # ... ], } recurring_event = service.events().insert(calendarId='primary', body=event).execute() print recurring_event['id']
PHP
$event = new Google_Service_Calendar_Event(); $event->setSummary('Appointment'); $event->setLocation('Somewhere'); $start = new Google_Service_Calendar_EventDateTime(); $start->setDateTime('2011-06-03T10:00:00.000-07:00'); $start->setTimeZone('America/Los_Angeles'); $event->setStart($start); $end = new Google_Service_Calendar_EventDateTime(); $end->setDateTime('2011-06-03T10:25:00.000-07:00'); $end->setTimeZone('America/Los_Angeles'); $event->setEnd($end); $event->setRecurrence(array('RRULE:FREQ=WEEKLY;UNTIL=20110701T170000Z')); $attendee1 = new Google_Service_Calendar_EventAttendee(); $attendee1->setEmail('attendeeEmail'); // ... $attendees = array($attendee1, // ... ); $event->attendees = $attendees; $recurringEvent = $service->events->insert('primary', $event); echo $recurringEvent->getId();
Ruby
event = Google::Apis::CalendarV3::Event.new( summary: 'Appointment', location: 'Somewhere', start: { date_time: '2011-06-03T10:00:00.000-07:00', time_zone: 'America/Los_Angeles' }, end: { date_time: '2011-06-03T10:25:00.000-07:00', time_zone: 'America/Los_Angeles' }, recurrence: ['RRULE:FREQ=WEEKLY;UNTIL=20110701T170000Z'] attendees: [ { email: 'attendeeEmail' }, #... ] ) response = client.insert_event('primary', event) print response.id
Erişim örnekleri
Belirli bir düzenli etkinliğin tüm örneklerini görmek için events.instances yöntemini kullanın.
Varsayılan olarak events.list
yöntemi tek seferlik etkinlikleri, düzenli etkinlikleri ve istisnaları döndürür.
İstisna olmayan örnekler döndürülmez.
singleEvents
parametresi true olarak ayarlanırsa sonuçta tüm tekil örnekler gösterilir ancak temel alınan yinelenen etkinlikler gösterilmez. Boş/meşgul izinlerine sahip bir kullanıcı events.list sorgusu yaptığında, singleEvents true gibi davranır. Erişim kontrol listesi kuralları hakkında daha fazla bilgi için ACL başlıklı makaleyi inceleyin.
Ayrı ayrı örnekler, tek etkinliklere benzer. Örneklerde, üst yinelenen etkinliklerin aksine recurrence alanı ayarlanmamıştır.
Aşağıdaki etkinlik alanları, örnekler için geçerlidir:
recurringEventId: Bu örneğin ait olduğu üst düzenli etkinliğin kimliğioriginalStartTime— Bu örneğin, üst düzenli etkinlikteki tekrarlama verilerine göre başladığı saat. Örnek yeniden planlandıysa bu, gerçekstartzamanından farklı olabilir. Örnek taşınmış olsa bile, düzenli etkinlik serisindeki örneği benzersiz şekilde tanımlar.
Örnekleri değiştirme veya silme
Tek bir örneği değiştirmek (istisna oluşturmak) için istemci uygulamalarının önce örneği alması, ardından gövdede güncellenmiş verilerle birlikte örnek düzenleme URL'sine yetkili bir PUT isteği göndererek örneği güncellemesi gerekir. URL şu biçimde olmalıdır:
https://www.googleapis.com/calendar/v3/calendars/calendarId/events/instanceId
calendarId ve instanceId yerine uygun değerler kullanın.
Başarılı olduğunda sunucu, güncellenen örnekle birlikte bir HTTP 200 OK durum koduyla yanıt verir. Aşağıdaki örnekte, yinelenen bir etkinliğin bir örneğinin nasıl iptal edileceği gösterilmektedir.
Protokol
PUT /calendar/v3/calendars/primary/events/instanceId
...
{
"kind": "calendar#event",
"id": "instanceId",
"etag": "instanceEtag",
"status": "cancelled",
"htmlLink": "https://www.google.com/calendar/event?eid=instanceEid",
"created": "2011-05-23T22:27:01.000Z",
"updated": "2011-05-23T22:27:01.000Z",
"summary": "Recurring event",
"location": "Somewhere",
"creator": {
"email": "userEmail"
},
"recurringEventId": "recurringEventId",
"originalStartTime": "2011-06-03T10:00:00.000-07:00",
"organizer": {
"email": "userEmail",
"displayName": "userDisplayName"
},
"start": {
"dateTime": "2011-06-03T10:00:00.000-07:00",
"timeZone": "America/Los_Angeles"
},
"end": {
"dateTime": "2011-06-03T10:25:00.000-07:00",
"timeZone": "America/Los_Angeles"
},
"iCalUID": "eventUID",
"sequence": 0,
"attendees": [
{
"email": "attendeeEmail",
"displayName": "attendeeDisplayName",
"responseStatus": "needsAction"
},
# ...
{
"email": "userEmail",
"displayName": "userDisplayName",
"responseStatus": "accepted",
"organizer": true,
"self": true
}
],
"guestsCanInviteOthers": false,
"guestsCanSeeOtherGuests": false,
"reminders": {
"useDefault": true
}
}Java
// First retrieve the instances from the API. Events instances = service.events().instances("primary", "recurringEventId").execute(); // Select the instance to cancel. Event instance = instances.getItems().get(0); instance.setStatus("cancelled"); Event updatedInstance = service.events().update("primary", instance.getId(), instance).execute(); // Print the updated date. System.out.println(updatedInstance.getUpdated());
.NET
// First retrieve the instances from the API. Events instances = service.Events.Instances("primary", "recurringEventId").Fetch(); // Select the instance to cancel. Event instance = instances.Items[0]; instance.Status = "cancelled"; Event updatedInstance = service.Events.Update(instance, "primary", instance.Id).Fetch(); // Print the updated date. Console.WriteLine(updatedInstance.Updated);
Python
# First retrieve the instances from the API. instances = service.events().instances(calendarId='primary', eventId='recurringEventId').execute() # Select the instance to cancel. instance = instances['items'][0] instance['status'] = 'cancelled' updated_instance = service.events().update(calendarId='primary', eventId=instance['id'], body=instance).execute() # Print the updated date. print updated_instance['updated']
PHP
$events = $service->events->instances("primary", "eventId"); // Select the instance to cancel. $instance = $events->getItems()[0]; $instance->setStatus('cancelled'); $updatedInstance = $service->events->update('primary', $instance->getId(), $instance); // Print the updated date. echo $updatedInstance->getUpdated();
Ruby
# First retrieve the instances from the API. instances = client.list_event_instances('primary', 'recurringEventId') # Select the instance to cancel. instance = instances.items[0] instance.status = 'cancelled' response = client.update_event('primary', instance.id, instance) print response.updated
Aşağıdaki tüm örnekleri değiştir
Belirli bir (hedef) örnekte veya sonrasında yinelenen bir etkinliğin tüm örneklerini değiştirmek için iki ayrı API isteği gönderin. Bu istekler, orijinal düzenli etkinliği ikiye böler: değişikliğin uygulanmadığı örnekleri koruyan orijinal etkinlik ve değişikliğin uygulandığı örnekleri içeren yeni düzenli etkinlik:
- Güncellenecek örneklerin orijinal düzenli etkinliğini kırpmak için
events.updateişlevini çağırın. Bunu,RRULEbileşenininUNTILbileşenini ilk hedef örneğin başlangıç zamanından önceye işaret edecek şekilde ayarlayarak yapın. Alternatif olarak,UNTILyerineCOUNTbileşenini ayarlayabilirsiniz. - Yaptığınız değişiklik dışında orijinal etkinlikteki tüm verileri içeren yeni bir düzenli etkinlik oluşturmak için
events.insertişlevini çağırın. Yeni düzenli etkinlik, hedef örneğin başlangıç zamanına sahip olmalıdır.
Bu örnekte, önceki örneklerdeki düzenli etkinliğin üçüncü örneğinden başlayarak konumun "Başka bir yer" olarak nasıl değiştirileceği gösterilmektedir.
Protokol
# Updating the original recurring event to trim the instance list: PUT /calendar/v3/calendars/primary/events/recurringEventId ... { "summary": "Appointment", "location": "Somewhere", "start": { "dateTime": "2011-06-03T10:00:00.000-07:00", "timeZone": "America/Los_Angeles" }, "end": { "dateTime": "2011-06-03T10:25:00.000-07:00", "timeZone": "America/Los_Angeles" }, "recurrence": [ "RRULE:FREQ=WEEKLY;UNTIL=20110617T065959Z", ], "attendees": [ { "email": "attendeeEmail", # Other attendee's data... }, # ... ], } # Creating a new recurring event with the change applied: POST /calendar/v3/calendars/primary/events ... { "summary": "Appointment", "location": "Somewhere else", "start": { "dateTime": "2011-06-17T10:00:00.000-07:00", "timeZone": "America/Los_Angeles" }, "end": { "dateTime": "2011-06-17T10:25:00.000-07:00", "timeZone": "America/Los_Angeles" }, "recurrence": [ "RRULE:FREQ=WEEKLY", ], "attendees": [ { "email": "attendeeEmail", # Other attendee's data... }, # ... ], }