2013-03-02 75 views
0

我正在使用Google Calendar API在Google App Engine應用程序中創建單個事件事件。Google Calendar API創建事件返回201,但未創建任何事件

的JSON編碼的事件是這樣的:

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) 

一切似乎都工作,它驗證確定,該事件是發佈後,我收到了201迴應,並添加了日曆中添加字段的JSON事件。

但事件沒有創建,它不會顯示在我的日曆上。當我在返回的事件數據中的「備用鏈接」字段中輸入網址時,我的日曆中會顯示一條錯誤消息,提示「事件不存在」

任何關於此問題的幫助都將非常感激。我對Google的API非常陌生,所以希望我錯過了一些明顯的東西。

+0

從來沒有使用API​​,但你知道'200'是HTTP狀態 - 確定的響應?我無法想象谷歌會擺脫這一點。 – 2013-03-02 18:57:45

+1

@NiklasR根據[RFC2616](http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html)201狀態代碼是「請求已完成並導致創建新資源。」 從Calendar API的[procotol guide](https://developers.google.com/google-apps/calendar/v2/developers_guide_protocol#AuthOAuth): >當您發送第二個POST請求(或第一個POST請求沒有重定向的情況下),Calendar創建一個日曆事件,然後返回一個HTTP 201 CREATED狀態代碼,以及一個元素或(在JSON-C)數據對象形式的新事件的副本。 – pointlessCog 2013-03-02 22:20:05

回答

0

得到它的工作。根據協議指南日曆API:

要發佈的條目,發送以下HTTP請求到日曆,使用一種特殊的「默認」 URL(和授權報頭;參見上認證的部分上方)。日曆會自動將默認URL重定向到屬於已驗證用戶的日曆的讀/寫私人提要的URL。 (請注意,您不必使用默認URL向日歷發送POST請求;如果您願意,可以指定用戶ID而不是「默認」。有關詳細信息,請參閱日曆Feed類型參考。)

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 2013-03-04 11:18:04

+0

如果您想簡要介紹Google Calendar API v3,請查看以下鏈接:https://google-api-client-libraries.appspot.com/documentation/calendar/v3/python/latest/ – Dev 2013-03-04 12:03:23

相關問題