RSS - это простой XML-документ. Вот здесь почитай http://ru.wikipedia.org/wiki/RSS, а там по ссылкам. Все просто и доступно описано
Допустим у меня такой rssnews.xml Код (Text): <?xml version="1.0"?> <rss version="2.0"> <channel> <title>Liftoff News</title> <link>http://liftoff.msfc.nasa.gov/</link> <description>Liftoff to Space Exploration.</description> <language>en-us</language> <pubDate>Tue, 10 Jun 2003 04:00:00 GMT</pubDate> <lastBuildDate>Tue, 10 Jun 2003 09:41:01 GMT</lastBuildDate> <docs>http://blogs.law.harvard.edu/tech/rss</docs> <generator>Weblog Editor 2.0</generator> <managingEditor>editor@example.com</managingEditor> <webMaster>webmaster@example.com</webMaster> <item> <title>Star City</title> <link>http://liftoff.msfc.nasa.gov/news/2003/news-starcity.asp</link> <description>How do Americans get ready to work with Russians aboard the International Space Station? They take a crash course in culture, language and protocol at Russia's Star City.</description> <pubDate>Tue, 03 Jun 2003 09:39:21 GMT</pubDate> <guid>http://liftoff.msfc.nasa.gov/2003/06/03.html#item573</guid> </item> <item> <title>Space Exploration</title> <link>http://liftoff.msfc.nasa.gov/</link> <description>Sky watchers in Europe, Asia, and parts of Alaska and Canada will experience a partial eclipse of the Sun on Saturday, May 31st.</description> <pubDate>Fri, 30 May 2003 11:06:42 GMT</pubDate> <guid>http://liftoff.msfc.nasa.gov/2003/05/30.html#item572</guid> </item> <item> <title>The Engine That Does More</title> <link>http://liftoff.msfc.nasa.gov/news/2003/news-VASIMR.asp</link> <description>Before man travels to Mars, NASA hopes to design new engines that will let us fly through the Solar System more quickly. The proposed VASIMR engine would do that.</description> <pubDate>Tue, 27 May 2003 08:37:32 GMT</pubDate> <guid>http://liftoff.msfc.nasa.gov/2003/05/27.html#item571</guid> </item> <item> <title>Astronauts' Dirty Laundry</title> <link>http://liftoff.msfc.nasa.gov/news/2003/news-laundry.asp</link> <description>Compared to earlier spacecraft, the International Space Station has many luxuries, but laundry facilities are not one of them. Instead, astronauts have other options.</description> <pubDate>Tue, 20 May 2003 08:56:02 GMT</pubDate> <guid>http://liftoff.msfc.nasa.gov/2003/05/20.html#item570</guid> </item> </channel> </rss> как мне получить это все в норм. виде в ПХП файле?
Откуда-то получил код и исправил на PHP: <?php (isset($_GET['smskopilka']))?$smskopilka=$_GET['smskopilka']:$smskopilka=NULL; (isset($_GET['count']))?$countStr=$_GET['count']:$countStr=10; $smskopilka = 13207; $countStr = "10"; $file = "rssnews.xml"; $pos = 0; $Nodes = array(); if (!($fp = fopen("$file", "r"))) { die("Не удается открыть XML файл - ".$file.", может его нет? Или не верно указан номер sms.копилки."); } while ($getline = fread($fp, 4096)) { $data = $data . $getline; } $count = 0; $pos = 0; while ($node = GetElementByName($data, "<item", "</item>")) { $Nodes[$count] = $node; $count++; } if($countStr > $count) $countStr=$count; for ($i=0; $i<$countStr; $i++) { $title = GetElementByName($Nodes[$i], "<title>", "</title>"); $link = GetElementByName($Nodes[$i], "<link>", "</link>"); $text = GetElementByName($Nodes[$i], "<description>", "</description>"); $time = GetElementByName($Nodes[$i], "<pubDate>", "</pubDate>"); echo "<a href=\"$link\" title=\"$title\" >".$title."</a><br /><sup>".$time."</sup><br />".$text."<br/>"; } //--------------------------------- function GetElementByName ($xml, $start, $end) { global $pos; $startpos = strpos($xml, $start); if ($startpos === false) { return false; } $endpos = strpos($xml, $end); $endpos = $endpos+strlen($end); $pos = $endpos; $endpos = $endpos-$startpos; $endpos = $endpos - strlen($end); $tag = substr ($xml, $startpos, $endpos); $tag = substr ($tag, strlen($start)); return $tag; } ?> но Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 39 bytes) in /home/niko/public_html/index.php on line 53 помогите что то сделать
NIKO вот так делаются новости на php.ru. это то, что показывается на первой странице. по cron раз в час запуск. таблица RSS потоков Код (Text): mysql> show fields from rss; +-------+------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+------------------+------+-----+---------+-------+ | ID | varchar(16) | | | | | | SITE | varchar(255) | | | | | | RSS | varchar(255) | | | | | | DATE | int(11) unsigned | | | 0 | | +-------+------------------+------+-----+---------+-------+ 4 rows in set (0.05 sec) mysql> select * from rss; +------------------+------------------+--------------------------------------------+------------+ | ID | SITE | RSS | DATE | +------------------+------------------+--------------------------------------------+------------+ | hz3oduq5ywnzdstx | PHP.NET | http://www.php.net/news.rss | 1157641044 | | se9mlg5i6eig33aa | INTERNET.RU | http://internet.ru/rss2.php | 1157645184 | | j1hj90ffmcb0oahr | KM.RU | http://www.km.ru/news/rss.asp?code=ok | 1157700453 | | np9ch2q88dw2nq0x | SEARCHENGINES.RU | http://www.searchengines.ru/news/index.xml | 1157702290 | | g8kjub6pgdcaz8el | WEBMASCON.COM | http://webmascon.com/daily/rss.php | 1157709021 | | lm0yurjtdi8ax1kp | PHPINSIDE.RU | http://phpinside.ru/rss.xml | 1157709086 | +------------------+------------------+--------------------------------------------+------------+ собствено сам парсер: PHP: <? // expi-web (c) 2006 // powered by 440hz include('../oops/start.inc'); //ob_start(); $MAILTO = ''; $RSSS = $OOPSGlobal['SES']->db->QueryObjects('SELECT * FROM rss ORDER BY DATE'); foreach($RSSS AS $RSS) { print("\n\n".$RSS->RSS.' processing ...'); $XML = @file_get_contents($RSS->RSS); if(!$XML) continue; $ICONV = "UTF-8"; if(stristr($XML,'encoding="windows-1251"')) { $ICONV = 'CP1251'; } print("\nEncoding from $ICONV"); print("\nRecive ".strlen($XML)." byte(s). Parsing ..."); $ITEMS = GetXMLAllVal($XML,'item'); print("\nItems: [".count($ITEMS)."]"); foreach($ITEMS AS $ITEM) { $TITLE = GetXMLFirstVal($ITEM,'title'); $LINK = GetXMLFirstVal($ITEM,'link'); $DESC = GetXMLFirstVal($ITEM,'description'); $DATE = GetXMLFirstVal($ITEM,'pubDate'); $CAT = GetXMLFirstVal($ITEM,'category'); if(!$DATE) { $DATE = GetXMLFirstVal($ITEM,'dc:date'); } if($DATE) $DATE = strtotime($DATE); else $DATE = time(); $MD5 = md5($TITLE.$LINK.$DESC); $TITLE = html_entity_decode($TITLE,ENT_QUOTES); $DESC = html_entity_decode($DESC,ENT_QUOTES); $CAT = html_entity_decode($CAT,ENT_QUOTES); if($ICONV != 'UTF-8') { $TITLE = iconv($ICONV,'UTF-8',$TITLE); $DESC = iconv($ICONV,'UTF-8',$DESC); $CAT = iconv($ICONV,'UTF-8',$CAT); } print("\n".date('d.m.Y H:i',$DATE)." - [".iconv('UTF-8','CP1251',$CAT)."] ".iconv('UTF-8','CP1251',$TITLE)); $DESC = trim(strip_tags($DESC)); $OLDRSS = $OOPSGlobal['SES']->db->QueryObjects("SELECT * FROM rss_news WHERE TITLE = '".mysql_escape_string($TITLE)."'"); if(count($OLDRSS) > 0) { $OOPSGlobal['SES']->db->Query("DELETE FROM rss_news WHERE TITLE = '".mysql_escape_string($TITLE)."'"); // print("\nDeleting ..."); } else { $MAILTO .= "\n".date('d.m.Y H:i',$DATE)." - ".$RSS->SITE.': '.$TITLE."\n\n".trim(strip_tags($DESC))."\n".$LINK."\n\n"; print("\nMailing ..."); } $SQL = "INSERT INTO rss_news (TITLE,WHO,LINK,`DESC`,DATE,MD5) VALUES('". mysql_escape_string($TITLE)."','".mysql_escape_string($RSS->SITE)."','".mysql_escape_string($LINK)."','".mysql_escape_string($DESC)."',".$DATE.",'$MD5')"; $OOPSGlobal['SES']->db->Query($SQL); // print("\nInserting ..."); } } print "\n"; if($MAILTO) { print "\nMailing ..."; // OOPSMailer('PHP.RU: Новости от '.date('d.m.Y H:i'),$MAILTO,'talk@expi-web.ru',"PHP.RU News <news@php.ru>"); OOPSMailer('PHP.RU: Новости от '.date('d.m.Y H:i'),$MAILTO,'440hz@php.ru',"PHP.RU News <news@php.ru>"); print "\n\n"; } ob_end_clean(); include('../oops/stop.inc'); ?> тулза: PHP: <? function GetXMLFirstVal($r,$t) { if(preg_match_all('/<('.$t.')[^>]{0,}>(.*)<\/\\1>/Usi',$r,$o)) return $o[2][0]; return ''; } function GetXMLAllVal($r,$t) { if(preg_match_all('/<('.$t.')[^>]{0,}?>(.*)<\/\\1>/Usi',$r,$o)) return $o[2]; return array(); } ?> и вот ч то имеем: Код (Text): gw(root):/usr/www/wwwroot/search.php.ru/bin#>php rssparser.php http://www.php.net/news.rss processing ... Encoding from UTF-8 Recive 16061 byte(s). Parsing ... Items: [19] 13.09.2006 00:00 - [] Zend / PHP Conference & Expo 2006 10.09.2006 00:00 - [] International PHP Conference 2006 06.09.2006 00:00 - [] 2006 DC PHP Conference - Speakers and schedule 24.08.2006 00:00 - [] PHP 5.1.6 Released 24.08.2006 00:00 - [] Mastering Regular Expressions - now with PHP coverage 17.08.2006 00:00 - [] PHP 4.4.4 and PHP 5.1.5 Released 03.08.2006 00:00 - [] PHP 4.4.3 Released 29.12.2005 00:00 - [] php/db|works 2006 Schedule Now Online 26.05.2006 00:00 - [] Welcome Summer of Code 2006 Students 17.05.2006 00:00 - [] Call to speaker for Paris "Forum PHP 2006" 16.05.2006 00:00 - [] NYPHPCon 2006 Program Announced 04.05.2006 00:00 - [] PHP 5.1.4 Released 01.05.2006 00:00 - [] PHP 5.1.3 Released 01.05.2006 00:00 - [] Summer of Code 24.04.2006 00:00 - [] PHP Vikinger 02.03.2006 00:00 - [] php|tek 2006 26.02.2006 00:00 - [] PHP Quebec 2006 02.02.2006 00:00 - [] NYPHPCon 2006 31.12.1969 00:00 - [] http://internet.ru/rss2.php processing ... Encoding from UTF-8 Recive 20631 byte(s). Parsing ... Items: [20] 20.09.2006 10:13 - [] Daripodarki.ru нашел удачливого покупателя Mailing ... 20.09.2006 00:42 - [] Поиск: Как навести порядок в Интернете Mailing ... 19.09.2006 19:10 - [] ImageOX - простая работа с коллекциями онлайн-изображений Mailing ... 19.09.2006 16:28 - [] Бельгийские газеты победили Google 19.09.2006 15:04 - [] TDK продемонстрировала свой flash-диск 19.09.2006 14:49 - [] R01: нам интересен розничный рынок 19.09.2006 14:26 - [] SanDisk и RealNetworks пытаются повторить успех пары iPod+iTunes 19.09.2006 14:02 - [] Ноутбук на базе Xbox360? 19.09.2006 13:14 - [] Az.to - информационный агрегатор для ежедневного посещения 19.09.2006 01:27 - [] В сети появился новый сайт бизнес-идей 18.09.2006 19:27 - [] Борцы со спамом получили крупный штраф 18.09.2006 17:26 - [] В США накрыли четыре группы спаммеров 18.09.2006 16:19 - [] Spbnews представила профсоюзный проект 2 в 1 18.09.2006 15:37 - [] Спортивное сумасшествие вместе со SportsLister.com 18.09.2006 15:24 - [] Nintendo Wii увидит свет 19 ноября 18.09.2006 14:20 - [] Легальная электронная книга, новый поиск, суд над посетителем... 18.09.2006 13:23 - [] В Марокко посадили пару вирусописателей 18.09.2006 13:05 - [] Sony готовится представить собственный вариант HD-рекордера 18.09.2006 11:29 - [] Notecentric: заметки не для всех 15.09.2006 17:30 - [] Понравился сайт? - "Дай пять"! http://www.km.ru/news/rss.asp?code=ok processing ... Encoding from UTF-8 Recive 9695 byte(s). Parsing ... Items: [10] 20.09.2006 11:00 - [Новости] Visiontek X1950XTX уже доступен сегодня Mailing ... 20.09.2006 10:50 - [Новости] Сотрудники ИТ-сферы любят стиль «потяжелее» Mailing ... 20.09.2006 10:40 - [Новости] Merom подешевеет в октябре Mailing ... 20.09.2006 10:20 - [Новости] МТС готовится к экспериментам Mailing ... 20.09.2006 10:00 - [Новости] Toshiba объявила о своей ошибке Mailing ... 19.09.2006 16:40 - [Новости] Microsoft отсудила у спамера самый крупный штраф 19.09.2006 15:27 - [Новости] Почему Apple так сильно завышает цены на свои плееры? 19.09.2006 14:40 - [Новости] Sony PlayStation Portable может быть захвачена хакерами 19.09.2006 14:20 - [Новости] GeForce Go 7700 Powers ASUS A8Js создан для серьезных задач 19.09.2006 14:00 - [Новости] VIA C7-D процессор без кремния? http://www.searchengines.ru/news/index.xml processing ... Encoding from CP1251 Recive 30437 byte(s). Parsing ... Items: [15] 15.09.2006 10:57 - [] Yahoo! анонсировала обновлённый почтовый сервис 14.09.2006 11:31 - [] Yahoo! и Acer заключили многолетнее партнёрское соглашение 12.09.2006 11:52 - [] Miva добавила новый рекламный продукт 11.09.2006 15:41 - [] Вебальта запустила собственную систему контекстной рекламы 07.09.2006 09:54 - [] Google News запустила сервис поиска по архивам 06.09.2006 13:59 - [] Accipiter Solutions приобрела рекламную сеть BidClix 04.09.2006 14:49 - [] Правительство Бразилии даёт Google две недели на проверку пользовательских данных 01.09.2006 12:26 - [] Яндекс начинает программу по созданию электронной справочной библиотеки 31.08.2006 11:52 - [] Yahoo! Go for Mobile стала доступна для пользователей мобильных устройствах с ОС Windows 30.08.2006 11:40 - [] Yahoo! обновила свой портал по недвижимости, добавив новые инструменты и сервисы 29.08.2006 11:41 - [] Google и eBay соединяют пользователей, рекламодателей и продавцов во всём мире 22.08.2006 10:54 - [] Mail.ru запустила новый поисковый сервис - Ответы@Mail.Ru 19.08.2006 01:37 - [] В ноябре 2006 года в Москве пройдёт V ежегодная конференция 17.08.2006 10:46 - [] Yahoo! расширяет поисковую рекламу в мобильной сфере 16.08.2006 11:30 - [] Google анонсировала купоны на скидки на Google Maps http://webmascon.com/daily/rss.php processing ... Encoding from CP1251 Recive 5023 byte(s). Parsing ... Items: [5] 28.08.2006 20:54 - [] Российская конференция веб-разработчиков 19.08.2006 13:43 - [] Всесоюзная перепись веб-студий 01.08.2006 22:14 - [] Ruby on Rails — российский сайт 02.05.2006 18:34 - [] Немного о славянском восприятии XHTML 01.05.2006 14:40 - [] webmascon.RU http://phpinside.ru/rss.xml processing ... Encoding from UTF-8 Recive 9956 byte(s). Parsing ... Items: [10] 15.09.2006 14:20 - [] C 2007 года в PEAR будут приниматься только пакеты для PHP 5 15.09.2006 12:02 - [] Состоялся релиз Subversion 1.4 12.09.2006 13:38 - [Обзоры] IE7.com агитирует за Firefox 12.09.2006 12:48 - [Обзоры] Сравнение программ для защиты кода 07.09.2006 00:07 - [Почитать] "Книга алгоритмов" в свободном доступе 06.09.2006 23:46 - [Почитать] Статистика использования PHP в мире за август 2006 06.09.2006 23:40 - [Почитать] Что разработчики хотят видеть в PHP 7 05.09.2006 22:13 - [Почитать] Введение в использование паттерна Decorator на PHP 05.09.2006 21:44 - [Почитать] Электронный журнал (IN)SECURE - вышел новый номер 05.09.2006 21:28 - [] MySQL отказывается от движка Berkley и поддерживает Memcached Mailing ...
А вообще откуда ты берешь новости...Мне нужно например взять новости от Яндекс(или ПХП.РУ ) и публиковать на сайте...но при том еще выпускать свои!
Смотри сделал так PHP: <?php $file = "http://news.yandex.ru/hardware.rss"; $XML = file_get_contents($file); if(!$XML) continue; $ITEMS = GetXMLAllVal($XML, 'item'); foreach($ITEMS as $item){ $title = GetXMLFirstVal($item, 'title'); $link = GetXMLFirstVal($item, 'link'); $text = GetXMLFirstVal($item, 'description'); $date = GetXMLFirstVal($item, 'pubDate'); $title = html_entity_decode($title, ENT_QUOTES); $text = html_entity_decode($text, ENT_QUOTES); print("<em><a href=\"$link\" style=\"text-decoration: none\" >".$title."</a></em> <i>".$date."<br /><hr color=\"#CCCCCC\" />".$text."<br /><hr color=\"#CCCCCC\" /><br /><br />"); } function GetXMLFirstVal($r,$t) { if(preg_match_all('/<('.$t.')[^>]{0,}>(.*)<\/\\1>/Usi',$r,$o)) return $o[2][0]; return ''; } function GetXMLAllVal($r,$t) { if(preg_match_all('/<('.$t.')[^>]{0,}?>(.*)<\/\\1>/Usi',$r,$o)) return $o[2]; return array(); } ?> Но это только новости Яндекса..а я хочу чтоб я мог и сам выпускать..как сделать?
я вот вникал немного в роботу с rss..Как насчет того что б использовать DOM функции ?, вот пример: PHP: <?php echo "<META http-equiv=content-type content=\"text/html; charset=UTF-8\">"; $xml=file_get_contents("http://novynar.com.ua/rss/ua/business.rss"); $dom=new domDocument; $dom->loadXML($xml); $s_dom=simplexml_import_dom($dom); echo "<table width=\"25%\" border=\"0\">"; echo "<tr><td><b><font size=\"24\">".$s_dom->channel->title."</font></b><br></td></tr>"; for($i=0; $i<=4; $i++) { echo "<tr><td><br><br><b>".$s_dom->channel->item[$i]->title."</b></td></tr>"; echo "<tr><td><br>".$s_dom->channel->item[$i]->description."</td></tr>"; echo "<tr><td><br><a href=\"".$s_dom->channel->item[$i]->link."\">Click here.</a></td></tr>"; } echo "</table>"; ?> Ваше мнение?
1 - Нафига ? 2 - Нафига столько echo да ещё и в двойных кавычках ? (код нечитаемый совершенно) PHP: <?php $rss = simplexml_load_file('http://news.yandex.ru/hardware.rss'); ?> <?foreach($rss->channel->item as $item):?> <a href="<?=$item->link?>"><?=$item->title?></a><br> <?=$item->description?><br> Date: <?=$item->pubDate?><hr> <?endforeach?>
http://w-blog.ru/rss-parser - Здесь подробно написанно как парсить RSS ленты и описанна проблема с кодировками.
DarkJack 1 - Способ-1 куда менее наглядный (тупо оформленный) чем тот что привёл я постом выше. 2 - Способ-2 вообще нифига не понятен (таже проблема что и в первом случае, только ещё страшнее). 3 - Нафига в самодельном две регулярки, всё это делается одной* (а в этом примере задолбаешься даже поддержку CDATA делать, не то что уж настраивать под специфичные ленты типа RDF/ATOM/итд) 4 - Для "проблем с кодировкой" есть mbstring (по дефолту включен в PHP4) и iconv (дефолт в PHP5) на хостингах чаще всего есть возможность использовать оба, нафига спрашивается писать тормознутую функцию ? * - http://php.ru/forum/viewtopic.php?p=17676#17676
Столкнулся с одной интересной вещью. В пхп нельзя писать переменные через "-". Но! Массив с таким ключем вполне может существовать. Я сделал так: PHP: <?php $rss = simplexml_load_file('http://exmaple.ru/yan.php'); foreach($rss->offers->offer as $item) { $data = get_object_vars($item); echo $data['steering-wheel']; } http://www.php.ru/manual/function.get-object-vars.html
RSS очень хорошо парситься с помощью регулярных выражений. Как пример могу привести класс на php http://www.scale-tech.ru/ScaleParser/doc/html/class_load_rss__2__0.html