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天).
希望这有助于将来的其他人.
另一种选择是使用Zend Google Calendar库,它是zend框架的一个独立部分,因此您不需要整个zend框架
http://framework.zend.com/manual/en/zend.gdata.calendar.html
一看完这些例子就不那么难了.