在PHP中获取Google日历事件

在PHP中获取Google日历事件,php,xml,google-calendar-api,icalendar,atom-feed,Php,Xml,Google Calendar Api,Icalendar,Atom Feed,我正在为某人创建一个博客。他们希望引入大量数据,并将其紧密地集成到设计中,因此标准小部件是不允许的。到目前为止,这还不错 他们有一个公共访问的谷歌日历,上面有各种各样的事件,我想抓取接下来的5个事件(从“现在”开始),并显示事件标题、事件实例开始的时间、位置以及到gcal项目的链接 从我看到的情况来看,有三种获取gcal提要的选项:XML、ical或HTML(包含一些非常棒的JSON)。XML似乎是合乎逻辑的选择,对吗 XML提要(在atom提要描述之后)实际上只是一堆虚假的HTML。解析这一点

我正在为某人创建一个博客。他们希望引入大量数据,并将其紧密地集成到设计中,因此标准小部件是不允许的。到目前为止,这还不错

他们有一个公共访问的谷歌日历,上面有各种各样的事件,我想抓取接下来的5个事件(从“现在”开始),并显示事件标题、事件实例开始的时间、位置以及到gcal项目的链接

从我看到的情况来看,有三种获取gcal提要的选项:XML、ical或HTML(包含一些非常棒的JSON)。XML似乎是合乎逻辑的选择,对吗

XML提要(在atom提要描述之后)实际上只是一堆虚假的HTML。解析这一点是可能的,但这背后是一个巨大的痛苦,因为重复发生的事件(日历上有几个)只显示该事件的第一个实例,而(显然)没有关于下一个实例何时启动的信息

所以我只是有点笨?有没有一种方法可以显示我想要的只是通过XML API进行黑客攻击

还是通过iCal我会有更好的运气?我从来没有用PHP做过任何iCal,所以如果你做过,请建议你用过的任何LIB来简化你自己

编辑:多亏了这个答案,我下载了Zend Gdata包(谢天谢地,它与Zend框架的其余部分是分开的)。做我需要的事情就像这样简单:

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天)


希望这对将来的其他人有所帮助。

另一个选择是使用Zend Google日历库,它是Zend框架的一个单独部分,因此您不需要整个Zend框架


只要看一看这些例子,就不难了

作为对任何使用代码的人的提醒,
echo$event没有为我显示任何内容,因此我认为查询失败

下面是一个应该打印某些内容的代码段:

foreach ($eventFeed as $event) {
  echo $event->title->text . '<br />';
}
foreach($eventFeed作为$event){
echo$event->title->text.“
”; }
为了防止它对其他人有帮助,我想出了如何获取默认日历以外的日历。如果您进入谷歌日历并查找日历设置,则底部有一个日历ID,其格式类似于一个很长的电子邮件地址。(示例:adg5jcq8gk7lsp6rrbmrm8c@group.calendar.google.com)使用$query->setUser()来使用特定的日历。

我在询问之前看到了这个,但被“Zend”吓跑了以我的名义。现在,您已经说过我不需要整个cludging框架,我将对其进行适当的查看。谢谢,谢谢。。。一直在网上搜寻如何做到这一点!