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

4
我遇到了与此帖子描述的相同问题:Google Calendar api v3 re-update issue。即,一旦我使用Google日历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标头如下所示:

If-Match: "S0wCTlpIIip7ImA0X0QI"

在etag周围加上双引号。我将etag以双引号的形式保存在数据库中,就像我在第一个更新响应中收到的一样。当使用curl_setopt/HTTPHEADER添加到头部时,我需要转义引号或其他内容吗?

尽管实现了这个etag If-Match功能,但仍然收到相同的400 - 无效值响应。我知道我的请求正文是有效的,因为第一个更新可以正常工作。只是有一些与后续更新相关的额外问题。

非常感谢任何帮助。


你是否遵循以下指示:“使用 If-Match 更新条目时,请先获取要更新的条目。对条目进行任何所需更改,然后创建一个包含修改后条目的新 PUT 请求。” - user663031
谢谢您的跟进。我最终实现了一个“更新”功能,其中我删除了现有事件并创建了一个新事件。 - G.S.
3个回答

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

是的,您应该增加序列号并将其与更新请求一起发送。 - Jaffar Hussain
Google真的应该在文档中提到,这个字段是后续更新所必需的。https://developers.google.com/google-apps/calendar/v3/reference/events/update - TaeKwonJoe

0

这就是我的做法。从谷歌获取条目,因此它已经设置了最新的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();

0

我曾经遇到过同样的问题。要增加序列号,您需要跟踪您已经完成了多少次更新,并在您的更新中包括下一个增量。由于某种原因,第一次更新不需要这样做,但是后续的更新需要这样做。

在您对事件进行第二次更新时,使用谷歌PHP库可能会像这样(减去您正在更新的其他内容):

$calendarID = ID_OF_YOUR_CALENDAR;
$eventID = ID_OF_YOUR_EVENT;

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

$calEvent = $cal->events->update($calendarID $eventID, $event);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接