使用PHP获取Google日历活动

Oli*_*Oli 12 php xml icalendar google-calendar-api atom-feed

我正在为某人创建一个博客.他们希望获取大量数据并将其非常紧密地集成到设计中,因此标准小部件是禁止的.到目前为止一切都很好.

他们有一个公共访问Google日历,上面有各种活动,我想抓住接下来的5个事件(从"现在"开始)并显示事件标题,当事件的实例开始时,它的位置和gcal的链接项目.

从我所看到的,抓取gcal提要有三种选择:XML,ical或HTML(包含一些非常重要的JSON).XML似乎是合乎逻辑的选择,对吧?

那么XML feed(在原子提要描述之后)实际上只是很多非常有趣的HTML.解析这是可能的,但后面是一个巨大的痛苦,因为重复发生的事件(日历上有几个)只显示该事件的第一个实例,并且(显然)没有关于下一个实例的时间的信息.

我只是有点密集吗?有没有办法显示我想要只是黑客攻击XML API?

或者我会通过iCal获得更好的运气吗?我从来没有用PHP做过任何iCal,所以如果你有,请建议你用过的任何libs让你自己更简单.

编辑:多亏了答案,我下载了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
Run Code Online (Sandbox Code Playgroud)

这应该可以让你获得一周的活动(是的,setStartMax是独家的,因此需要将它设置为8天).

希望这有助于将来的其他人.

bum*_*box 8

另一种选择是使用Zend Google Calendar库,它是zend框架的一个独立部分,因此您不需要整个zend框架

http://framework.zend.com/manual/en/zend.gdata.calendar.html

一看完这些例子就不那么难了.