首页 文章

使用PHP获取Google日历活动

提问于
浏览
12

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

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

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

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

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

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

Edit: 感谢答案,我下载了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 Google Calendar库,它是zend框架的一个独立部分,因此您不需要整个zend框架

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

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

  • 4

    如果它可以帮助其他人,我想出了如何获取默认值以外的日历 . 如果您进入谷歌日历并查找日历设置,则会在底部显示一个日历ID,其格式就像一个非常长的电子邮件地址 . (例如:adg5jcq8gk7lsp6rrbmrm8c@group.calendar.google.com)使用$ query- > setUser()使用该特定日历 .

  • 1

    作为使用该代码的任何人, echo $event; 没有为我显示任何内容,所以我认为查询失败了 .

    这是一个应该打印的代码片段:

    foreach ($eventFeed as $event) {
      echo $event->title->text . '
    '; }

相关问题