FTP & PR cheker [perl]

Discussion in 'PHP' started by Roba, 27 Mar 2008.

  1. Roba

    Roba Banned

    Joined:
    24 Oct 2007
    Messages:
    237
    Likes Received:
    299
    Reputations:
    165
    Файл с фтп в формате
    Code:
    ftp://bla:pas@xek.ru
    Для всех c pr <= N/A, отмечает как "-". Все остальное в описании.
    Code:
    #!/usr/bin/perl
    #############################INFO#############################
    #          FTP-checker & PR-checker (multithreads)             #
    # Exec:                                                        #
    # fc.pl [file] [threads] [key]                                 #
    # key:                                                         #
    # 0 : Check FTP                                                #
    # 1 : Check FTP & PR                                           # 
    # 2 : Check PR only                                            #
    # Example:                                                     #
    # fc.pl ftplist.txt 15 1                                       #
    # Save good result in res.txt                                  #
    ##############################################################
    # Author: ZAMUT                                                #
    # Homepage: zamuts.ueuo.com                                    #
    ##############################################################
    use Net::FTP;
    use strict;
    use warnings;
    use threads;
    use threads::shared;
    use LWP::UserAgent;
    my  @ftplist:shared;
    my  ($all,$n,$k):shared;
    open IN,"<$ARGV[0]";
    open GOOD,'>>res.txt';
    print "\nChecking ...\n";
    ($n,$all) = 0; $k = $ARGV[2];
    my ($flph,$h,$flp,$t,$l,$p,$ftp);
    push @ftplist,$_ while(<IN>);chomp(@ftplist);
    for(0..$ARGV[1]) {threads->create(\&Check,$_);}
    for(threads->list) { $_->join; }
    sub Check
    { while (@ftplist)
      { $flph = shift @ftplist;
        if($flph=~/^ftp:\/\//i)
         {($flp,$h)=split('\@',$flph);$t=$flp=~s/ftp:\/\///i;($l,$p)=split(':',$flp); $all++;} ;
        if($k==2){ print GOOD $h.prc($h)."\n";}
        if($k==0 || $k==1){
        $ftp = Net::FTP->new($h);
        if($ftp->login($l,$p))
        { if ($k) {print GOOD "$flph\t".prc($h)."\n";}
          else    {print GOOD "$flph\n"};
          ++$n; };
        $ftp->quit;} }
    }
    close GOOD;close IN;
    if($k!=2) {print "Checked:$all\nGood:$n\n"; }  else {print "Checked:$all"; };
    sub prc
    { sleep(3);
      my $br=LWP::UserAgent->new;
      my $res=$br->post("http://www.prchecker.info/check_page_rank.php",['action'=>'docheck','urlo'=>"http://$h",'do_it_now'=>' Check PR']);
      if($res->as_string=~/the page rank value is <b>([0-9 ]{1,2})<\/b> from 10 possible points/) {return ' PR:'.$1;} else {return ' PR:-';}
    
    З.Ы.
    Код сократил в 1.5 раза, добавлена функция чека только PR.
     
    #1 Roba, 27 Mar 2008
    Last edited: 16 May 2008
    6 people like this.
  2. Roba

    Roba Banned

    Joined:
    24 Oct 2007
    Messages:
    237
    Likes Received:
    299
    Reputations:
    165
    обновил
     
  3. t00th

    t00th Banned

    Joined:
    15 Jul 2007
    Messages:
    37
    Likes Received:
    15
    Reputations:
    6
    Зачем так извращаться с PR когда есть готовый модуль ?
    CPAN => WWW::Google::pageRank.Да и вообще постить тут свои perl творения нету смысла,в этом разделе сидят только "крутые" ПыХыПы кодеры