PHP разработки
Простой RSS ридер
Иногда возникает необходимость читать 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.
Автор: Козыч Антон