2013-03-02 2 views
0

Google 캘린더 API를 사용하여 Google App Engine 앱 내에서 단일 발생 이벤트를 만듭니다.Google 캘린더 API 생성 이벤트는 201을 반환하지만 이벤트가 생성되지 않습니다.

event = {"data":{ 
      "title": "Test Event", 
      "details": "Details of test event", 
      "transparency": "opaque", 
      "status": "confirmed", 
      "location": "My Place", 
      "when": [{ 
       "start": "2013-03-05T15:00:00.000Z", 
       "end": "2013-03-05T17:00:00.000Z" 
      }] 
}} 

내가 이벤트를 추가하기 위해 사용하고 코드입니다 : 이벤트가

def sendGCalEvent(self, event): 
    scope = "https://www.google.com/calendar/feeds/" 
    authorization_token, _ = app_identity.get_access_token(scope) 
    logging.info("Using token %s to represent identity %s", 
      authorization_token, app_identity.get_service_account_name()) 
    payload = simplejson.dumps(event) 

    response = urlfetch.fetch(
     "https://www.google.com/calendar/feeds/default/private/full", 
     method=urlfetch.POST, 
     payload=payload, 
     headers = {"Content-Type": "application/json", 
        "Authorization": "OAuth " + authorization_token}) 
    if response.status_code == 201: 
     result = simplejson.loads(response.content) 
     logging.info("Status code was %s, and the returned event looks like %s", response.status_code, result) 
     return 
    raise Exception("Call failed. Status code %s. Body %s", 
       response.status_code, response.content) 

모든 것이 작동하는 것 같다, 그것은 확인 인증

json으로 인코딩 된 이벤트는 다음과 같습니다 게시 한 후 201 개의 응답과 달력에서 추가 된 필드가있는 JSON 이벤트가 표시됩니다.

이벤트가 만들어지지 않지만 내 캘린더에 표시되지 않습니다. 반환 된 이벤트 데이터의 '대체 링크'입력란에있는 URL로 이동하면 내 캘린더에 '이벤트가 없습니다.'라는 오류 메시지가 표시됩니다.

이 문제에 대한 도움은 매우 감사하겠습니다. 나는 Google API에 익숙하지 않기 때문에 분명히 뭔가 분명한 것을 놓치고 있습니다.

+0

API를 사용하지 않았지만 '200'이 HTTP 상태 확인 응답임을 알고 있습니까? 나는 구글이 그것으로부터 표류 할 것이라고 상상할 수 없다. –

+1

@NiklasR [RFC2616] (http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html) 201 상태 코드에 따르면 "요청이 완료되어 새로운 리소스가 생성되었습니다." 캘린더 API의 [procotol guide] (https://developers.google.com/google-apps/calendar/v2/developers_guide_protocol#AuthOAuth)에서 : > 두 번째 POST 요청 (또는 첫 번째 POST 요청)을 보낼 때 캘린더 이벤트를 만든 다음 요소 또는 (JSON-C) 데이터 객체 형태로 새 이벤트의 복사본과 함께 HTTP 201 CREATED 상태 코드를 반환합니다. – pointlessCog

답변

0

제대로 작동합니다. Calendar API의 프로토콜 안내서에 따라 :

항목을 게시하려면 특별한 "기본"URL (및 위의 인증 섹션 참조)을 사용하여 다음 HTTP 요청을 캘린더에 보내십시오. 캘린더는 자동으로 기본 URL을 인증 된 사용자의 캘린더 읽기/쓰기 비공개 피드의 URL로 리디렉션합니다. (기본 URL을 사용하여 캘린더에 POST 요청을 보낼 필요가 없으므로 원하는 경우 "기본"대신 사용자 ID를 지정할 수 있습니다. 자세한 내용은 캘린더 피드 유형 참조를 참조하십시오.)

POST https://www.google.com/calendar/feeds/default/private/full 

그리고 201 응답을 반환했지만 이벤트를 추가하지 않았습니다. 그러나 기본 사용자의 사용자 ID를 지정하면 작동합니다.

POST https://www.google.com/calendar/feeds/[email protected]/private/full 

기본 피드가 작동하지 않는 이유는 확실하지 않습니다.

+0

내 가장 큰 문제는 올바른 문서를 읽지 못했음을 나타냅니다! 위의 방법이 효과가 있지만 API의 V2에서 나온 것이므로 V3를 사용해야합니다. – pointlessCog

+0

Google 캘린더 API v3에 대한 간략한 소개를 보려면 https://google-api-client-libraries.appspot.com/documentation/calendar/v3/python/latest/ 링크를 확인하십시오. – Dev