SVN: toys/rsget.pl/Get/MegaShares

sparky sparky at pld-linux.org
Thu Oct 22 04:06:27 CEST 2009


Author: sparky
Date: Thu Oct 22 04:06:26 2009
New Revision: 10810

Modified:
   toys/rsget.pl/Get/MegaShares
Log:
- use new tools
- replace dedicated captcha solver with captcha processor code


Modified: toys/rsget.pl/Get/MegaShares
==============================================================================
--- toys/rsget.pl/Get/MegaShares	(original)
+++ toys/rsget.pl/Get/MegaShares	Thu Oct 22 04:06:26 2009
@@ -6,13 +6,8 @@
 cookie: !ms
 status: OK 2009-10-03
 
-pre:
-	use IPC::Open2;
-	my @ocr;
-	push @ocr, "gocr -f ASCII -a 5 -m 56 -C 0-9 -l 31" if require_prog( "gocr" );
-	push @ocr, "ocrad --filter=numbers_only" if require_prog( "ocrad" );
-	die "ocrad or gocr is required" unless @ocr;
-	die "pngtopnm is required" unless require_prog( "pngtopnm" );
+unify:
+	return "http://d01.megashares.com/?d01=$1" if /\?d01=([0-9a-f]{7})/;
 
 start:
 	# create fake cookie to skip first page
@@ -27,6 +22,8 @@
 		"Link was removed", "Invalid link", "Could not download file";
 	ERROR( "file not found" )
 		if m{<dd class="red">([^<]|<br>)*($fnf)([^<]|<br>)*</dd>};
+	ERROR( "file not found" )
+		if m{<dd class="red">Link has been deleted};
 	MULTI()
 		if m{You already have the maximum of 1 download running};
 
@@ -51,7 +48,7 @@
 		my $time = s2string( $1 * 60 + $2 );
 		LOG( "Passport: $left, $time" );
 
-		return $self->stage_download();
+		GOTO stage_download;
 	}
 
 	! m{var request_uri = "(.*?)";};
@@ -66,9 +63,14 @@
 	! m{<img src="(index.*?)" alt="Security Code"};
 	GET( $1 );
 
-	my $captcha = captcha( \$_ );
-	RESTART( 5, "Can't read captcha" ) unless $captcha;
+	CAPTCHA(
+		qr/[0-9]{4}/,
+		process => \&ms_decaptcha
+	);
+
+	RESTART( 1, "Can't read captcha" ) unless defined $_;
 
+	my $captcha = $_;
 	my $rand = jstime();
 	my $ajax = $-{ajax}
 		. (join "", map { '&rsargs[]=' . $_ }
@@ -77,42 +79,28 @@
 
 	GET( $ajax );
 
-	RESTART( 2, "Passport reactivated" ) if m{Thank you for reactivating your passport};
-	RESTART( 2, "Wrong captcha ?" );
+	if ( /Thank you for reactivating your passport/ ) {
+		CAPTCHA_RESULT( "OK" );
+		RESTART( 1, "Passport reactivated" );
+	} else {
+		CAPTCHA_RESULT( "FAIL" );
+		RESTART( 1, "Wrong captcha ?" );
+	}
 
-	GET( "" );
 stage_download:
 
 	DOWNLOAD( $-{file_uri} );
 
 perl:
 
-sub run_ocr
+sub ms_decaptcha
 {
-	my $prog = shift;
-	my $png = shift;
-
-	IPC::Open2::open2( *READ, *WRITE, "pngtopnm | $prog - 2>/dev/null" );
-	print WRITE $$png;
-	close WRITE;
-	my $num = <READ> || "";
-	close READ;
-
-	my ($ret) = ($num =~ /([0-9]{4})/);
-	return $ret;
-}
-
-
-sub captcha
-{
-	my $png = shift;
-
-	foreach ( @ocr ) {
-		my $ret = run_ocr( $_, $png );
-		return $ret if $ret;
-	}
+	my $img = shift;
 
-	return undef;
+	$img->color_filter( sub { shift } );
+	$img->luma_emphasize( 50, 51 );
+	$img = $img->crop( x1 => 9, x2 => 45, y1 => 4, y2 => 15 );
+	return $img->doublesize->ocr();
 }
 
 # vim:ts=4:sw=4


More information about the pld-cvs-commit mailing list