Кэширование RSS в PHP

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

С Уважением.


person azec-pdx    schedule 11.08.2010    source источник
comment
MagpieRSS имеет встроенный кеш, который кеширует полученные файлы в течение 1 часа. См. Rss_fetch.inc для настроек, которые вы можете использовать.   -  person Kwebble    schedule 12.08.2010


Ответы (4)


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

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

person Byron Whitlock    schedule 11.08.2010
comment
Вы также можете выполнить условное GET, чтобы избежать повторной передачи фида, если он не изменился. - person Artefacto; 12.08.2010

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

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

Повторение.

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

Должен задаться вопросом, почему вы загружаете и обслуживаете каналы, если только вы не проводите их анализ после получения.

person Cups    schedule 11.08.2010

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

    ?>
person azec-pdx    schedule 13.08.2010

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

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

person Angel S. Moreno    schedule 12.08.2010