2012-03-13 6 views
4

내가이 글에서 설명한 것과 동일한 문제가 발생하고 나면 이벤트를 업데이트 할 수 있습니다 : 나는 이벤트를 생성하면,Google 캘린더 API에만

Google Calendar api v3 re-update issue

즉 한 번 Google 캘린더 API를 사용하여 업데이트 (v3), 더 이상 이벤트를 업데이트 할 수 없습니다. 내가 시도 할 때, 나는 400 - Invalid value response를 얻는다. (FWIW 나는 PHP에서 일하고있다.)

앞서 언급 한 게시물에서 제공되는 리드에 이어 etags를 사용하여 문제를 해결하려고했습니다 (비록 그들이 어떻게 작동하는지 내 이해는 제한적 임). 기본적으로 이벤트 업데이트시 API는 응답에 etag를 반환하고, 이제 데이터베이스에 저장합니다. 그런 다음 (N> 1) 업데이트를 위해, 나는 HTTP 헤더에 데이터베이스에서 현재 ETAG을 끌어와 같습니다 http://code.google.com/apis/gdata/docs/2.0/reference.html#ResourceVersioning

:

Content-Type: application/json 
Authorization: OAuth [token] 
If-Match: [etag] 

이 여기의 "항목 업데이트"헤더 아래 정보를 다음과 (!) 참고는 : 위의 구글 심판에서 IF-Match 헤더는 ETAG 큰 따옴표와

If-Match: "S0wCTlpIIip7ImA0X0QI" 

로 표시됩니다. 난 처음으로 업데이 트 응답에 그들을 받게 정확히 같은 큰 따옴표로 데이터베이스에 etags을 저축 해요. curl_setopt/HTTPHEADER를 사용하여 헤더에 추가 할 때 따옴표 또는 다른 것을 이스케이프해야합니까?

이 etag If-Match 일을 구현 했음에도 불구하고 여전히 동일한 400 - Invalid value 응답을 얻고 있습니다. 첫 번째 업데이트가 정상적으로 작동하므로 요청 본문이 유효하다는 것을 알고 있습니다. 후속 업데이트를 둘러싼 몇 가지 추가 문제가 있습니다.

도움을 주시면 감사하겠습니다.

+0

것은 당신이-매치 경우 업데이트하고 항목을 획득함으로써 시작 사용 항목을 업데이트하려면 "말의 지침에 따라 해드립니다 원하는 항목을 변경 한 다음 수정 된 항목을 포함하는 새로운 PUT 요청을 만드십시오. " –

+0

다음 주셔서 감사합니다. 방금 기존 이벤트를 삭제하고 새 이벤트를 만드는 "업데이트"를 구현했습니다. –

답변

14

이벤트를 업데이트 할 때 시퀀스 번호 필드를 증가시켜야합니다.

+0

yess 시퀀스 번호를 증가시켜 업데이트 req와 함께 보내야합니다 –

+0

https://developers.google.com/google-apps/calendar/v3/reference 문서의 후속 업데이트에이 필드가 필요하다는 사실을 Google이 정말로 언급해야합니다./events/update – TaeKwonJoe

0

동일한 문제가있었습니다. 순서 번호를 늘리려면 수행 한 업데이트 수를 추적하고 업데이트에 다음 증분을 포함해야합니다. 어떤 이유로 첫 번째 업데이트에는이 업데이트가 필요하지 않지만 후속 업데이트에는 업데이트가 필요합니다. 다음과 같이 보일 것입니다 이벤트로 2 업데이트에 대한 구글의 PHP 라이브러리를 사용하여

(마이너스 당신은 업데이트하는 어떤 다른) : 나는 그것을 할 방법

$calendarID = ID_OF_YOUR_CALENDAR; 
$eventID = ID_OF_YOUR_EVENT; 

$event = new Google_Event(); 
$event->setSequence('2'); 

$calEvent = $cal->events->update($calendarID $eventID, $event); 
0

는 점이다. Google에서 항목을 가져 와서 이미 최신 Etag 세트를 가져 와서 순서를 하나씩 늘리고 항목을 업데이트하십시오.

내가 자바 그래서 다음은 자바와 예입니다 사용할 때 :.

com.google.api.services.calendar.model.Event googleCalendarEvent = service.events().get(clientCalendarEvent.getCalendar().getCalendarKey(),clientCalendarEvent.getEventKey()).execute(); 
updateGoogleCalendarEvent(clientCalendarEvent, googleCalendarEvent); 

googleCalendarEvent.setSequence(googleCalendarEvent.getSequence() + 1); 

com.google.api.services.calendar.model.Event event = service 
     .events() 
     .update(clientCalendarEvent.getCalendar().getCalendarKey(), clientCalendarEvent.getEventKey(), 
      googleCalendarEvent).execute();