Скрипт импорта RSS ленты

Finch
На сайте с 11.08.2005
Offline
99
13787

Подскажите, пожалуйста, готовый скрипт (PHP), с помощью которого можно импортировать ленту новостей в формате RSS к себе на сайт.

То есть надо забрать ее с УРЛа и форматировать в нужном мне виде для вывода.

Что для этого использовать?

dmitcat
На сайте с 26.05.2005
Offline
123
#1

простенькая функция вывода...

function& okRss($url){

$data=join('',file($url));

$matchTitle='!<item>.*?<title>(.*?)<\/title>.*?<\/item>!is';

preg_match_all($matchTitle,$data,$title);

$rss['title']=$title[1];

$matchLink='!<item>.*?<link>(.*?)<\/link>.*?<\/item>!is';

preg_match_all($matchLink,$data,$link);

$rss['link']=$link[1];

$matchDesc='!<item>.*?<description>(.*?)<\/description>.*?<\/item>!is';

preg_match_all($matchDesc,$data,$desc);

$rss['desc']=$desc[1];

return $rss;

}

$rss=okRss("ПУТЬ ДО ФАЙЛА rss ИЛИ URL");

for($i=0; $i<count($rss['title']); $i++){

echo "<a href='{$rss['link'][$i]}' target=_blank>{$rss['title'][$i]}</a><br>

{$rss['desc'][$i]}<br><br>";

}

Либо селяВи (http://www.puper.ru), либо селяВас (http://www.puper.ru)!!!
[Удален]
#2

dmitcat, Да-а-а, мега функция

Конечно она работает и это уже хорошо, но с точки зрения "программиста-педанта" она у тебя просто "супер"

(я бы скорее со стыда умер чем выложил такую в "паблик" от своего имени)

Чтоб не быть голословным...

1 - Для скорости лучше обойтись одним preg_match_all

2 - Для универсальности часть регулярки (или даже всю) лучше брать из вне

(чтоб для каждой ленты была своя регулярка)

3 - Для разделения логики приложения от логики представления выводить результат лучше c помощью отдельной фунции

Пример

<?php

/**********************************************************
* Parse XML data into an array structure *
* Usage: array parse_rss ( string data ) *
**********************************************************/
function parse_rss($reg_exp, $xml_data) {
preg_match_all($reg_exp, $xml_data, $temp);
return array(
'count'=>count($temp[0]),
'title'=>$temp[1],
'link'=>$temp[2],
'desc'=>$temp[3]
);
}

/**********************************************************
* Parse Array data into an HTML structure *
* Usage: string parse_rss ( array data ) *
**********************************************************/
function output_rss($pattern, $rss_data) {
for($i=0; $i<$rss_data['count']; $i++) {
$temp .= sprintf($pattern,
$rss_data['link'][$i],
html_entity_decode($rss_data['title'][$i]),
html_entity_decode($rss_data['desc'][$i])
);
}
return $temp;
}

/**********************************************************
* Settings *
**********************************************************/
$url = 'http://example.org/rss.xml';

$reg_exp = '#<item>.*?<title>(.*?)<\/title>.*?';
$reg_exp .='<link>(.*?)<\/link>.*?<description>';
$reg_exp .='(.*?)<\/description>.*?<\/item>#si';

$pattern = '<a href="%s">%s</a><br>%s<hr>';

/**********************************************************
* Main script *
**********************************************************/
if ( $xml_data = file_get_contents($url) ) {
$rss_data = parse_rss($reg_exp, $xml_data);
echo output_rss($pattern, $rss_data);
}
/**********************************************************
* The END *
**********************************************************/
?>

Для хостингов с отключенным "allow_url_fopen" ещё понадобится и функция для получения файла через сокеты

А вообще лучше качать сам RSS не перед выводом а по крону (раз в день например) один раз парсить его в БД и уже от туда выводить...

dmitcat
На сайте с 26.05.2005
Offline
123
#3

я ж написал - ПРОСТЕНЬКАЯ...

тем более - не моя... просто взял когда-то из инета - понадобилась 1 раз, чтобы полчаса не траттить на написание своей ф-ции...

Ясный пень, можно написать супер функцию, с административной частью, с разделенным доступом...

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

[Удален]
#4

dmitcat, Ставить на хост г@вно я бы не рекомендовал, даже одна забытая запятая может стоить всему сайту жизни (и репутации)

(в рнрВВ2.0.6 например из-за одной пропущеной точки, а в рнрВВ2.0.13 из-за одного знака равенства, можно было спокойно зайти в админку)

dmitcat:
я ж написал - ПРОСТЕНЬКАЯ...

Тот код что привёл я проще (и быстрее и надёжнее и меньше) разница лишь в окуратном оформлении кода (которое создаёт иллюзию сложности)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий