2010-08-11 61 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!"; 
      } 

    ?>