[h1]Скрипт импорта RSS новостей[/h1]
RSS — это формат, предназначенный для публикации новостей на новостных и подобных им сайтах, но по сути, публиковать можно не только новости. Практически любой материал, который можно разделить на отдельные части, можно публиковать с помощью RSS.
RSS — это разновидность XML. Изначально придуманный Netscape для их портала Netcenter, он быстро завоевал популярность и стал черезвычайно широко использоваться. Сегодня мы напишем скрипт для импорта RSS новостей с другого сайта.
<?xml version="1.0" encoding="Windows-1251"?>
<rss version="2.0">
<channel>
<title>Новости по системам безопасности</title>
<link>http://www.secnews.ru</link>
<description>
Российские новости по техническим средствам и системам безопасности (видеонаблюдение, контроль доступа,
охранно-пожарная сигализация...).
</description>
<lastBuildDate>Fri, 04 Jul 2008 09:58:29 +0400</lastBuildDate>
<ttl>6</ttl>
<item>
<title>"Техносила" и СМ ТРЭЙД -- 37 магазинов за полгода</title>
<link>http://www.secnews.ru/russian/11392.htm</link>
<description>
В I и II кварталах 2008 года компания СМ ТРЭЙД выполнила работы по оснащению противокражными
антеннами и системами защиты товаров на стеллажах 37 магазинов "Техносила" в различных
городах.
</description>
<enclosure url="http://www.secnews.ru/upload/iblock/5c7/5c7a8b666bcffb125c34bcabac4c9510.jpg"
length="4438" type="image/jpeg" width="100" height="100"/>
<category>Новости компаний/</category>
<pubDate>Wed, 02 Jul 2008 00:00:00 +0400</pubDate>
</item>
<item>
<title>CCTV от JVC -- подтверждено соответствие ГОСТ Р</title>
<link>http://www.secnews.ru/russian/11382.htm</link>
<description>
В июне 2008 г компанией JVC получены сертификаты соответствия ГОСТ Р на все производимые
продукты для профессионального использования. Это коснулось и компонентов систем безопасности.
</description>
<enclosure url="http://www.secnews.ru/upload/iblock/958/958b332757db459af234b994be125422.jpg"
length="3772" type="image/jpeg" width="100" height="100"/>
<category>Новости компаний/</category>
<pubDate>Tue, 01 Jul 2008 00:00:00 +0400</pubDate>
</item>
<item>
<title>Поддержка камер Arecont Vision в видеосерверах Domination</title>
<link>http://www.secnews.ru/russian/11384.htm</link>
<description>
Привлекательность камер от Arecont Vision неоспорима: разрешение от 1,3 до 8 Мпикс, встроенные детекторы
движения, подача электропитания по кабелям Ethernet и при этом -- весьма умеренная цена. А с июня 2008 г.
у камер появляется еще одно преимущество -- способность работать с видеосерверами семейства Domination IP,
производимыми и поставляемыми компанией ВИПАКС.
</description>
<enclosure url="http://www.secnews.ru/upload/iblock/ac3/ac370d5de67a7d543daf085698809611.jpg"
length="3582" type="image/jpeg" width="100" height="100"/>
<category>Новости компаний/</category>
<pubDate>Tue, 01 Jul 2008 00:00:00 +0400</pubDate>
</item>
</channel>
</rss>
|
Скрипт, читающий RSS-ленту со стороннего сайта:
<?php
$url = 'http://www.secnews.ru/russian/rss.php';
$reg_exp = '#<item>.*?<title>(.*?)<\/title>.*?';
$reg_exp .='<link>(.*?)<\/link>.*?<description>';
$reg_exp .='(.*?)<\/description>.*?<\/item>#si';
$pattern = '<a href="%s">%s</a>
%s<hr>';
if ( $xml_data = file_get_contents($url) ) {
$rss_data = parse_rss($reg_exp, $xml_data);
echo output_rss($pattern, $rss_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]
);
}
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;
}
?>
|
Как видите, для извлечения информации здесь используются регулярные выражения. Но использовать PCRE для решения такой задачи — это стрельба из пушки по воробьям. В PHP есть гораздо более удобные средства для работы с XML — например, SimpleXML:
<?php
$rss = simplexml_load_file ( 'http://www.secnews.ru/russian/rss.php' );
header("Content-Type: text/html; charset=utf-8");
// print_r( $rss );
echo '<h1><a href="'.$rss->channel->link.'">'.$rss->channel->title.'</a></h1>'."\n";
echo '<table>'."\n";foreach ( $rss->channel->item as $item ) { echo '<tr valign="top">'; $image = $item->enclosure; echo '<td>'; echo '<img src="'.$image['url'].'" width="'.$image['width'].'" height="'.$image['height'].'" alt="" />'; echo '</td>'; echo '<td>'; echo '<h3><a href="'.$item->link.'">'.$item->title.'</a></h3>'; echo '<div>'.$item->description.'</div>'; echo '</td>'; echo '</tr>'."\n"; echo '<tr><td colspan="2"> </td></tr>'."\n"; }echo '</table>';
?>
|
Ниже показана структура, созданная после вызова функции simplexml_load_file()
SimpleXMLElement Object
(
[@attributes] => Array
(
[version] => 2.0
)
[channel] => SimpleXMLElement Object
(
[title] => Новости по системам безопасности
[link] => http://www.secnews.ru
[description] =>
Российские новости по техническим средствам и системам безопасности (видеонаблюдение, контроль доступа,
охранно-пожарная сигализация...).
[lastBuildDate] => Fri, 04 Jul 2008 09:58:29 +0400
[ttl] => 6
[item] => Array
(
[0] => SimpleXMLElement Object
(
[title] => "Техносила" и СМ ТРЭЙД -- 37 магазинов за полгода
[link] => http://www.secnews.ru/russian/11392.htm
[description] =>
В I и II кварталах 2008 года компания СМ ТРЭЙД выполнила работы по оснащению противокражными
антеннами и системами защиты товаров на стеллажах 37 магазинов "Техносила" в различных
городах.
[enclosure] => SimpleXMLElement Object
(
[@attributes] => Array
(
[url] => http://www.secnews.ru/upload/iblock/5c7/5c7a8b666bcffb125c34bcabac4c9510.jpg
[length] => 4438
[type] => image/jpeg
[width] => 100
[height] => 100
)
)
[category] => Новости компаний/
[pubDate] => Wed, 02 Jul 2008 00:00:00 +0400
)
[1] => SimpleXMLElement Object
(
[title] => CCTV от JVC -- подтверждено соответствие ГОСТ Р
[link] => http://www.secnews.ru/russian/11382.htm
[description] =>
В июне 2008 г компанией JVC получены сертификаты соответствия ГОСТ Р на все производимые
продукты для профессионального использования. Это коснулось и компонентов систем безопасности.
[enclosure] => SimpleXMLElement Object
(
[@attributes] => Array
(
[url] => http://www.secnews.ru/upload/iblock/958/958b332757db459af234b994be125422.jpg
[length] => 3772
[type] => image/jpeg
[width] => 100
[height] => 100
)
)
[category] => Новости компаний/
[pubDate] => Tue, 01 Jul 2008 00:00:00 +0400
)
[2] => SimpleXMLElement Object
(
[title] => Поддержка камер Arecont Vision в видеосерверах Domination
[link] => http://www.secnews.ru/russian/11384.htm
[description] =>
Привлекательность камер от Arecont Vision неоспорима: разрешение от 1,3 до 8 Мпикс, встроенные детекторы
движения, подача электропитания по кабелям Ethernet и при этом -- весьма умеренная цена. А с июня 2008 г.
у камер появляется еще одно преимущество -- способность работать с видеосерверами семейства Domination IP,
производимыми и поставляемыми компанией ВИПАКС.
[enclosure] => SimpleXMLElement Object
(
[@attributes] => Array
(
[url] => http://www.secnews.ru/upload/iblock/ac3/ac370d5de67a7d543daf085698809611.jpg
[length] => 3582
[type] => image/jpeg
[width] => 100
[height] => 100
)
)
[category] => Новости компаний/
[pubDate] => Tue, 01 Jul 2008 00:00:00 +0400
)
)
)
)
|
Разумеется, запрашивать каждый раз файл со стороннего сайта, парсить его, формировать html — дело накладное (и по времени и по нагрузке). Надо запросить этот XML-документ раз в сутки (для этого идеально подходит CRON), сформировать HTML и записать в файл или базу данных. А скрипт, который выводит RSS-ленту будет просто брать готовый HTML из файла или из БД.
Источник:
источник