Bu dokümanda, yinelenen etkinlikler ve bunların örnekleriyle nasıl çalışabileceğiniz açıklanmaktadır.
Düzenli etkinlikler oluşturma
Düzenli etkinlikler oluşturmak, event
kaynağının recurrence
alan ayarıyla normal (tek) 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() isteğini kullanabilirsiniz.
events.list()
isteği varsayılan olarak yalnızca tek etkinlikleri, düzenli etkinlikleri ve istisnaları döndürür; istisna olmayan örnekler döndürülmez.
singleEvents
parametresi true
olarak ayarlanırsa tüm örnekler sonuçta görünür ancak temel yinelenen etkinlikler görünmez. Uygun/meşgul izinleri olan bir kullanıcı events.list()
sorgusunu sorguladığında, singleEvent
true
gibi davranır. Erişim kontrol listesi kuralları hakkında daha fazla bilgi için Acl bölümüne bakın.
Bağımsız örnekler, tek bir etkinliğe benzer. Üst tekrarlanan etkinliklerin aksine, örneklerde recurrence
alanı ayarlanmamıştır.
Aşağıdaki etkinlik alanları örneklere özeldir:
recurringEventId
: Bu örneğin ait olduğu üst düzenli etkinliğin kimliğioriginalStartTime
: Bu örneğin başladığı zaman, üst yinelenen etkinlikteki yinelenme verilerine göre zaman alır. Örnek yeniden planlandıysa gerçekstart
zamanından farklı olabilir. Taşınmış olsa bile, düzenli etkinlik serisi içindeki örneği benzersiz bir şekilde tanımlar.
Örnekleri değiştirme veya silme
Tek bir örneği değiştirmek (istisna oluşturma) için istemci uygulamaları, önce örneği almalı ve ardından gövdede güncellenmiş verilerle örnek düzenleme URL'sine yetkili bir PUT isteği göndererek örneği güncellemelidir. URL şu biçimdedir:
https://www.googleapis.com/calendar/v3/calendars/calendarId/events/instanceId
calendarId ve instanceId yerine uygun değerleri kullanın.
İşlem başarılı olduğunda sunucu, güncellenmiş örneği içeren HTTP 200 OK durum koduyla yanıt verir. Aşağıdaki örnekte, düzenli bir etkinlik ö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
Takip eden tüm örnekleri değiştir
Belirli bir (hedef) örnekte veya bu örnekten sonra yinelenen bir etkinliğin tüm örneklerini değiştirmek için iki ayrı API isteği yapmanız gerekir. Bu istekler, orijinal yinelenen etkinliği ikiye böler: Değişiklik olmadan örnekleri koruyan orijinal etkinlik ve değişikliğin uygulandığı örneklere sahip olan yeni yinelenen etkinlik:- Güncellenecek örneklerin orijinal yinelenen etkinliğini kırpmak için
events.update()
yöntemini çağırın. Bunu yapmak içinRRULE
öğesininUNTIL
bileşenini, ilk hedef örneğin başlangıç zamanından önce gelecek şekilde ayarlayın. Alternatif olarak,UNTIL
yerineCOUNT
bileşenini ayarlayabilirsiniz. - Yapmaya çalıştığınız değişiklik hariç, orijinal etkinlikle aynı verilere sahip yeni bir düzenli etkinlik oluşturmak için
events.insert()
numaralı telefonu arayın. Yeni yinelenen etkinlik, hedef örneğin başlangıç zamanına sahip olmalıdır.
Bu örnekte, önceki örneklerde verilen yinelenen 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;UNTIL=20110617T065959Z", ], "attendees": [ { "email": "attendeeEmail", # Other attendee's data... }, # ... ], }