首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Google Calendar API -只能更新事件一次

Google Calendar API -只能更新事件一次
EN

Stack Overflow用户
提问于 2012-03-14 04:34:03
回答 3查看 4.6K关注 0票数 4

我遇到了这篇文章中描述的同样的问题:

Google Calendar api v3 re-update issue

也就是说,一旦我创建了一个事件并使用Google Calendar API (v3)更新了一次,我就不能再更新该事件了。当我尝试这样做时,我得到了一个400 - Invalid value响应。(FWIW我在PHP中工作)。

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

代码语言:javascript
复制
Content-Type:  application/json
Authorization:  OAuth [token]
If-Match: [etag]

下面是“更新条目”标题下的信息:http://code.google.com/apis/gdata/docs/2.0/reference.html#ResourceVersioning

Sidenote:在上面的google ref中,If-Match头显示为

代码语言:javascript
复制
If-Match: "S0wCTlpIIip7ImA0X0QI"

使用双引号将etag括起来。我使用双引号将etags保存在数据库中,与我在第一个更新响应中收到的etags完全相同。在使用curl_setopt/HTTPHEADER添加到头文件时,是否需要转义引号或其他内容?

尽管实现了etag If-Match,我仍然得到了相同的400 - Invalid value响应。我知道我的请求体是有效的,因为第一次更新运行良好。只是围绕后续更新还有一些额外的问题。

任何帮助都非常感谢。

EN

回答 3

Stack Overflow用户

发布于 2012-11-15 21:11:18

请确保在更新事件时递增序列号字段。

票数 14
EN

Stack Overflow用户

发布于 2014-05-17 02:18:10

我也有同样的问题。要递增序列号,您需要跟踪已完成的更新次数,并在更新中包含下一次递增。出于某些原因,第一次更新并不需要这样做,但后续的更新确实需要这样做。

在事件的第二次更新中使用google php库将如下所示(减去您正在更新的其他内容):

代码语言:javascript
复制
$calendarID = ID_OF_YOUR_CALENDAR;
$eventID = ID_OF_YOUR_EVENT;

$event = new Google_Event();
$event->setSequence('2');

$calEvent = $cal->events->update($calendarID $eventID, $event);
票数 0
EN

Stack Overflow用户

发布于 2014-09-06 01:04:03

我就是这么做的。从Google获取条目,以便它已经设置了最新的Etag,并将序列递增1,然后更新条目。

因为我使用的是java,所以下面是一个使用java的例子:

代码语言:javascript
复制
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();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9691665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档