如何在PHP中创建iCal ics Feed

时间:2011-07-12 08:17:33

标签: php mysql icalendar

我正在寻找创建iCal Feed的细节,以便在Google日历和人群手机等应用中使用。

我目前有一个使用iCalendar类的脚本,当访问网址时,会创建一个ics文件并发送到浏览器:

  function returnCalendar() {
    $filename = $this->getConfig( 'filename' );
    $output   = $this->createCalendar();
    $filesize = strlen( $output );
    if( 'xcal' == $this->format )
      header( 'Content-Type: application/calendar+xml; charset=utf-8' );
    else
      header( 'Content-Type: text/calendar; charset=utf-8' );
    header( 'Content-Length: '.$filesize );
    header( 'Content-Disposition: attachment; filename="'.$filename.'"' );
    header( 'Cache-Control: max-age=10' );
    echo $output;
    die();
  }

我希望(正如我之前提到的)创建一个feed(每个用户一个唯一的url),并且想知道这个技术问题?我以为我需要一个cronjob来为每个人生成一个calandar,然后将用户链接到这个feed,但是如果只有一个用户使用该Feed,这似乎效率非常低。

是否可以将脚本设置为仅在某人请求calandar然后再向其发送适当的calandar时运行?

有谁知道Google Calandar等多久更新一次,它是如何工作的,以及我如何测试它?

非常感谢你的时间,

2 个答案:

答案 0 :(得分:2)

无需创建cronjob

如果您创建的脚本需要user_id和一些auth_key,并且在获取所有详细信息并将其解析为Feed后,它可以像这样工作

Cronjob是一种选择,以防这种类型的脚本需要服务器端密集型 然后使用Cronjob创建缓存和公共脚本,以将缓存数据部署到用户feed-reader

我认为大多数Feed都是在查询时创建的,而不是预先创建来缓存结果

您可以使用此库轻松创建Feed http://ajaxray.com/blog/php-universal-feed-generator-supports-rss-10-rss-20-and-atom

注意1:不要忘记连接大部分时间是从用户端到服务器端启动的!所以大多数情况下服务器没有通知你,但你要求服务器通知

答案 1 :(得分:1)

我会将iCal calandar类用于PHP,然后将用户链接到一个实时生成的PHP文件(可能会使用某种半小时的缓存系统来阻止它被轰炸)。

使用cronjob生成数据会对cpu的使用产生很大的影响!