【问题标题】:how to get event details from google calendar如何从谷歌日历获取活动详情
【发布时间】:2014-12-31 01:19:09
【问题描述】:

当在日历中创建新事件时,我成功地从 google 日历将推送通知发送到我的系统。 推送通知在 POST 正文中没有数据,POST 标头如下:

[Host] => xxxxxx.xxxx.com
[Content-Type] => application/json; charset=UTF-8
[Accept] => */*
[X-Goog-Channel-ID] => xxxxxxx-xxxxxxxx-8824-f0c2166878be
[X-Goog-Channel-Expiration] => Thu, 04 Dec 2014 04:27:13 GMT
[X-Goog-Resource-State] => exists
[X-Goog-Message-Number] => 11897215
[X-Goog-Resource-ID] => xxxxxxxxxx-xxxx-pSbC27qOUfg
[X-Goog-Resource-URI] => https://www.googleapis.com/calendar/v3/calendars/xxxxxxx@gmail.com/events?key=AIzaSyC_0nytiZWHfabrpWiExxxxxxxxxxx&alt=json
[Content-Length] => 0
[Connection] => Keep-alive
[Accept-Encoding] => gzip,deflate
[User-Agent] => APIs-Google; (+https://developers.google.com/webmasters/APIs-Google.html)

日历中创建的新活动详情在哪里? 我如何获得它们?

网上没有信息,谷歌文档中也没有信息(搜索了几个小时): https://developers.google.com/google-apps/calendar/v3/push

活动详情在哪里??

更新:

我使用以下代码在我的日历上设置了手表:

service = new Google_Service_Calendar($client);         
$channel =  new Google_Service_Calendar_Channel($client);
$uuid = gen_uuid();
$channel->setId($uuid);
$channel->setType('web_hook');
$channel->setExpiration('1919995862000');

global $sugar_config;
$address = $sugar_config['site_url'] . "/index.php?entryPoint=updateFromCal";
$channel->setAddress($address);
$watchEvent = $service->events->watch($bean->google_cal_id_c, $channel);

这是我发送到谷歌日历 api 的频道详细信息:

[address] => https://mydomainXXXX/index.php?entryPoint=updateFromCal
[expiration] => 1919995862000
[id] => xxxxxxxxxxxxxxx--4558-ac19-b82e0ca32206
[kind] => 
[params] => 
[payload] => 
[resourceId] => 
[resourceUri] => 
[token] => 
[type] => web_hook
[modelData:protected] => Array
    (
    )

[processed:protected] => Array
    (
    )

对于我在日历中创建的每个新事件,我仍然在响应中获得相同的资源 ID!为什么我无法获取我刚刚创建的事件的事件 ID?我做错了什么?我在看活动或频道吗?

我得到的回复还是上面提到的,一直都是同一个resource id。

【问题讨论】:

  • 我应该在推送通知本身中接收触发推送通知的事件详细信息吗?如果没有,我怎么知道是哪个事件变化触发了它?
  • @rodnika 不幸的是没有。请看下面我的回答。简而言之,您需要进行同步以获取更改的事件。
  • 我认为您可以保存生成的 UUID,以便稍后您可以使用该值获取事件

标签: php calendar google-api google-calendar-api


【解决方案1】:

推送不包含任何数据。它只会告诉您该资源中的某些内容发生了变化。你需要做一个列表请求来找出它是什么。这个列表请求最好是增量同步。在此处查看如何进行同步:https://developers.google.com/google-apps/calendar/v3/sync

【讨论】:

  • 你是对的。首先,您设置一个“监视”,以便 Google 在您监视的资源发生更改时知道何时向您发送推送通知 (developers.google.com/calendar/v3/push)。然后您执行增量同步以检查具体更改了哪些资源。
【解决方案2】:

您缺少增量同步。来自the creators themselves,根据我的口味稍作修改:

应用程序需要做的第一件事是订阅新的推送功能,即订阅感兴趣的日历。当日历更改时,Google 会通知您的应用,并且该应用会调用 API 以获取更新。

例如,假设您有一个日历 my_calendar@my-host.com。您的应用托管在具有 my-host.com 域的服务器上,并且应将推送通知传送到 HTTPS 网络挂钩 https://my-host.com/notification

每次 my_calendar@my-host.com 更改时,Google 日历服务器都会在 https://my-host.com/notification 触发网络挂钩回调。收到回调后,应用需要执行incremental sync

【讨论】:

    【解决方案3】:

    要获取事件详细信息,您需要发出GET 请求,该请求应将资源信息作为 JSON 响应返回。您可以通过传入日历 ID 和事件 ID 来执行此操作(在这种情况下,eventId 应该是您的资源 ID,假设您的通知设置为观看事件)。

    【讨论】:

    • 感谢您的回复,安迪。无论我在日历中添加哪个新事件,我收到的资源始终具有相同的资源 ID。根据您的回复,我根本不看活动,因为这样我就会在新活动的每条推送通知消息中获得不同的资源 ID,对吧?
    • 我更新了帖子,以便您可以看到手表的代码。我在看频道或活动吗?如果我观看事件,为什么不将新的事件 ID 作为资源 ID?
    • 您确定我应该在推送通知响应的“X-Goog-Resource-ID”参数中获取我在日历中添加的新事件的事件ID吗?跨度>
    • 我同意文档可以更清楚,但我相信 resourceId 不是 eventId。您需要尝试@luc 或我的答案。
    猜你喜欢
    • 2011-11-11
    • 2015-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-08
    • 1970-01-01
    相关资源
    最近更新 更多