仅限来自Google Calendar API的公开活动

时间:2016-01-07 06:39:05

标签: javascript calendar google-api google-calendar-api

问题

我需要在客户端通过Javascript从公共日历中提取 12个公开事件,或者有很多公共事件。例子:

  1. 日历共有14个活动。 3是私人的,所以我期待11。
  2. 日历共有18个活动。前三个是私人的。我期待12个活动,而不是9个。
  3. 我一直在使用Google Calendar API Explorer一点也没用(链接会将您带到我已经使用填写的字段的API资源管理器)。无论如何,似乎无法告诉API不包含私人事件。
    注意:我正在执行此API调用而不使用OAuth。使用Google日历网络界面发布活动,因此扩展的属性不在我认为的解决方案之内。我的公开Goog​​le日历ID:rvv7ae2s15ma471lqqo9t5h74s@group.calendar.google.com

    不良解决方案

    如果查看JSON响应,您会发现私有事件具有以下属性和值:

    "visibility": "private"
    

    我可以做的是使用maxResults = 12调用API,只需通过检查上面的JSON属性来过滤掉任何私有事件。

    • 如果nextPageToken == null,则日历不再包含任何事件,并且检索到的结果数量无关紧要。
    • 如果nextPageToken!= null并且在过滤掉私人活动后我剩下少于12个事件,我可以请求另外调用Google Calendar API以获取下一个 24个事件(通过传入非null nextPageToken)。如果此响应的nextPageToken!= null,并且最后两次调用的事件数量总和不等于12,我可以请求接下来的48个事件,依此类推,直到我有12个公共活动。

    问题是我可能需要多次调用Google Calendar API才能获得所需数量的事件。我必须为多个日历执行此程序(例如,如果我有4个公共Google日历,并且每个平均需要3个API调用才能获得12个事件,我将执行12个不同的AJAX调用只是为了获取数据......)。最重要的是,我得到了12个活动,或直到日历用尽为止。

    一个好的解决方案

    我找不到解决这个问题的好方法。我仔细检查了Google API Explorer中的所有字段,绝对没有运气。任何帮助,将不胜感激。

1 个答案:

答案 0 :(得分:0)

我无法找到我渴望的'好解决方案'的答案,但我确实找到了可接受的妥协方案。

一个好的解决方案

在我的问题中,我已经声明我必须从多个日历中“仅获取公共事件”,并且如果每个日历平均需要3个API调用才能获得X公共事件,我需要调用Google日历API 3 * C,其中C =日历数。

Google API客户端库提供了一个名为Batch Requests的内容,它允许我一次调用多个API调用!因此,我可以使用批量请求在一个请求中获取C日历的所有事件,过滤掉任何私有事件,使用C> =日历生成另一个批量请求,依此类推。

总之,我可以在平均3个API请求中获得C日历的X公共事件,而不是3 * C请求。