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.
Автор: Козыч Антон