我正在使用Google Calendar 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时,我的日历会显示一条错误消息,指出“事件不存在”
对此有任何帮助将非常感激。我对谷歌的API很陌生,所以我希望我找不到明显的东西。
答案 0 :(得分:0)
搞定了。根据Calendar API的协议指南:
要发布条目,请使用特殊的“默认”URL(以及授权标头;请参阅上面的身份验证部分)将以下HTTP请求发送到日历。日历会自动将默认URL重定向到属于经过身份验证的用户的日历的读/写私有源的URL。 (请注意,您不必使用默认URL向POST发送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
我仍然不确定默认Feed无效的原因。