Нужна грабилка новостей с секлаба, полюбому кто то заморачивался уже =) И др граб скрипт с It ресурсов.
киберсекурити раздайт новости с линками на свою пагу, как заюзать и пример парсинга хмл-ки на пхп тут
#Мимо пробегал,мелкие наброски #Почему то LWP::Simple наотрез отказался работать с секлабом , как выяснилось там проверка на валидность браузера Code: #!perl use strict; use warnings; use LWP::UserAgent; my $ua = LWP::UserAgent->new( agent => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.8) Gecko/20071008 Firefox/2.0.0.8' ); my $response = $ua->get('http://www.securitylab.ru/'); my $res = $response->as_string; my @t = $res =~m/<font class="smalltext">(.+)<\/font><\/div>/g; foreach (@t) { printcyr( "$_ \n\n"); } sub printcyr { my $text = shift; $text =~ y/А-яЁё/\x80-\xaf\xe0-\xf1/; print $text; } Code: ............ Тестирование проводится с согласия родителей. По заявлению поставщика, использо ание чипов позволит быстрее регистрировать учеников, обеспечивать их безопаснос ь и оптимизировать дисциплину. Программистам из компании SlySoft удалось взломать улучшенную систему защиты оп ических дисков формата Blu-ray, известную под названием BD+ и до недавнего врем ни считавшуюся абсолютно неуязвимой для хакерских атак. ............
тут utf8 http://www.cybersecurity.ru/inform/1.php парсь пхп ну и переводи к нужной кодировке если сильно нада, то позже сделаю грабер
Не трудно получилось PHP: <? $seclab = file_get_contents('http://www.securitylab.ru/_Services/Export/RSS/news.php'); $seclab = str_replace('<title>SecurityLab.ru - Новости</title>', NULL, $seclab); $seclab = str_replace('<description>Защита от нападения в сети</description>', NULL, $seclab); preg_match_all('|<title>(.*)</title>|sU', $seclab, $titles, PREG_SET_ORDER); preg_match_all('|<description>(.*)</description>|sU', $seclab, $contents, PREG_SET_ORDER); for( $i = 0; $i < ((count($titles) + count($contents)) / 2); $i++ ) { echo('Название новости: '.$titles[$i][1].'<br>'); echo('Новость: '.$contents[$i][0].'<br><hr><br>'); } ?> Однако только главная страница.
коряво но нормально парсит.. /*з.ы. исправлял старый скрипт.. мо сейчас отлажу и уберу лишнее*/ PHP: <?php error_reporting(0); $xmls="http://www.securitylab.ru/_Services/Export/RSS/news.php"; $news = array(); $currentNews = null; $index = null; function saxStartElement($parser,$name,$attrs) { global $currentNews,$index,$l,$type; switch($name) { case 'channel': $news = array(); break; case 'item': $currentNews = array(); break; default: $index = $name; break; }; } function saxEndElement($parser,$name) { global $news,$currentNews,$index, $l,$type,$ii,$index; $l[$name]=$currentNews[$name]; if ((is_array($currentNews) && ($name=='item'))) { $news[] = $currentNews; $currentNews = null; }; $index = null; $ii++; } function saxCharacterData($parser,$data) { global $currentNews,$index,$l; if ((is_array($currentNews)) && ($index)) $currentNews[$index] = $data; } $parser = xml_parser_create(); xml_set_element_handler($parser,'saxStartElement','saxEndElement'); xml_set_character_data_handler($parser,'saxCharacterData'); xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,false); $xml = join('',file($xmls)); if (!xml_parse($parser,$xml,true)) die(sprintf('<div align=center><font size=2 face=verdana color=red>не прошел коннект</font></div>', xml_error_string(xml_get_error_code($parser)), xml_get_current_line_number($parser))); xml_parser_free($parser); foreach($news as $n) { echo $n['title']." - ".$n['link']." - ".$n['description']." - ".$n['pubDate']."<br><br>"; } ?> насчет преобразования с utf8-->cp1251 использовал раньше PHP: function utf8tocyr($string) { $result=""; for ($c = 0; $c < strLen($string); $c=$c+2) { $ub = ord(subStr($string, $c, 1)); $lb = ord(subStr($string, $c+1, 1)); if ($ub == 208) { if ($lb != 81) { $result = $result.chr($lb + 48); } else { $result = $result.'Ё'; } } if ($ub == 209) { if ($lb != 91) { $result = $result.chr($lb + 112); } else { $result = $result.'ё'; } } if (($ub != 208) AND ($ub != 209) AND ($lb != 91) AND ($lb != 81)) { $result = $result.chr($ub); $c = $c-1; } } return $result; }
Попробуй тогда типо этого. только если бы знать, какая там кодировка стоит. У меня всё нормально отображается. PHP: <? $seclab = file_get_contents('http://www.securitylab.ru/_Services/Export/RSS/news.php'); $seclab = str_replace('<title>SecurityLab.ru - Новости</title>', NULL, $seclab); $seclab = str_replace('<description>Защита от нападения в сети</description>', NULL, $seclab); preg_match_all('|<title>(.*)</title>|sU', $seclab, $titles, PREG_SET_ORDER); preg_match_all('|<description>(.*)</description>|sU', $seclab, $contents, PREG_SET_ORDER); for( $i = 0; $i < ((count($titles) + count($contents)) / 2); $i++ ) { echo('Название новости: '.iconv("UTF-8", "WINDOWS-1251", $titles[$i][1]).'<br>'); echo('Новость: '.iconv("UTF-8", "WINDOWS-1251", $contents[$i][0]).'<br><hr><br>'); } ?> Если не заработает, попробуй поизменять "UTF-8" на "KOI8-R" или "KOI8-U" вобщем попробуй как-нибудь. В http://www.cybersecurity.ru/inform/1.php кодировка UTF-8