dimats
Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Эта тема кое где упоминается вскользь, но найти ее нереально... решил вынести отдельно.... В общем что делать если есть шел и надо туда качать с рапидшары ? есть решения ! например здесь : http://relf.livejournal.com/69652.html Код: #!/usr/bin/perl print("RapidShare downloader 2.2 (c) 2005,06 by RElf\n"); my $tries = 20; # maximum number of tries per file my $minsize = 20000; # files of smaller size considered "bad" my $fake_agent = "Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 6.0)"; # wget executable name my $wget = "wget"; # wget options: set up proxy or fake agent or both or whatever... #$wget .= " -e http_proxy=192.168.0.1:80 --proxy"; $wget .= " -U \"$fake_agent\""; my $tempfile1 = "rapidl1.tmp"; my $tempfile2 = "rapidl2.tmp"; $| = 1; if($#ARGV<0) { print("Usage: rapidl.pl [-p <proxy>] {<url> | -i <file> | -r <url>}\n"); exit; } my $all; for(my $i=0;$i<=$#ARGV;++$i) { if($ARGV[$i] eq "-p") { $wget.=" -e http_proxy=$ARGV[++$i] --proxy"; } elsif($ARGV[$i] eq "-r") { $all=`$wget -O - $ARGV[++$i]`; } elsif($ARGV[$i] eq "-i") { open(UL,$ARGV[++$i]) or die("Cannot open URL list!"); $/ = undef; $all=<UL>; close(UL); } elsif($i==$#ARGV) { $all=$ARGV[$i]; } else { print("Unrecognized option.\n"); exit; } } my @failed; while($all=~ /(http:\/\/(www.)?rapidshare.de\/files\/.*?)(["\n\s]|$)/gs) { my $url = $1; if(hardGet($url)) { push(@failed,$url); } print($url,"\n"); } print("FAILED URLS: ",scalar(@failed),"\n"); foreach (@failed) { print($_,"\n"); } exit; sub hardGet { my ($url) = @_; my $t = 1; my $rc; do { print("Try:",$t,": ",$url,"\n"); $rc = rapidGet($url); print("RETURN: ",$rc,"\n"); if($rc==50005) { if( /wait (\d*) minutes/ ) { for(my $m=$1;$m;$m--) { print("\rWaiting $m minutes... "); sleep(60); } print("\rWaiting $1 minutes completed!\n"); $rc = 1; $t--; } elsif( /try again later/ ) { print("Suggested to try again.\n"); $rc = 1; } elsif( /Your IP-address (.*) is already downloading/ ) { print("Your IP $1 is already downloading something.\n"); $rc = 1; } else { print("Please check manually!\n"); } } if($rc>=50000) { print("CRITICAL ERROR. Giving up.\n"); return $rc; } else { print("Cooling down...\n"); sleep 60; } } while($t++<$tries && $rc); if($rc) { print("FAILED:",$rc,": ",$url,"\n"); } return $rc; } sub rapidGet { my ($url) = @_; # parse url if( $url!~ /rapidshare.de(.*)$/ ) { return 50000; } my $location=$1; if( $location!~ /\/([^\/]*?)(.html)?$/ ) { return 50001; } my $filename=$1; # click [Free] button and process the second page $_=`$wget http://rapidshare.de/ -O - --post-data="uri=$location&dl.start=Free" --referer=$url`; if($?) { return 10000+$?; } my $sec; if( /var c = (\d+);/) { $sec=$1; } else { $sec=90; } if( ! /unescape\(\'(.*)\'\)/ ) { return 50005; } $_=urlDecode($1); if( ! /action=\"(.*)\" method/ ) { return 50002; } my $link=$1; if( ! /type=\"text\" name=\"(.*?)\"/ ) { return 50003; } my $codeword=$1; if( ! /src=\"(.*png)\"\>/ ) { return 50004; } my $png=$1; print("Waiting ".$sec."+5 seconds for the ticket...\n"); sleep($sec+5); # get and recognize the code `$wget $png --referer=http://rapidshare.de/ -O $tempfile1`; if($?) { return 20000+$?; } my $code = OCR($tempfile1); unlink($tempfile1); # get the file `$wget "$link?$codeword=$code" -O "$filename" --referer=http://rapidshare.de/`; if($?) { return 30000+$?; } my $size = -s $filename; if($size<$minsize) { return 40000; } return 0; } sub urlDecode { my ($string) = @_; $string =~ tr/+/ /; $string =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; return $string; } sub OCR { $_ = `convert $_[0] -compress none pnm:-`; my @pnm = split; my $n = $pnm[1]; my $m = $pnm[2]; splice(@pnm,0,4); my @clr; $#clr = $m; for(my $i=0;$i<$m;$i++) { $clr[$i] = []; for(my $j=0;$j<$n;$j++) { my @rgb = splice(@pnm, 0, 3); $clr[$i]->[$j] = ($rgb[0]<<16) + ($rgb[1]<<8) + $rgb[2]; } } my $white = $clr[0]->[0]; # detecting other colors and sort them according to average x value my %S; my %E; my %D; for(my $i=0;$i<$m;$i++) { for(my $j=0;$j<$n;$j++) { my $k = $clr[$i]->[$j]; if( $k != $white) { if(!exists($S{$k})) { $S{$k}=0 } if(!exists($E{$k})) { $E{$k}=0 } if(!exists($D{$k})) { $D{$k}=0 } $S{$k}++; $E{$k} += $j; $D{$k} += $j*$j; } } } foreach my $key (keys %E) { $E{$key} /= $S{$key}; # average $D{$key} /= $S{$key}; $D{$key} -= $E{$key}**2; # dispersion } my $TOPCOL = 5; my @c; foreach my $key (keys %D) { if($D{$key}>200) { if($S{$key}>200) { #print("OOPS! Picture has 2 colors!\n"); push(@c,$key); $TOPCOL = 3; } delete($S{$key}); delete($E{$key}); delete($D{$key}); } } # leave 5 most represented colors my %C = reverse %S; my @k = sort {$a<=>$b} keys %C; my $t = $k[-$TOPCOL]; foreach my $key (keys %S) { if($S{$key}<$t) { delete($S{$key}); delete($E{$key}); delete($D{$key}); } } %C = reverse %E; foreach my $key (sort {$a<=>$b} keys %C) { push(@c,$C{$key}); } if($TOPCOL==3) { push(@c,$c[0]); } # creating separate BW images for each letter my @L1; my @L2; my @L3; $#L1=$m; $#L2=$m; $#L3=$m; for(my $i=0;$i<$m;$i++) { $L1[$i] = []; $L2[$i] = []; $L3[$i] = []; for(my $j=0;$j<$n;$j++) { $L1[$i]->[$j] = $white; $L2[$i]->[$j] = $white; $L3[$i]->[$j] = $white; my $k = $clr[$i]->[$j]; if($j<$n/2) { if($k==$c[0] || $k==$c[1]) { $L1[$i]->[$j]=0 } } if($k==@c[1] || $k==$c[2] || $k==$c[3]) { $L2[$i]->[$j]=0 } if($j>$n/2) { if($k==$c[3] || $k==$c[4]) { $L3[$i]->[$j]=0 } } } } return recog(\@L1) . recog(\@L2) . recog(\@L3); } sub recog { my ($a) = @_; my $m = scalar(@$a); my $n = scalar(@{$a->[0]}); my $white = $a->[0]->[0]; my @L; # clean and smooth the image for(my $i=0;$i<$m;$i++) { $L[$i] = []; for(my $j=0;$j<$n;$j++) { my $k = 0; $L[$i]->[$j] = $a->[$i]->[$j]; if($i>0) { if($j>0 && $a->[$i-1]->[$j-1]==0) { $k++ } if($a->[$i-1]->[$j]==0) { $k++ } if($j+1<$n && $a->[$i-1]->[$j+1]==0) { $k++ } } if($j>0 && $a->[$i]->[$j-1]==0) { $k++ } if($j+1<$n && $a->[$i]->[$j+1]==0) { $k++ } if($i+1<$m) { if($j>0 && $a->[$i+1]->[$j-1]==0) { $k++ } if($a->[$i+1]->[$j]==0) { $k++ } if($j+1<$n && $a->[$i+1]->[$j+1]==0) { $k++ } } if($k>4) { $L[$i]->[$j] = 0 } if($k<4) { $L[$i]->[$j] = $white } } } # save the image open(OUTF, "> $tempfile2") or die "Couldn't write to $tempfile2\n"; print OUTF ("P3\n"); print OUTF ($n," ",$m," 255\n"); for(my $i=0;$i<$m;$i++) { for(my $j=0;$j<$n;$j++) { my $k = $L[$i]->[$j]; print OUTF ($k>>16," ",($k>>8)&0xFF," ",$k&0xFF," "); } print OUTF ("\n"); } close(OUTF); my $code = hardOCR($tempfile2); unlink($tempfile2); return $code; } sub hardOCR { my ($image) = @_; my $deg = 4; $_ = `convert $image -type grayscale pgm:- | gocr -`; s/[\s|\n]//g; my @c = split(//,$_); do { if(/_/) { $_ = `convert $image -rotate $deg -type grayscale pgm:- | gocr -`; s/[\s|\n]//g; split(//,$_); for(my $i=0;$i<@c && $i<@_;$i++) { if($c[$i]eq'_') { $c[$i] = $_[$i]; } } } $_ = join('',@c); $deg = -$deg; } until($deg>0); s/[\s|_]//g; return $_; } | Не забудьте проставить Imagemagik, gocr, wget только. у меня работает все это работает! И еще есть: http://www.freebyte.hut2.ru/p?p=11 GSSR - качалка с шаринг серверов на PHP, вроде бы тоже умеет автоматически распознавать коды на рапидшаре, поддерживает несколько других подобных сервисов. |