не мог бы какой добрый товарищ подсказать код импорта RSS новости с одного сайта на другой. а? при условии что на сервере запрещены исходящие коннекты
ART79 Если совсем запрещены то это невозможно в принципе (разве что локально запускать скрипт и по FTP заливать новости на сервак), а если просто не включен "allow_url_fopen" то я готовых не знаю, никогда не искал... (я выкладывал тут один самописный, но он работает только с "allow_url_fopen")
при вставке RSS скрипта выводится следующее (ссылка на скрипт http://forum.searchengines.ru/showthrea ... 276&page=2) и мне сказали что это связано с ... в первом посте писал я об этом Warning: file_get_contents() [function.file-get-contents]: URL file-access is disabled in the server configuration in ...... но при этом решении должно быть
440Hz Ты наверное не читал топик на "searchengines", поясню сразу ART79 хочет полностью готовое решение, сам он не разбирётся чё с этим делать. (не программер он)
Отожжем в пятницу! PHP: <? // выдирание RSS потоков // 440hz ### TOOLS ### function GetXMLFirstVal($r,$t) { if(preg_match_all('/<('.$t.')>(.*)<\/\\1>/Usi',$r,$o)) return $o[2][0]; return false; } function GetXMLAllVal($r,$t) { if(preg_match_all('/<('.$t.')>(.*)<\/\\1>/Usi',$r,$o)) return $o[2]; return array(); } function GetStream($URL,$mode=0) { switch($mode) { // php case 0: $results = file_get_contents($URL); break; // CURL case 1: $ch = curl_init(); curl_setopt ($ch, CURLOPT_URL, $URL); // Destination URL curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); // Output to a variable curl_setopt ($ch, CURLOPT_POST, 0); // Use HTTP POST curl_setopt ($ch, CURLOPT_TIMEOUT, 20); // Default Timeout $results = curl_exec($ch); if(curl_error($ch)) { print_r(curl_getinfo($ch)); exit(); } break; // SOCKETS case 2: $info = parse_url($URL); $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); if ($socket < 0) { echo "socket_create() failed: reason: " . socket_strerror($socket) . "\n"; exit(); } $result = socket_connect($socket, $info['host'], 80); if ($result < 0) { echo "socket_connect() failed.\nReason: ($result) " . socket_strerror($result) . "\n"; } $in = "GET ".$info['path']." HTTP/1.1\r\n"; $in .= "Host: ".$info['host']."\r\n"; $in .= "Connection: Close\r\n\r\n"; socket_write($socket, $in, strlen($in)); $out = ''; $results = ''; while ($out = socket_read($socket, 2048)) { $results .= $out; } socket_close($socket); break; default: $results = ''; } return $results; } ### TOOLS ### // RSS потоки // ТОЛЬКО ссылки БЕЗ параметров! // get.rss?a=b непокатит. тогда нужно юзать CURL $RSSS = array(); $RSSS[] = 'http://news.yandex.ru/computers.rss'; $RSSS[] = 'http://news.yandex.ru/security.rss'; $RSSS[] = 'http://news.yandex.ru/internet.rss'; // перебираем потоки foreach($RSSS AS $RSS) { print("\n$RSS"); // получаем контент // 0 - php // 1- curl // 2- sock $XML = GetStream($RSS,2); if($XML) { // получаеми список всех ITEM $ITEMS = GetXMLAllVal($XML,'item'); // перебираем ITEM foreach($ITEMS AS $ITEM) { // получаем данные $TITLE = GetXMLFirstVal($ITEM,'title'); $LINK = GetXMLFirstVal($ITEM,'link'); $DESC = GetXMLFirstVal($ITEM,'description'); $DATE = GetXMLFirstVal($ITEM,'pubDate'); $CAT = GetXMLFirstVal($ITEM,'category'); // ver 2.0 if(!$DATE) { $DATE = GetXMLFirstVal($ITEM,'dc:date'); } // конвертим дату в unixtime if($DATE) $DATE = strtotime($DATE); else $DATE = time(); // преобразуем спецсимволы $TITLE = html_entity_decode($TITLE,ENT_QUOTES); $DESC = html_entity_decode($DESC,ENT_QUOTES); $CAT = html_entity_decode($CAT,ENT_QUOTES); print("\n [".date('d.m.Y H:i',$DATE)."] - [$TITLE]"); } } } // что б в шелле строку переводило ... print("\n"); ?> Код (Text): </rss> gw(root):/usr/home/440hz#>php rsscurl.php http://news.yandex.ru/computers.rss [24.05.2007 19:21] - [Sony представил гибкий дисплей с 16,7 млн цветов] [25.05.2007 13:44] - [Intel выпустит самый тонкий ноутбук] [25.05.2007 05:40] - [Динозавры умели хорошо плавать] [25.05.2007 13:44] - [Nokia Siemens Networks модернизирует сеть МГТС] [24.05.2007 20:20] - [Новые видеокарты Nvidia будут в три раза мощнее адаптеров предыдущего поколения] [25.05.2007 00:40] - ["Мегафон" не делится - Правообладатели недовольны отчислениями оператора] [25.05.2007 14:41] - [Meizu M6 SE - тонкий медиаплеер с 8Гб памяти] [25.05.2007 15:02] - [Sony Ericsson назначил нового главу российского представительства] [24.05.2007 19:00] - [HD DVD и Blu-ray разрешат копировать?] [24.05.2007 19:21] - [РТКомм.РУ может приостановить подключение школ к интернету в регионах] [25.05.2007 15:02] - [Спам больше не беспокоит пользователей] [23.05.2007 09:00] - [Обнаружен новый троянский вирус для мобильников] [25.05.2007 13:44] - ["Аптека-Холдинг" ведет учет в ERA Financials] [25.05.2007 14:20] - [PureDepth и Samsung показали самый большой в мире MLD-дисплей] [24.05.2007 10:00] - [Канадские медики создали виртуальный организм человека] http://news.yandex.ru/security.rss [24.05.2007 19:00] - [До 35% программ на ПК во всем мире контрафактные] [23.05.2007 09:40] - [Symantec выпустит новый антивирус серии Norton для Windows Mobile] [23.05.2007 09:20] - [В интернете появился баннер, предлагающий заразить компьютер вирусом] [22.05.2007 23:15] - [Антивирус от компании Symantec "убил" тысячи компьютеров в Китае] [23.05.2007 17:40] - [США: более 50% студентов-пиратов пострадали от вирусов] [25.05.2007 04:00] - [В июне пройдет "Месяц уязвимостей поисковых систем"] [23.05.2007 13:40] - ["Акибанк" укрепляет ИБ вместе с Eset NOD32] [23.05.2007 13:20] - [Пользователи Office 2007 могли остаться без майских патчей Microsoft] [23.05.2007 12:00] - [Ищем выход...: Кибер-войны глобальной политики] [25.05.2007 11:20] - [Pусские хакеры развязали войну] [24.05.2007 15:42] - [Тион-Про - новый российский одноплатный компьютер] [25.05.2007 09:00] - [25 мая 2007 года на территории Департамента кадрового обеспечения МВД России и Следственного комитета при МВД России состоятся пожарно-тактические учения МВД России и МЧС ...] [23.05.2007 14:00] - [Cenzic: топ-10 уязвимостей веб-приложений] [23.05.2007 16:00] - [Новый российский антивирус] [23.05.2007 13:40] - [Подростки стали реже скачивать пиратские материалы] http://news.yandex.ru/internet.rss [23.05.2007 12:40] - [Google пожаловался на незнание своих пользователей] [22.05.2007 17:15] - ["Русские фонды" купили Finance.ua] [24.05.2007 16:40] - [Google удалит из своих баз неинтересных рекламодателей] [24.05.2007 09:00] - [SearchInform теперь поддерживает Web-интерфейс] [23.05.2007 19:40] - [Ученые рассказали о психологии баннерной рекламы] [22.05.2007 18:15] - [В 25 странах мира интернет подвергается жесткой цензуре] [24.05.2007 08:40] - [Stealth Computer LPC-450 - миниатюрная система на Core 2 Duo] [22.05.2007 12:15] - [СУП приправили Яндексом и разбавили "Коммерсантом"] [22.05.2007 14:00] - [Больше денег у Рунета - сильнее интерес законодателей] [22.05.2007 14:30] - [Google News будет платить своим "источникам"?] [24.05.2007 10:40] - [Google перестанет рекламировать рефераты] [24.05.2007 11:20] - [Каждому владельцу сайта - собственный поиск!] [23.05.2007 16:00] - [Barracuda превратил в "зомби" уже 15 тыс. ПК] [23.05.2007 12:40] - [Google откроет университеты для рекламных агентств] [25.05.2007 16:44] - [Рейтинг студентов может появиться на сайтах белорусских ВУЗов]
440Hz не работает. пишет что ошибка в этой строке $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); Fatal error: Call to undefined function: socket_create() in ......... я PHP: скопировал и вставил как есть.
PHP: <?php // выдирание RSS потоков // 440hz ### TOOLS ### function GetXMLFirstVal($r,$t) { if(preg_match_all('/<('.$t.')>(.*)<\/\\1>/Usi',$r,$o)) return $o[2][0]; return false; } function GetXMLAllVal($r,$t) { if(preg_match_all('/<('.$t.')>(.*)<\/\\1>/Usi',$r,$o)) return $o[2]; return array(); } function GetStream($URL,$mode=0) { switch($mode) { // php case 0: $results = file_get_contents($URL); break; // CURL case 1: $ch = curl_init(); curl_setopt ($ch, CURLOPT_URL, $URL); // Destination URL curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); // Output to a variable curl_setopt ($ch, CURLOPT_POST, 0); // Use HTTP POST curl_setopt ($ch, CURLOPT_TIMEOUT, 20); // Default Timeout $results = curl_exec($ch); if(curl_error($ch)) { print_r(curl_getinfo($ch)); exit(); } break; // SOCKETS case 2: $info = parse_url($URL); $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); if ($socket < 0) { echo "socket_create() failed: reason: " . socket_strerror($socket) . "\n"; exit(); } $result = socket_connect($socket, $info['host'], 80); if ($result < 0) { echo "socket_connect() failed.\nReason: ($result) " . socket_strerror($result) . "\n"; } $in = "GET ".$info['path']." HTTP/1.1\r\n"; $in .= "Host: ".$info['host']."\r\n"; $in .= "Connection: Close\r\n\r\n"; socket_write($socket, $in, strlen($in)); $out = ''; $results = ''; while ($out = socket_read($socket, 2048)) { $results .= $out; } socket_close($socket); break; default: $results = ''; } return $results; } ### TOOLS ### // RSS потоки // ТОЛЬКО ссылки БЕЗ параметров! // get.rss?a=b непокатит. тогда нужно юзать CURL $RSSS = array(); $RSSS[] = 'http://tarmans.kombats.ru/?module=news&cmd=rss'; // перебираем потоки foreach($RSSS AS $RSS) { //print("\n$RSS"); // получаем контент // 0 - php // 1- curl // 2- sock $XML = GetStream($RSS,0); if($XML) { // получаеми список всех ITEM $ITEMS = GetXMLAllVal($XML,'item'); $g=0; // перебираем ITEM foreach($ITEMS AS $ITEM) { $g++; // получаем данные $TITLE = GetXMLFirstVal($ITEM,'title'); $LINK = GetXMLFirstVal($ITEM,'link'); $DESC = GetXMLFirstVal($ITEM,'description'); $DATE = GetXMLFirstVal($ITEM,'pubDate'); $CAT = GetXMLFirstVal($ITEM,'category'); // ver 2.0 if(!$DATE) { $DATE = GetXMLFirstVal($ITEM,'dc:date'); } // конвертим дату в unixtime if($DATE) $DATE = strtotime($DATE); else $DATE = time(); // преобразуем спецсимволы $TITLE = html_entity_decode($TITLE,ENT_QUOTES); $DESC = html_entity_decode($DESC,ENT_QUOTES); $CAT = html_entity_decode($CAT,ENT_QUOTES); print("\n<ul> <a href = '$LINK' target=_blank > $TITLE </a> "); $DESC=strip_tags($DESC); $sl = strlen($DESC); if($sl>157){ $DESC = str_split($DESC,156); $DESC = trim($DESC[0]); } $DESC= str_replace("<![CDATA[","",$DESC); $DESC= str_replace("]]>","",$DESC); echo "<li><i>".$DESC."...</i></li>"; echo "<br>"; echo "</ul>"; if ($g==5){break;} } } } // что б в шелле строку переводило ... print("\n"); ?> Я его чуть поменял ... но у меня проблема с кодировкой. Я ставлю include этой функций на другой странице, когда смотрю ту страницу у меня иероглифы Что надо переделать чтоб избежать вот такой проблемы ? Кстати на странице где я делаю инклуд
Все нормально. Пасиб Может кому-то понадобиться я передлал его чуток. Можно ставить сколько новостей хотим. На сайте делаем инклуд этого файла а потом PHP: echo DisplayRss("http://www.darkclan.ru/news/?action=rss", 5); где вместо 5 ставим цифру зависимо от сколько новостей нам надо PHP: <?php // выдирание RSS потоков // 440hz ### TOOLS ### function GetXMLFirstVal($r,$t) { if(preg_match_all('/<('.$t.')>(.*)<\/\\1>/Usi',$r,$o)) return $o[2][0]; return false; } function GetXMLAllVal($r,$t) { if(preg_match_all('/<('.$t.')>(.*)<\/\\1>/Usi',$r,$o)) return $o[2]; return array(); } function GetStream($URL,$mode=0) { switch($mode) { // php case 0: $results = file_get_contents($URL); break; // CURL case 1: $ch = curl_init(); curl_setopt ($ch, CURLOPT_URL, $URL); // Destination URL curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); // Output to a variable curl_setopt ($ch, CURLOPT_POST, 0); // Use HTTP POST curl_setopt ($ch, CURLOPT_TIMEOUT, 20); // Default Timeout $results = curl_exec($ch); if(curl_error($ch)) { print_r(curl_getinfo($ch)); exit(); } break; // SOCKETS case 2: $info = parse_url($URL); $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); if ($socket < 0) { echo "socket_create() failed: reason: " . socket_strerror($socket) . "\n"; exit(); } $result = socket_connect($socket, $info['host'], 80); if ($result < 0) { echo "socket_connect() failed.\nReason: ($result) " . socket_strerror($result) . "\n"; } $in = "GET ".$info['path']." HTTP/1.1\r\n"; $in .= "Host: ".$info['host']."\r\n"; $in .= "Connection: Close\r\n\r\n"; socket_write($socket, $in, strlen($in)); $out = ''; $results = ''; while ($out = socket_read($socket, 2048)) { $results .= $out; } socket_close($socket); break; default: $results = ''; } return $results; } ### TOOLS ### // RSS потоки // ТОЛЬКО ссылки БЕЗ параметров! // get.rss?a=b непокатит. тогда нужно юзать CURL /* $RSSS = array(); $RSSS[] = 'http://tarmans.kombats.ru/?module=news&cmd=rss'; $RSSS[] = 'http://www.paladins.ru/rss.php'; */ function DisplayRss($RSS,$j) // перебираем потоки { //print("\n$RSS"); // получаем контент // 0 - php // 1- curl // 2- sock $XML = GetStream($RSS,0); if($XML) { // получаеми список всех ITEM $ITEMS = GetXMLAllVal($XML,'item'); $g=0; // перебираем ITEM foreach($ITEMS AS $ITEM) { $g++; // получаем данные $TITLE = GetXMLFirstVal($ITEM,'title'); $LINK = GetXMLFirstVal($ITEM,'link'); $DESC = GetXMLFirstVal($ITEM,'description'); $DATE = GetXMLFirstVal($ITEM,'pubDate'); $CAT = GetXMLFirstVal($ITEM,'category'); // ver 2.0 if(!$DATE) { $DATE = GetXMLFirstVal($ITEM,'dc:date'); } // конвертим дату в unixtime if($DATE) $DATE = strtotime($DATE); else $DATE = time(); // преобразуем спецсимволы $TITLE = html_entity_decode($TITLE,ENT_QUOTES); $DESC = html_entity_decode($DESC,ENT_QUOTES); $CAT = html_entity_decode($CAT,ENT_QUOTES); print("\n<ul> <a href = '$LINK' target=_blank > $TITLE </a> "); $DESC=strip_tags($DESC); $sl = strlen($DESC); if($sl>157){ $DESC = str_split($DESC,156); $DESC = trim($DESC[0]); } $DESC= str_replace("<![CDATA[","",$DESC); $DESC= str_replace("]]>","",$DESC); echo "<li><i>".$DESC."...</i></li>"; echo "<br>"; echo "</ul>"; if ($g==$j){break;} } } } // что б в шелле строку переводило ... print("\n"); ?> З.Ы. Сорри за мой албанский
Знающие люди, помогите новичку плс =) использую: PHP: <? require("./rss.php"); $rssurl = "http://feeds.feedburner.com/domainblogru?format=xml"; $cRss = new rss($rssurl); ?> <? $i = 0; foreach($cRss->GetArrayItem() as $item) { if($i<7){ echo "<tr><td class=\"data\" align=\"left\" colspan=\"2\">".$item['pubdate']."</td></tr>"; echo "<tr><td class=\"text\" align=\"left\" colspan=\"2\">".$item['title']."</td></tr>"; echo "<tr><td class=\"readmore\" align=\"left\" colspan=\"2\"><a href=\"".$item['link']."\">>>> читать дальше</a></td>"; echo "<tr><td align=\"left\" colspan=\"2\"> </td></tr>"; } $i++; } ?> и PHP: <? class rss{ var $sUrl; var $sBuff; var $rXml_parser; var $aParentField; var $aCurrrentField; var $aCurrentNamespace; var $aRss; var $aItems; var $aChannel; function rss($url=""){ if(!isset($url) || empty($url)){ echo "no RSS url"; exit(); } $this->aChannel = array(); $this->aItems = array(); $this->aRss = array($this->aChannel, $this->aItems); $this->aParentField = array(); $this->xml_parser = undef; $this->sUrl = strval($url); $this->GetUrl(); $this->ParseRss(); } function GetUrl(){ $this->sBuff = join ("", file($this->sUrl)); } function ParseRss(){ $this->rXml_parser = xml_parser_create(); xml_set_object($this->rXml_parser, &$this); xml_set_element_handler($this->rXml_parser, "starttag", "endtag"); xml_set_character_data_handler($this->rXml_parser, "cdata"); if (!xml_parse($this->rXml_parser, $this->sBuff)) { die(sprintf("XML error: %s at line %d", xml_error_string(xml_get_error_code($this->rXml_parser)), xml_get_current_line_number($this->rXml_parser)) ); } xml_parser_free($this->rXml_parser); $this->aRss = array("channel" => $this->aChannel, "items" => $this->aItems); } function GetArrayRss(){ return $this->aRss; } function GetChannelVal($sVal){ return $this->aChannel[$sVal]; } function GetArrayChannel(){ return $this->aChannel; } function GetArrayItem(){ return $this->aItems; } function starttag($rXml_parser, $tag, $attributes){ $tag = strtolower( $tag ); $namespace = false; if ( strpos( $tag, ':' ) ) { list($namespace, $tag) = split( ':', $tag, 2); } $this->aCurrrentField = $tag; if ( $namespace and $namespace != 'rdf' ) { $this->aCurrentNamespace = $namespace; } if ( $tag == 'channel' ) { array_unshift( $this->aParentField, 'channel' ); }elseif ( $tag == 'items' ) { array_unshift( $this->aParentField, 'items' ); }elseif ( $tag == 'item' ){ array_unshift( $this->aParentField, 'item' ); }elseif ( $tag == 'cdatainput' ) { array_unshift( $this->aParentField, 'cdatainput' ); }elseif ( $tag == 'image' ) { array_unshift( $this->aParentField, 'image' ); } } function endtag($rXml_parser, $tag){ $tag = strtolower($tag); if ( $tag == 'item' ) { $this->aItems[] = $this->current_item; $this->current_item = array(); array_shift( $this->aParentField ); }elseif ( $tag == 'channel' or $tag == 'items' or $tag == 'cdatainput' or $tag == 'image' ) { array_shift( $this->aParentField ); } $this->aCurrrentField = ''; $this->aCurrentNamespace = false; } function cdata($rXml_parser, $cdata){ if ( $this->aParentField[0] == $this->aCurrrentField || !$this->aCurrrentField ){ return; }elseif ( $this->aParentField[0] == 'channel') { if ( $this->aCurrentNamespace ) { $this->aChannel[ $this->aCurrentNamespace ][ $this->aCurrrentField ] .= $cdata; }else{ $this->aChannel[ $this->aCurrrentField ] .= $cdata; } }elseif ( $this->aParentField[0] == 'item' ){ if ( $this->aCurrentNamespace ) { $this->current_item[ $this->aCurrentNamespace ][ $this->aCurrrentField ] .= $cdata; }else{ $this->current_item[ $this->aCurrrentField ] .= $cdata; } }elseif ( $this->aParentField[0] == 'cdatainput' ) { if ( $this->aCurrentNamespace ) { $this->cdatainput[ $this->aCurrentNamespace ][ $this->aCurrrentField ] .= $cdata; }else{ $this->cdatainput[ $this->aCurrrentField ] .= $cdata; } }elseif ( $this->aParentField[0] == 'image' ) { if ( $this->aCurrentNamespace ) { $this->image[ $this->aCurrentNamespace ][ $this->aCurrrentField ] .= $cdata; }else{ $this->image[ $this->aCurrrentField ] .= $cdata; } } } } ?> на одной странице выдает новости нормально, на второй: что с этим делать? =( Помогите начинающему разобраться =) PS при изменении charset на UTF-8 эта колонка становиться нормально видна, а остальная страничка в квадратиках..
пееркодироват надо из utf8 в cp1251 iconv() смотри <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/rss2full.xsl" type="text/xsl" media="screen"?> надо поймать эту коди ровку и конвертировать все в cp1251
а можно чуть подробнее что куда дописывать? соль в том, что вышеизложенные скрипты не мои, а к автору сейчас достучаться нельзя
PHP: foreach($cRss->GetArrayItem() as $item) { if($i<7){ $item['title'] = iconv('UTF-8','CP1251',$item['title']); [skip]