Perl , post

Discussion in 'PHP' started by $p01nt, 21 Feb 2008.

  1. bul.666

    bul.666 булка

    Joined:
    6 Jun 2006
    Messages:
    719
    Likes Received:
    425
    Reputations:
    140
    C:\Perl\bin>perl scr/reg.pl
    Bareword found where operator expected at scr/reg.pl line 6, near "m/<A>(.+)<(ba
    ckslash)/A"
    Unquoted string "backslash" may clash with future reserved word at scr/reg.pl li
    ne 8.
    syntax error at scr/reg.pl line 6, near "m/<A>(.+)<(backslash)/A"
    Search pattern not terminated at scr/reg.pl line 8.

    А не легче экранировать?
    <\/DIV>

    Более ч0ткий пример (c) demonoid
     
    #21 bul.666, 22 Feb 2008
    Last edited: 22 Feb 2008
  2. Piflit

    Piflit Banned

    Joined:
    11 Aug 2006
    Messages:
    1,249
    Likes Received:
    585
    Reputations:
    31
    бугага. в теге
    PHP:
     бэкслеши '\' не отображаются, поэтому я заменил его словом. еще раз бугага
     
  3. Spyder

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

    Joined:
    9 Oct 2006
    Messages:
    1,388
    Likes Received:
    1,209
    Reputations:
    475
    ыыы, backslash
    \/
     
  4. bul.666

    bul.666 булка

    Joined:
    6 Jun 2006
    Messages:
    719
    Likes Received:
    425
    Reputations:
    140
    Пиф ты вообще свой код проверял? Меня очень сильно возбудила 8 линия ^^ +)
     
    #24 bul.666, 22 Feb 2008
    Last edited: 22 Feb 2008
  5. Piflit

    Piflit Banned

    Joined:
    11 Aug 2006
    Messages:
    1,249
    Likes Received:
    585
    Reputations:
    31
    вот так =)
    это если надо тереть линки.
    я просто немного переписал твой код. я хз че он должен делать =))
     
  6. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,194
    Reputations:
    252
    Code:
    s/<A (.+)\\/A>//igs;
     
  7. bul.666

    bul.666 булка

    Joined:
    6 Jun 2006
    Messages:
    719
    Likes Received:
    425
    Reputations:
    140
    Он должен выдерать текст между <div> и </div>
     
  8. ZET36

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

    Joined:
    8 Oct 2007
    Messages:
    250
    Likes Received:
    49
    Reputations:
    0
    как понял начало нужно написат парсер выдирающий из страницы нужное нам значение.
    возбмём в пример яндэкс например нам нужно узнать значение id из этой строки (17 строка ответа)
    </script><table id=head><tr> итд .....
    и отправить запрос с этим значением запрос скажем запрос будет
    http://www.yandex.ru/yandsearch?text=значение


    Code:
    use Socket;
    
    $host="www.yandex.ru";
    $port="80";
    
    socket(SOCK, PF_INET, SOCK_STREAM, getprotobyname('tcp'));
    
    $iaddr = inet_aton($host);
    $paddr = sockaddr_in($port, $iaddr);
    
    connect(SOCK, $paddr);
    send (SOCK, "GET / HTTP/1.0\n\n", 0);
    
    @data=<SOCK>; # ответ сервера
    close(SOCK);
    
    $fullitself=@data[17]; # считаем в какой строке ответа нужное нам значение она 17тая
    
    @temp=split('table id=',$fullitself); # table id= это символы которые идут перед нашим значением
    @semp=split('>',@temp[1]); # > а этот символ после нашего значения 
    $id =  @semp[0]; # и так наше значение это переменная $id
    
    
    
    
    
    
    
    
    
    connect(SOCK, $paddr);
    send (SOCK, "GET /yandsearch?text=",$id," HTTP/1.0\n\n", 0); #отправляем запрос
    
    @data2=<SOCK>;
    close(SOCK);
    
     # извените если гденибуть ошибся, не проверял
    
    
    
    но вот если позиция строки постоянно меняется в ответе нужно будет ещё писать цикл который будет находить эту строку переберая каждую в этом массиве.

    но намного легче это будет реализовать в пхп так как там есть специальная функция которая исчет ключ по значению array_search(" значение", $массив);
     
    #28 ZET36, 23 Feb 2008
    Last edited: 23 Feb 2008
  9. ZET36

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

    Joined:
    8 Oct 2007
    Messages:
    250
    Likes Received:
    49
    Reputations:
    0
    и к тому же поле "Город" там нефильтруется. активнаяя хсс
     
  10. bul.666

    bul.666 булка

    Joined:
    6 Jun 2006
    Messages:
    719
    Likes Received:
    425
    Reputations:
    140
    Code:
    use Socket;
    
    $host="www.yandex.ru";
    $port="80";
    
    $NEED_STR = "<table id=__STRING__>"; #Строка поиска
    
    @parse_need = split("__STRING__",$NEED_STR);
    #print @parse_need[1];
    socket(SOCK, PF_INET, SOCK_STREAM, getprotobyname('tcp'));
    
    $iaddr = inet_aton($host);
    $paddr = sockaddr_in($port, $iaddr);
    
    connect(SOCK, $paddr);
    send (SOCK, "GET / HTTP/1.0\n\n", 0);
    
    @data=<SOCK>; 
    close(SOCK);
    
    $size = @data;
    for ($i=0;$i<$size;$i++) {
    $fullitself=@data[$i]; 
    
    @temp=split(@parse_need[0],$fullitself); 
    @semp=split(@parse_need[1],@temp[1]); 
    $id =  @semp[0];
    }
    
    if ($id) {
    print "\n\n[!] FOUND STRING: '$id'\n\n";
    }else {
    print "\n\n[!] NOT FOUND\n\n";
    }
    
    Вот кстати небольшой тюнинг твоего скриптенга:
    $NEED_STR = "<table id=__STRING__>";

    Тут вводишь строку которую надо искать;
    __STRING__ Отмечено место, где будет выдран текст для вставки в $id
     
  11. bul.666

    bul.666 булка

    Joined:
    6 Jun 2006
    Messages:
    719
    Likes Received:
    425
    Reputations:
    140
    Ах ну да еще ты хотел поиск по яндексу =)
    Короче я сделал, чтобы выводил количество найденых результатов
    Вот полный скрипт:
    PHP:
    #!/usr/bin/perl 
    use Socket;

    $host="www.yandex.ru";
    $port="80";

    $NEED_STR "<table id=__STRING__>";

    @
    parse_need split("__STRING__",$NEED_STR);

    socket(SOCKPF_INETSOCK_STREAMgetprotobyname('tcp'));

    $iaddr inet_aton($host);
    $paddr sockaddr_in($port$iaddr);

    connect(SOCK$paddr);
    send (SOCK"GET / HTTP/1.0\n\n"0);

    @
    data=<SOCK>; 
    close(SOCK);

    $size = @data;
    for (
    $i=0;$i<$size;$i++) {
    $fullitself=@data[$i]; 

    @
    temp=split(@parse_need[0],$fullitself); 
    @
    semp=split(@parse_need[1],@temp[1]); 
    $id =  @semp[0];
    }

    if (
    $id) {
    print 
    "\n\n[!] FOUND STRING: '$id'\n\n";
    }else {
    print 
    "\n\n[!] NOT FOUND\n\n";
    }

    socket(SOCKPF_INETSOCK_STREAMgetprotobyname('tcp'));

    connect(SOCK$paddr);
    $header "GET /yandsearch?text=".$id." HTTP/1.0\r\n"
    ."User-Agent: Opera/10.84 (Windows NT 5.1; U; ru)\r\n"
    ."Host: www.yandex.ru\r\n"
    ."Referer: http://yandex.ru/\r\n"
    ."Proxy-Connection: close\r\n"
    ."Content-type: application/x-www-form-urlencoded\r\n\r\n";

    send (SOCK$header0);

    @
    data2=<SOCK>;
    close(SOCK);

    $size = @data2;

    for (
    $i=0;$i<$size;$i++) {
    $fullitself=@data2[$i]; 

    $fullitself =~ s/(&.*?;)//egs;
     
    if ($fullitself =~m/<b>[0-9]/) {
         
    $fullitself =~/\b([0-9]+)/;
        
    $result = $1;
      }
    }

    if (
    $result) {
    print 
    "\n\n[!] YANDEX FOUND '$result' PAGES WITH '$id'\n\n";
    }else {
    print 
    "\n\n[!] NOT FOUND\n\n";
    }
    Резултат скрипта с текущим содержанием:
     
    #31 bul.666, 23 Feb 2008
    Last edited: 23 Feb 2008
    2 people like this.
  12. biophreak

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

    Joined:
    3 Aug 2007
    Messages:
    348
    Likes Received:
    63
    Reputations:
    15
    use warnings;
    use strict;
    В начало скрипта :))) И правим его :)