PHP разработки


Простой RSS ридер

Размещена 6 августа, 2008 года


Иногда возникает необходимость читать RSS канал и складывать всю информацию в базу данных, или показывать списком сразу в он-лайне.

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

Предлагаю вашему вниманию простой RSS ридер.

RSS Ридер: Как это работает

Для начала мы получим всю ленту с источника. Для этого можно использовать функцию PHP file
Далее Нам нужно просто вычленить из общей ленты все элементы. Так как в каждом элементе обязательно присутствуют
  • Заголовок
  • Ссылка на источник
  • Описание
  • Дата публикации
    то мы можем просто разбить общую ленту на эти составляющие по отдельности. Сначала получим массив всех заголовков, затем ссылок, описаний и дат.

    В итоге имеем массивы отдельных элементов, по индексам которых можем получить все элементы ленты новостей.

    RSS: Сам скрипт

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

    Вот собственно сам скрипт:

    // SIRIUS: Получаем всю ленту
    $data=join("", file("http://www.gazeta.ru/export/rss/auto.xml"));
    
    // SIRIUS: Вычленяем заголовки
    $TITLES=preg_replace("/<\/title>(.(?!<title>))*.<title>/s","||",$data);
    $TITLES=preg_replace("/^.+<title>/s","",$TITLES);
    $TITLES=preg_replace("/<\/title>.+$/s","",$TITLES);
    $TITLES=explode("||",$TITLES);
    
    // SIRIUS: Вычленяем Ссылки на источники
    $LINKS=preg_replace("/<\/link>(.(?!<link>))*.<link>/s","||",$data);
    $LINKS=preg_replace("/^.+<link>/s","",$LINKS);
    $LINKS=preg_replace("/<\/link>.+$/s","",$LINKS);
    $LINKS=explode("||",$LINKS);
    
    // SIRIUS: Вычленяем описание
    $DESCRS=preg_replace("/<\/description>(.(?!<description>))*.<description>/s","||",$data);
    $DESCRS=preg_replace("/^.+<description>/s","",$DESCRS);
    $DESCRS=preg_replace("/<\/description>.+$/s","",$DESCRS);
    $DESCRS=explode("||",$DESCRS);
    
    // SIRIUS: Вычленяем дату публикации
    $DATES=preg_replace("/<\/pubDate>(.(?!<pubDate>))*.<pubDate>/s","||",$data);
    $DATES=preg_replace("/^.+<pubDate>/s","",$DATES);
    $DATES=preg_replace("/<\/pubDate>.+$/s","",$DATES);
    $DATES=explode("||",$DATES);
    
    // SIRIUS: Освобождаем память
    unset($data);
    
    // SIRIUS: Выводим все элементы, или, если их больше 10, первые 10
    $cnt=(count($TITLES) > 10)?10:count($TITLES);
    
    // SIRIUS: Просто выводим массив
    for ($j=1; $j<= $cnt; $j++) {
      echo date("d:m:Y", strtotime($DATES[$j])).
           " | <b>".$TITLES[$j]."</b><br>".
           (html_entity_decode($DESCRS[$j]))."<hr>";
    }
    

    Как видите нет ничего сложного.
    Возможно вы захотите показывать еще кокие-нибудь данные из ленты - можете по аналогии сделать массив значений любого тега. Так же возможно возникнет необходимость очищать CDATA.

    Автор: Козыч Антон

  • SAPE все усложнил?

    MainLink - простая и прибыльная продажа ссылок!

    Последние поступления:

    Стишки пирожки про Олега⁠⁠

    Размещена 20 июня 2024 года

    Олег купил презервативы
    Проник в семидесятый год
    И подарил их папе с мамой
    Такой нелепый суицид

    читать далее…

    Размещена 10 августа 2020 года

    Я по ТВ видел, что через 10 лет мы будем жить лучше, чем в Германии...
    Я не понял, что это они с Германией сделать хотят?!

    читать далее…

    ТехЗадание на Землю

    Размещена 14 марта 2018 года

    Пpоект Genesis (из коpпоpативной пеpеписки)

    читать далее…

    Шпаргалка по работе с Vim

    Размещена 05 декабря 2017 года

    Vim довольно мощный редактор, но работа с ним не всегда наглядна.
    Например если нужно отредактировать какой-то файл например при помощи crontab, без знания специфики работы с viv никак.

    читать далее…

    Ошибка: Error: Cannot find a valid baseurl for repo

    Размещена 13 сентабря 2017 года

    Если возникает ошибка на centos 5 вида
    YumRepo Error: All mirror URLs are not using ftp, http[s] or file.
    Eg. Invalid release/

    читать далее…