반복 일정

이 문서에서는 반복 일정과 해당 인스턴스로 작업하는 방법을 설명합니다.

반복 일정 만들기

반복 일정을 만드는 것은 event 리소스의 recurrence 필드 집합으로 일반 (단일) 일정을 만드는 것과 비슷합니다.

프로토콜

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...
    },
    # ...
  ],
}

자바

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

인스턴스 액세스

지정된 인스턴스의 모든 인스턴스를 보고 events.instances() 요청을 사용할 수 있습니다.

기본적으로 events.list() 요청 사용자는 단일 일정, 반복 일정 및 예외 예외가 아닌 인스턴스는 반환되지 않습니다. singleEvents 매개변수가 true로 설정되면 모든 개별 인스턴스가 결과에 표시되지만 기본적인 반복 일정은 표시되지 않습니다. 한가함/바쁨 권한이 있는 사용자가 events.list()을 쿼리하면 singleEventtrue인 것처럼 동작합니다. 액세스제어 목록(ACL) 규칙에 대한 자세한 내용은 Acl을 참조하세요.

개별 인스턴스는 단일 이벤트와 유사합니다. 부모님의 반복 일정과 달리 인스턴스에 recurrence 필드가 설정되지 않았습니다.

다음은 인스턴스와 관련된 이벤트 필드입니다.

  • recurringEventId: 이 인스턴스가 속한 상위 반복 이벤트의 ID입니다.
  • originalStartTime - 상위 반복 일정의 반복 데이터에 따라 이 인스턴스가 시작되는 시간입니다. 이 시간은 인스턴스 일정이 조정된 경우 실제 start 시간과 다를 수 있습니다. 이는 인스턴스가 이동된 경우에도 반복 일정 반복 내에서 인스턴스를 고유하게 식별합니다.

인스턴스 수정 또는 삭제

단일 인스턴스를 수정하려면 (예외 생성) 클라이언트 애플리케이션에서 먼저 인스턴스를 검색한 다음 본문의 업데이트된 데이터가 있는 인스턴스 수정 URL로 승인된 PUT 요청을 전송하여 인스턴스를 업데이트해야 합니다. URL 형식은 다음과 같습니다.

https://www.googleapis.com/calendar/v3/calendars/calendarId/events/instanceId

calendarIdinstanceId 대신 적절한 값을 사용합니다.

참고: 특수한 calendarIdprimary을 사용하여 인증된 사용자의 기본 캘린더를 참조할 수 있습니다.

성공하면 서버는 업데이트된 인스턴스와 함께 HTTP 200 OK 상태 코드로 응답합니다. 다음 예는 반복 일정의 인스턴스를 취소하는 방법을 보여줍니다.

프로토콜

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
  }
}

자바

// 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

다음 인스턴스 모두 수정

특정 (타겟) 인스턴스 이후 또는 그 이후에 반복되는 일정의 모든 인스턴스를 변경하려면 두 가지 별도의 API 요청을 해야 합니다. 이러한 요청은 원래 반복 일정을 두 개로 분할합니다. 변경 없이 인스턴스가 유지된 원래 일정과 새 반복 일정에는 변경사항이 적용되는 인스턴스: <ph type="x-smartling-placeholder">
    </ph>
  1. events.update()를 호출하여 다음을 수행합니다. 업데이트할 인스턴스의 원래 반복 일정을 자릅니다. 이렇게 하려면 RRULEUNTIL 구성요소가 시작 시간 전을 가리킵니다. 첫 번째 대상 인스턴스를 생성합니다 또는 COUNT 구성요소를 설정할 수 있습니다. UNTIL입니다.
  2. events.insert()를 호출하여 다음을 수행합니다. 원래 일정과 동일한 데이터를 사용하여 새 반복 일정을 만듭니다. 단, 변경할 수 있습니다. 새 반복 일정의 시작 시간은 다음과 같아야 합니다. 대상 인스턴스입니다

이 예에서는 위치를 '기타'로 변경하는 방법을 세 번째 이전 예의 반복 일정 인스턴스입니다.

프로토콜

# 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...
    },
    # ...
  ],
}
를 통해 개인정보처리방침을 정의할 수 있습니다.