如何使用Google API从Google日历中获取当前或下一个活动?

时间:2010-05-04 13:10:21

标签: google-api google-calendar-api


简介

我正在尝试更换随叫随到的程序员在指定日期携带的“待命”手机。如果发生紧急情况,服务台会拨打该手机。我们现在计划切换到一个Web表单,帮助台将在紧急情况下填写。提交表单后,脚本将与Google日历(使用php api)对话,查看谁在通话,并向当时正在通话的程序员发送短信,提醒他/她紧急情况。如果当前没有人在通话,那么下一个随叫随到的人将会收到一封电子邮件,这样他们就可以在第二天早上第一时间处理问题。除了重复发生的事件之外,我们所有这些都有效。

使用单个事件并将其设置为true工作正常,直到我决定让查询处理当前事件的检索(而不是自己检索一堆事件和手动检查时间)。例如,如果某人当前正在通话,则应该存在具有该程序员姓名的当前事件并返回。此事件可能会或可能不会再次发生,具体取决于某人是否有交易日。如果当前没有安排任何事件,那么我会转到另一个通过电子邮件发送下一个待命电话的人而不是发送短信。在else部分,我将start max切换为将来的7天。


查询代码如下所示。

$now = date("c");
$gdataCal = new Zend_Gdata_Calendar($client);
$query = $gdataCal->newEventQuery();
$query->setUser('[our_resource_is_here]@resource.calendar.google.com');
$query->setVisibility('private');
$query->setProjection('full');
$query->setOrderby('starttime');
$query->setStartMin($now);
$query->setStartMax($now);
$query->setFutureevents(false);
$query->setSingleevents(true);
$query->setSortorder('a');
$eventFeed = $gdataCal->getCalendarEventFeed($query);
foreach ($eventFeed as $event) {
    foreach ($event->when as $when) {
        echo $when->startTime.'';
        echo $when->endTime.'';
        echo $event->title->text.'';   
    }
}

采取的步骤

1)我创建了一个周期性事件,从8-5开始,没有结束到重复周期 2)然后我删除一个单独的事件(测试某个交易日)并为咯咯笑添加另一个事件(其他事件没有必要,但有助于显示问题)。

以下数据信息:
在查询范围中删除的重复事件标题为“Ben”,并且在该日实际安排的不重复的第二个事件称为“test”。返回标题,开始时间和结束时间时的输出如下。请记住,日历上没有“Ben”事件,但即使设置了非常严格的开始时间限制,它也会显示3次(参见代码中的$ now)。


with $ query-> setSingleevents(false);“

2010-05-03T08:00:00.000-05:00
2010-05-03T17:00:00.000-05:00
Ben
2010-05-03T08:00:00.000-05:00
2010-05-03T17:00:00.000-05:00 
Ben
2010-05-03T08:00:00.000-05:00
2010-05-03T17:00:00.000-05:00
Ben
2010-05-03T13:30:00.000-05:00
2010-05-03T15:00:00.000-05:00
test

with“$ query-> setSingleevents(true);”

2010-05-03T13:30:00.000-05:00
2010-05-03T15:00:00.000-05:00
test

结果说明

我真的只希望函数返回某个人的名字(即仅当前事件)。如果当前事件不存在,那么我将拉下接下来7天的活动,以确保能够抓住任何周末和假期,并返回即将举行的第一个活动。

上面的第二个输出(单个事件设置为true)看起来像是解决了问题,但它只解决了非重复事件存在时的问题。如果我将所有内容重复出现,那么如果我有setSingleevents(true),则不会返回任何数据。

我有一种预感,这与我将最小和最大开始时间设置为$ now(当前时间)有关,但由于这种情况对非重复性有效,我不明白问题是什么(特别是当我'我试图将重复事件视为他们自己的单一事件。

同样,这似乎一切正常,除非我使用重复发生的事件(在我看来,每周手动添加时间并不是一个非常好的解决方案)。

-
谢谢你的帮助,

1 个答案:

答案 0 :(得分:0)

事件具有事件状态。我能够通过以下方式在开发机器上解决这个问题。我不确定它是最漂亮的做事方式,但它完成了工作。不幸的是我在测试机器上遇到了困难,我无法弄清楚为什么它在那里不起作用。我已经决定这可能是由于两个版本的php的一些疯狂差异。

$eventStatusUrl = $event->getEventStatus();
list($trash, $eventStatus) = explode('#', $eventStatusUrl);
if ($eventStatus == 'event.confirmed') {
    return $event->title->text;
}