我创建了项目并使用https://code.google.com/apis/console进行了注册 (我选择了“其他”应用程序类型)。 然后我获得了已安装应用程序的“客户端ID”。
然后我去了控制台并创建了活动,并使用oauth 2授权。 https://developers.google.com/google-apps/calendar/v3/reference/events/insert 一切都很好。
POST https://www.googleapis.com/calendar/v3/calendars/primary/events?key={YOUR_API_KEY}
Content-Type: application/json
Authorization: xxx
X-JavaScript-User-Agent: Google APIs Explorer
{
"end": {
"dateTime": "2013-1-16T10:00:00.000-07:00"
},
"start": {
"dateTime": "2013-1-16T10:00:00.000-07:00"
}
}
响应
200 OK
- Show headers -
{
"kind": "calendar#event",
"etag": "\"WANTVF5ixxZ04U_VtQ0AZ3MbAlM/Z2NhbDAwMDAxMzY1NjU0MzAwNTk1MDAw\"",
"id": "2nsuis19mkp2q0uef54tl5nk68",
"status": "confirmed",
"htmlLink": "https://www.google.com/calendar/event?eid=Mm5zdWlzMTlta3AycTB1ZWY1NHRsNW5rNjggaXZhbjEzMzEzM0Bt",
"created": "2013-04-11T04:25:00.000Z",
"updated": "2013-04-11T04:25:00.595Z",
"creator": {
"email": "ivan133133@gmail.com",
"displayName": "ivan rozhcov",
"self": true
},
"organizer": {
"email": "ivan133133@gmail.com",
"self": true
},
"start": {
"dateTime": "2013-01-16T21:00:00+04:00"
},
"end": {
"dateTime": "2013-01-16T21:00:00+04:00"
},
"iCalUID": "2nsuis19mkp2q0uef54tl5nk68@google.com",
"sequence": 0,
"reminders": {
"useDefault": true
}
}
然后我复制了id并更新了这个事件。 https://developers.google.com/google-apps/calendar/v3/reference/events/update更新 我第一次得到200回复。
PUT https://www.googleapis.com/calendar/v3/calendars/primary/events/2nsuis19mkp2q0uef54tl5nk68?key={YOUR_API_KEY}
Content-Type: application/json
Authorization: Bearer ya29.AHES6ZRmo6pdxj8pY4NmzdI1estRNB-v87XV7xQHgyhrWHk2rzs3Ke8
X-JavaScript-User-Agent: Google APIs Explorer
{
"end": {
"dateTime": "2013-1-16T10:00:00.000-07:00"
},
"start": {
"dateTime": "2013-1-16T10:00:00.000-07:00"
}
}
但是当我再次尝试这个时,我总是遇到400错误,错误文字写在下面。
https://developers.google.com/google-apps/calendar/v3/reference/events/update更新
400 Bad Request
cache-control: private, max-age=0
content-encoding: gzip
content-length: 123
content-type: application/json; charset=UTF-8
date: Wed, 10 Apr 2013 12:49:29 GMT
expires: Wed, 10 Apr 2013 12:49:29 GMT
server: GSE
{
"error": {
"errors": [
{
"domain": "global",
"reason": "invalid",
"message": "Invalid Value"
}
],
"code": 400,
"message": "Invalid Value"
}
}
任何人都可以解释一下,如果这是google.api错误,或者我错了吗?
我从不同帐户和PC(通过Google API Explorer和python库获得相同结果)尝试了它。
今天我试图重现那个bug。但是everring现在工作得很好。 我在谷歌代码中创建了一个问题 http://code.google.com/a/google.com/p/apps-api-issues/issues/detail?id=3371&thanks=3371&ts=1365599378 仍然没有答案。
我认为这是暂时性的错误。
答案 0 :(得分:3)
400几乎总是意味着您的身份验证URL中存在简单的语法错误。最常见的原因是您未能对网址进行网址转义或重定向,或者多次对其进行网址转义。
答案 1 :(得分:2)
检查一下:Google Calendar API - can only update event once 而这:Google Calendar api v3 re-update issue
当您更改事件的日期/时间时,需要增加序列号,这就是您获得400 - 错误请求的原因。
这就是我使用java客户端库解决它的方法。
mGoogleCalendarEvent包含有关活动的更新信息。首先,从GoogleCalendar获取此事件的序列号:
mGoogleCalendarEvent.setSequence(mService.events().get(mCalendarId,mGoogleCalendarEvent.getId()).execute().getSequence());
然后执行更新:
mService.events().update(mCalendarId, mGoogleCalendarEvent.getId(),mGoogleCalendarEvent).execute();
答案 2 :(得分:1)
我使用补丁而不是更新,它现在工作正常。但是,不要真正理解为什么更新第一次成功并且第二次和其他时间失败。总神秘。
答案 3 :(得分:0)
使用适用于Javascript的Google API客户端库访问Google Calendar API时发现了完全相同的问题。如果我尝试更新日历事件的开始日期,就会发生这种情况。更新结束数据没有问题。真的很奇怪。
幸运的是,我也可以通过用补丁替换更新来解决问题。