谷歌日历API-只能更新一次事件



我遇到了与本文中描述的相同的问题:

谷歌日历api v3重新更新问题

也就是说,一旦我创建了一个事件并使用Google Calendar API(v3)更新了一次,我就无法再更新该事件了。当我尝试这样做时,我会得到一个400-无效值的响应。(FWIW我正在用PHP工作)。

根据我在上面提到的帖子中提供的线索,我试图使用etag来解决这个问题(尽管无可否认,我对它们的工作原理的掌握是有限的)。基本上,在事件更新时,API在其响应中返回一个etag,我现在将其保存在数据库中。然后,对于后续(n>1)更新,我从数据库中提取当前etag,并将其包含在http头中:

Content-Type:  application/json
Authorization:  OAuth [token]
If-Match: [etag]

以下是此处"更新条目"标题下的信息:http://code.google.com/apis/gdata/docs/2.0/reference.html#ResourceVersioning

旁注:在上面的谷歌参考中,如果匹配的标题显示为

If-Match: "S0wCTlpIIip7ImA0X0QI"

etag周围有双引号。我用双引号将etag保存在数据库中,就像我在第一次更新响应中收到它们一样。使用curl_setopt/HTTPHEADER添加到标头时,是否需要转义引号或其他内容?

尽管实现了这个etag-If-Match的东西,我仍然得到了相同的400-Invalid值响应。我知道我的请求主体是有效的,因为第一次更新运行良好。后续更新还有一些附加问题。

非常感谢您的帮助。

更新事件时,请确保增加序列号字段。

我也遇到了同样的问题。要增加序列号,您需要跟踪已完成的更新次数,并在更新中包括下一个增量。由于某些原因,第一次更新不需要这个,但随后的更新确实需要它

在事件的第二次更新中使用googlephp库会看起来像这样(减去您正在更新的其他内容):

$calendarID = ID_OF_YOUR_CALENDAR;
$eventID = ID_OF_YOUR_EVENT;
$event = new Google_Event();
$event->setSequence('2');
$calEvent = $cal->events->update($calendarID $eventID, $event);

我就是这么做的。从谷歌获取条目,使其已经有了最新的Etag集,然后将序列增加一并更新条目。

当我使用java时,下面是一个关于java的例子:

com.google.api.services.calendar.model.Event googleCalendarEvent = service.events().get(clientCalendarEvent.getCalendar().getCalendarKey(),clientCalendarEvent.getEventKey()).execute();
updateGoogleCalendarEvent(clientCalendarEvent, googleCalendarEvent);
googleCalendarEvent.setSequence(googleCalendarEvent.getSequence() + 1);
com.google.api.services.calendar.model.Event event = service
      .events()
      .update(clientCalendarEvent.getCalendar().getCalendarKey(), clientCalendarEvent.getEventKey(),
          googleCalendarEvent).execute();

相关内容

  • 没有找到相关文章

最新更新