2010-08-11 2 views
3

Я искал решение для кэширования RSS-каналов в PHP. Я планировал провести синтаксический разбор с парсером RSS Magpie (http://magpierss.sourceforge.net/). Но тогда как я могу использовать кеширование фидов (в случае, если провайдер кормов не позволит мне читать один и тот же фид и т. Д.)?PHP-кеширование RSS

С уважением.

+2

MagpieRSS имеет встроенный кэш, который кэширует извлеченные файлы в течение 1 часа. См. Rss_fetch.inc для параметров, которые вы можете использовать. – Kwebble

ответ

3
  • Вы получаете питание. Сохраните результаты в базе данных или файле (serialize()).
  • Когда пришло время, чтобы снова принести корм,
  • Проверьте, существует ли файл, если не создавать и обновлять
  • Если файл существует, то проверьте метку БД или файла.
  • , если он старше вашего порога (скажем, 20 секунд), тогда вы обновляете, иначе вы просто возвращаете кешированный фид.
  • Если вы не можете получить корм по какой-либо причине, вы возвращаетесь в кэше версии до периода времени (скажем, 20 минут)

Вуаля кэширования.

+0

Вы также можете выполнить условное GET, чтобы избежать повторной передачи фида, если он не изменился. – Artefacto

2

получить список каналов, скажем, каждый час, используя wget.

Запишите их в папку с именем/кэш

Repeat.

Это будет работать хорошо до тех пор, пока) ежечасно является достаточно хорошим б) ежечасно достаточно хорошо для всех каналов и в) у вас есть доступ к CRON

Готт Интересно, почему вы извлекая и не обслуживаете каналы, если вам однако, они делают некоторый анализ после выборки.

0

не сороки со встроенным кэшированием? Почему бы не использовать это? Я лично использую SimplePie. Вот документ для кэширования для SimplePie:

http://simplepie.org/wiki/faq/how_does_simplepie_s_caching_http_conditional_get_system_work

+0

Интересно, почему меня проголосовали? :-( –

+0

+1, вы не должны были быть опущены, я нашел это полезным. –

1

@Byron Уитлок Хорошо, я делал ~ то же самое. Но я решил не использовать MagPie. Вместо этого я использую rss2html.php, который генерирует HTML-код из RSS i fetch, на основе 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!"; 
      } 

    ?> 
Смежные вопросы