在PHP中获取Google日历事件

12
我正在为某人创建一个博客。 他们想要拉取大量数据,并将其紧密集成到设计中,因此标准小部件是不行的。直到现在都还好。
他们有一个公共访问的Google日历,上面有各种事件,我想获取接下来的5个事件(从“现在”开始),并显示事件标题,事件开始时间,地点以及到gcal条目的链接。
据我所见,有三个选项可以获取gcal源:XML、ical或包含一些非常奇怪的JSON的HTML。 XML似乎是逻辑选择,对吗?
嗯,XML源(在atom源描述之后)实际上只是一堆混乱的HTML。解析这个可能是可能的,但因为重复事件(在日历上有几个)仅显示该事件的第一个实例并且(显然)没有关于下一个实例的任何信息,所以这是一个巨大的痛苦。
那么我是不是有点愚蠢?有没有通过XML API进行操作的方法来显示我想要的内容?
或者如果我用iCal会更顺利?我从未使用PHP进行过iCal,因此如果您有,请建议您使用过的库,以使自己的工作更简单。
编辑:感谢答案,我下载了Zend Gdata包(幸运的是与Zend Framework分离)。做我需要的事情就像这样简单:
require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Gdata');
Zend_Loader::loadClass('Zend_Gdata_HttpClient');
Zend_Loader::loadClass('Zend_Gdata_Calendar');
$service = new Zend_Gdata_Calendar();
$query = $service->newEventQuery();

$query->setUser('your_user@googlemail.com');

$query->setVisibility('public');
$query->setProjection('full');
$query->setStartMin(date('Y-n-j'));
$query->setStartMax(date('Y-n-j', time() + (60*60 *24*8)));
$query->setOrderby('starttime');

try { $eventFeed = $service->getCalendarEventFeed($query); }
catch (Zend_Gdata_App_Exception $e) { return; }

foreach ($eventFeed as $event) 
    echo $event; // do something real here

这样可以获取一周的事件(是的,setStartMax是排它性的,因此将其设置为未来8天是必需的)。

希望这能帮助将来的某个人。

3个回答

8

在提问之前我看到过这个,但是名字中的“Zend”让我望而却步。现在你说我不需要整个笨重的框架,我会好好看看它。谢谢。 - Oli

4

如果有人需要帮助,我已经找到了如何获取除默认日历之外的其他日历。您可以进入您的Google日历,并查看日历设置,在底部有一个格式类似于非常长的电子邮件地址的日历ID。(例如:adg5jcq8gk7lsp6rrbmrm8c@group.calendar.google.com)使用这个ID,结合 $query->setUser()函数来使用这个特定的日历。


谢谢...一直在网上搜寻如何做到这个! - James Skidmore

1
提醒大家,如果您使用代码中的echo $event;,而它没有显示任何内容,那么您可能会误以为查询失败了。
这里是一个小片段,应该会打印出一些内容:
foreach ($eventFeed as $event) {
  echo $event->title->text . '<br />';
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接