谷歌日历与数据库同步

本文关键字:同步 数据库 日历 谷歌 | 更新日期: 2023-09-27 18:14:18

我正在使用 google calendar api v2 ,目前正在寻找一种方法来同步一个谷歌日历与本地应用程序/数据库(使用 C# ,数据存储在 SQL Compact 数据库)。我这样做是因为我的目标是创建一个应用程序,仍然功能一旦互联网连接已经丢失(因此数据需要存储在本地)。在应用程序级别查询和更新事件工作得很好,但是我遇到了几个问题:

1)查询事件(存储在数据库中)是否仍然存在于google日历中:

我现在的系统还算正常。对于存储在数据库中的每个日历事件,我针对特定的"键"(大约26个字符串)对google calendar运行查询—如果没有返回任何内容,则该事件必须不再存在。但这带来了两个问题;第一个问题是,为每个日历事件执行单独查询的成本很高,而且对于较大的日历来说不是很有用。第二个问题是,过了一段时间后,日历开始总是不返回任何内容,使应用程序认为所有事件已被删除-显然不理想,因为我想做的最后一件事就是删除所有本地事件。我最好的猜测是,谷歌开始返回null也许是因为我发送了太多的请求-虽然我不能确定。

编辑:我已经用entry.Status解决了这个问题。如果一个事件被取消,它返回url:http://schemas.google.com/g/2005#event.canceled

使用这个你可以检测哪些事件已被删除在谷歌的一边。

2)查询google日历上的事件修改日期:

目前,如果我想查询在某个日期之后被修改的事件,我在查询中添加以下行:

query.ExtraParameters="orderby=startime&sortorder=ascending&updated-min=" + date;

返回自提供的日期以来修改的所有日历事件,但是,据我所知,似乎没有任何方法可以检索事件被修改的实际日期。至少在v2中不是。这是正确的吗?如果是这样,我还能怎么做呢?

我遇到的问题要么是因为谷歌日历api的功能有限,要么是因为文档中没有足够的信息。

如果有人能就这些问题提供任何见解,我将不胜感激。

谷歌日历与数据库同步

感谢以上内容-它帮助我根据修改后的日期获得编辑后的约会。当返回时,我们得到修改后的日期如下-希望这就是您的意思/were after:

EventFeed calFeed = service.Query(query) as EventFeed;
while (calFeed != null && calFeed.Entries.Count > 0) {
    foreach(EventEntry entry in calFeed.Entries) {
        DateTime modified = entry.Edited.DateValue;
    }
}