Google日历与数据库同步

时间:2013-05-17 10:44:13

标签: c# google-calendar-api

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

1)查询Google日历中是否仍存在某个事件(存储在数据库中):

我目前的系统或多或少都在工作。对于存储在数据库中的每个日历事件,我针对该特定“密钥”(约26个字符串)针对谷歌日历运行查询 - 如果未返回任何内容,则该事件必须不再存在。但这会导致两个问题;第一个是为每个日历事件执行单独的查询是昂贵的,并且对于较大的日历实际上并不是非常有用。第二个问题是,一段时间后,日历开始总是不返回任何内容,使应用程序认为 all 事件已被删除 - 显然不理想,因为我要做的最后一件事是删除所有当地活动。我最好的猜测是谷歌开始返回null可能是因为我发送了太多请求 - 虽然我不能确定。

编辑:我使用entry.Status解决了这个问题。如果某个事件被取消,则会返回该网址: http://schemas.google.com/g/2005#event.canceled

使用此功能,您可以检测谷歌一侧已删除的事件。

2)在Google日历上查询已修改日期的事件:

目前,如果我想查询在特定日期之后修改的事件,我将以下行添加到我的查询中:

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

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

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

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

1 个答案:

答案 0 :(得分:2)

感谢上述内容 - 它帮助我根据修改日期取回已编辑的约会。返回时,我们得到如下修改日期 - 希望这是你的意思/之后:

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;
    }
}