谷歌日历Api错误请求400事件通过开发人员控制台

时间:2013-04-10 13:04:27

标签: google-calendar-api google-oauth

我创建了项目并使用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 仍然没有答案。

我认为这是暂时性的错误。

4 个答案:

答案 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时发现了完全相同的问题。如果我尝试更新日历事件的开始日期,就会发生这种情况。更新结束数据没有问题。真的很奇怪。

幸运的是,我也可以通过用补丁替换更新来解决问题。