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