0

我正在使用 Google 日历 API 从我的 Google App Engine 应用程序中创建单次事件。

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。

但是该事件没有创建,它没有显示在我的日历上。当我转到返回的事件数据中“备用链接”字段中的 URL 时,我的日历出现一条错误消息,指出“事件不存在”

对此的任何帮助将不胜感激。我对 Google 的 API 很陌生,所以希望我遗漏了一些明显的东西。

4

1 回答 1

0

得到它的工作。根据日历 API 的协议指南:

要发布条目,请使用特殊的“默认”URL(和 Authorization 标头;请参阅上面的身份验证部分)向日历发送以下 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/user@website.com/private/full

我仍然不确定为什么默认提要不起作用。

于 2013-03-03T00:51:36.447 回答