【问题标题】:Importing Google Calendar data (via API v3) to Google App Engine with Java使用 Java 将 Google 日历数据(通过 API v3)导入 Google App Engine
【发布时间】:2012-05-25 16:13:49
【问题描述】:

我正在为预订系统编写 Java REST API,其中事件数据来自 Google 日历(只读)。我目前正在尝试找出从 Google 日历获取事件数据并将其存储在 Google App Engine 的 JPA 数据存储区中的最佳方法。我还有几个要求:

  • 我需要保存以前的日历数据。仅仅删除数据库中的所有内容并用新数据替换它是不够的,因为我想保留数据的历史视图以用于统计目的。
  • 我需要在事件数据更改时通知用户,特别是删除。这需要我将新的事件数据(来自 API)与旧的事件数据(来自 JPA 数据存储区)进行比较。

有没有人对如何做有任何一般性的指导和建议。我是否通过尝试将数据复制到数据存储中以正确的方式解决问题?我是否应该在每次需要使用数据时都发出 API 请求?如果我这样做,有没有办法启动一些邮件服务,直接在 Google 日历中通知用户事件更改?

【问题讨论】:

  • 我将很快开始类似的问题领域,但我们决定只在应用程序中创建事件并将更改推送到日历,而不是从日历中读取更改以在应用程序中创建事件。
  • 这对我来说不是一个选项,因为管理用户希望继续使用 Google 日历。最后,它使项目更容易,因为我不必为事件上类似 CRUD 的任务开发管理 GUI。

标签: java google-app-engine google-calendar-api


【解决方案1】:

我认为尝试在数据存储中复制每个事件的信息是次优的。如果你想要一切,那么你最终会存储大量数据,我怀疑其中大部分都没有用。

如果您想存储数据以进行统计分析,我建议您确定要跟踪的最小字段集是什么,然后将其存储起来。一组合理的字段可能是:事件 ID、名称、时间、参加者、位置、描述和用于簿记目的的内部版本号。每次字段更改时增加版本号,并保存新的字段信息。如果最近检索到的条目的哈希与已保存的哈希匹配,您可以保存字段的哈希而不保存新版本。

由于您不再将整个事件存储在服务器上,因此当您需要事件详细信息时是否直接查询 API 的问题显然是“是”。

Google 日历会在创建或更改日历活动时提供电子邮件通知。如果您担心用户会收到有关其日历上出现新事件的通知,可以通过将sendNotifications 字段(在对insert a new event 的调用中)设置为true 来轻松解决。 API 中的更新和删除调用(以及用户修改事件时的日历 UI)中存在类似的功能。

我在此实现中看到的最困难的部分是决定您的应用程序如何在用户进行修改时确定事件何时发生变化。 (您的代码所做的更改可以立即反映在您保存在数据存储中的数据中。)如果所有事件都出现在一个日历上,您可以轮询 API 以获取 list of events,并将 updatedMin 字段与您上次查询更新的时间。如果事件在多个日历上,方法是相同的,但您需要为每个日历创建一个列表。

请注意,您提供给应用程序的任何凭据都需要能够读取和写入您正在修改的任何日历。作为初始方法,我建议您为您的应用程序创建一个主日历,将其列为您正在跟踪的所有事件的参与者。您代表用户创建的活动会将用户列为与会者。用户创建并希望与您的应用程序关联的事件需要将主日历添加为参与者。最后一点可能需要管理用户接受一些培训以正确地与系统交互。

上述方法的替代方法是让所有用户将其日历的访问权限委托给您的应用程序,但您必须管理多组凭据,并可能清除用户日历上您不感兴趣跟踪的任何事件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多