2010-08-11 63 views
3

我正在寻找一种解决方案来缓存PHP中的RSS提要。我打算用Magpie RSS解析器(http://magpierss.sourceforge.net/)进行解析。但是,那么我怎样才能缓存提要(有时候提要提供商不会让我阅读相同的提要等)?PHP RSS缓存

问候。

+2

MagpieRSS有一个内置缓存,缓存检索到的文件1小时。有关可以使用的设置,请参阅rss_fetch.inc。 – Kwebble 2010-08-12 12:09:05

回答

3
  • 您获取提要。将结果保存到数据库或文件(serialize())。
  • 当是时候再取料,
  • 检查文件是否存在,如果不能创建和如果文件存在更新
  • ,检查数据库或文件的时间戳。
  • 如果它大于您的阈值(例如20秒),则您重新提取,否则您只返回缓存的提要。
  • 如果无法获取无论什么原因,饲料,返回缓存版本多达超时时间(比如20分钟)

瞧缓存。

+0

您也可以执行条件GET,以避免在Feed没有更改的情况下再次传送Feed。 – Artefacto 2010-08-11 23:07:20

2

提取饲料列表说,每小时使用wget。

将它们写入名为/ cache的文件夹中

重复。

罚款,只要这会工作的)每小时是不够好B)每小时是所有饲料不够好,和c)你有机会与cron

总得知道你为什么被获取和服务的饲料,除非你他们正在对它们进行一些后期分析。

1

@Byron惠特洛克 好吧,我是在做〜同样的事情。但我决定不使用MagPie。相反,我使用rss2html.php,它基于我提供的HTML模板从RSS获取HTML生成代码。当我说include(“rss2html.php”)时,它会生成HTML。所以不是缓存RSS,而是缓存已经生成的HTML。这是我非常简单的代码块:

<?php 
      $hashfromURL = hash("md5",$url); 
      $cachefile = "cache/rss/".$hashfromURL.".html"; 

      $cachetime = 5*60; //5 minuta TODO:Pri deployment-u povecati na sat-dva. 
      //Serviraj is kesha ako je mladji od $cachetime 
      if(file_exists($cachefile) && (time() - filemtime($cachefile) < $cachetime)) 
      { 
       include($cachefile); 
       echo "RSS ucitan iz kesha!"; 

      } 
      else{//Ucitaj RSS ponovo  

       $XMLfilename = $url; 

       //Pocni dump buffera 
       ob_start(); 

       include("rss2html.php");//HTML parsiran sadrzaj RSS-a 

       //Otvori kesh fajl za pisanje 
       $fp = fopen($cachefile, 'w'); 

       //Sacuvaj sadrzaj izlaznog buffer-a u fajl 
       fwrite($fp, ob_get_contents()); 

       //zatvori fajl 
       fclose($fp); 

       //Posalji izlaz na browser 
       ob_end_flush(); 
       echo "RSS osvjezen - feed ponovo ucitan!"; 
      } 

    ?>