Грабилка новостей.

Discussion in 'PHP' started by guest3297, 1 Nov 2007.

  1. guest3297

    guest3297 Banned

    Joined:
    27 Jun 2006
    Messages:
    1,246
    Likes Received:
    639
    Reputations:
    817
    Нужна грабилка новостей с секлаба, полюбому кто то заморачивался уже =) И др граб скрипт с It ресурсов.
     
  2. Shred

    Shred Elder - Старейшина

    Joined:
    22 May 2006
    Messages:
    200
    Likes Received:
    29
    Reputations:
    0
    киберсекурити раздайт новости с линками на свою пагу, как заюзать и пример парсинга хмл-ки на пхп тут
     
  3. guest3297

    guest3297 Banned

    Joined:
    27 Jun 2006
    Messages:
    1,246
    Likes Received:
    639
    Reputations:
    817
    Странная у них кодировка...

    Еще варианты?
     
  4. demonoid

    demonoid Banned

    Joined:
    12 Jan 2007
    Messages:
    101
    Likes Received:
    111
    Reputations:
    27
    #Мимо пробегал,мелкие наброски
    #Почему то 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+ и до недавнего врем
    ни считавшуюся абсолютно неуязвимой для хакерских атак.
    ............
     
    1 person likes this.
  5. guest3297

    guest3297 Banned

    Joined:
    27 Jun 2006
    Messages:
    1,246
    Likes Received:
    639
    Reputations:
    817
    Надо на php
     
  6. halkfild

    halkfild Members of Antichat

    Joined:
    11 Nov 2005
    Messages:
    365
    Likes Received:
    578
    Reputations:
    313
    тут utf8 http://www.cybersecurity.ru/inform/1.php
    парсь пхп ну и переводи к нужной кодировке

    если сильно нада, то позже сделаю грабер
     
    _________________________
  7. guest3297

    guest3297 Banned

    Joined:
    27 Jun 2006
    Messages:
    1,246
    Likes Received:
    639
    Reputations:
    817
    Надо сделай =)
     
  8. NOmeR1

    NOmeR1 Everybody lies

    Joined:
    2 Jun 2006
    Messages:
    1,068
    Likes Received:
    783
    Reputations:
    213
    Не трудно получилось
    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$titlesPREG_SET_ORDER);
    preg_match_all('|<description>(.*)</description>|sU'$seclab$contentsPREG_SET_ORDER);
    for( 
    $i 0$i < ((count($titles) + count($contents)) / 2); $i++ )
    {
        echo(
    'Название новости: '.$titles[$i][1].'<br>');
        echo(
    'Новость: '.$contents[$i][0].'<br><hr><br>');
    }
    ?>
    Однако только главная страница.
     
    1 person likes this.
  9. halkfild

    halkfild Members of Antichat

    Joined:
    11 Nov 2005
    Messages:
    365
    Likes Received:
    578
    Reputations:
    313
    коряво но нормально парсит.. /*з.ы. исправлял старый скрипт.. мо сейчас отлажу и уберу лишнее*/

    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$c1)); 
    $lb ord(subStr($string$c+11)); 

    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
    }
     
    _________________________
    #9 halkfild, 1 Nov 2007
    Last edited: 2 Nov 2007
    1 person likes this.
  10. NOmeR1

    NOmeR1 Everybody lies

    Joined:
    2 Jun 2006
    Messages:
    1,068
    Likes Received:
    783
    Reputations:
    213
    Попробуй тогда типо этого. только если бы знать, какая там кодировка стоит. У меня всё нормально отображается.
    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$titlesPREG_SET_ORDER);
    preg_match_all('|<description>(.*)</description>|sU'$seclab$contentsPREG_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
     
  11. nikoTM

    nikoTM Elder - Старейшина

    Joined:
    25 Sep 2007
    Messages:
    41
    Likes Received:
    6
    Reputations:
    0
    На PHP.ru 440hz(А. Луговой..админ ихний) написал один оффигенный парсер..посмотрите там