PHP RSS кеширование - PullRequest
       19

PHP RSS кеширование

3 голосов
/ 12 августа 2010

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

Привет.

Ответы [ 4 ]

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

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

2 голосов
/ 12 августа 2010

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

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

Repeat.

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

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

1 голос
/ 13 августа 2010

@ Байрон Уитлок Хорошо, я делал то же самое. Но я решил не использовать 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!";
            }

    ?>
0 голосов
/ 12 августа 2010

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

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

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