SVN: toys/rsget.pl/Get/RapidShark
sparky
sparky at pld-linux.org
Thu Oct 22 23:52:58 CEST 2009
Author: sparky
Date: Thu Oct 22 23:52:57 2009
New Revision: 10829
Modified:
toys/rsget.pl/Get/RapidShark
Log:
- use new tools
- added captcha processor code
- fixed free limit timeout
Modified: toys/rsget.pl/Get/RapidShark
==============================================================================
--- toys/rsget.pl/Get/RapidShark (original)
+++ toys/rsget.pl/Get/RapidShark Thu Oct 22 23:52:57 2009
@@ -3,7 +3,7 @@
name: RapidShark
short: RK
uri: qr{rapidshark\.pl/}
-status: OK 2009-09-22
+status: OK 2009-10-22
start:
GET( $-{_uri} );
@@ -16,57 +16,83 @@
m{<font style="font-size:12px;">Chcesz pobrac plik <font color="red">.*/(.*?)</font> \(($STDSIZE)\)</font>};
INFO( name => $1, asize => $2 );
- ! s/^.*?<Form method="POST" action=''>//s;
- ! s/(.*?)<\/Form>.*$/$1/s;
+ ! my $form = $self->form( match => { body => qr/"method_free"/ } );
+ ! $form->select( method_free => 0 );
- my %opts;
- $opts{$1} = $2 while s/<input\s+type="hidden"\s+name="(.*?)"\s+value="(.*?)">//;
-
- ! m{<input type="submit" name="method_free" value="(.*?)">};
- $opts{method_free} = $1;
-
- GET( "", post => \%opts );
- $-{dl_page} = $-{_referer};
+ CLICK( $form->post() );
if ( /(?:You have to wait|Proszę czekać) (.*) (?:till next download|aby ściągnąć kolejny plik)/ ) {
$_ = $1;
my $wait = 0;
- $wait += 60 * 60 * $1 if /(\d+) hour/;
- $wait += 60 * $1 if /(\d+) minute/;
- $wait += $1 if /(\d+) second/;
+ $wait += 60 * 60 * $1 if /(\d+) (hour|godzin)/;
+ $wait += 60 * $1 if /(\d+) minut/;
+ $wait += $1 if /(\d+) (second|sekund)/;
RESTART( $wait, "free limit reached" );
}
- ! s/^.*?<form name="F1" method="post" action=""//si;
- ! s/(.*?)<\/form>.*$/$1/si;
-
- my %opts;
- $opts{$1} = $2 while s/<input name="(.*?)" value="(.*?)" type="hidden">//s;
- $opts{$1} = $2 while s/<input type="hidden" name="(.*?)" value="(.*?)">//s;
-
- #! m{<input.*?id="btn_download" value="(.*?)">};
- #$opts{btn_download} = $1;
-
- $-{post} = \%opts;
+stage_captcha:
+ ! $-{form} = $self->form( name => "F1" );
! m{<span id="countdown">(\d+)</span>};
$-{wait} = $1;
! m{<img src="(http://www\.rapidshark\.pl/captchas/.*?jpg)">};
- my $img = $1;
+ GET( $1, keep_referer => 1 );
+
+ CAPTCHA(
+ qr/[0-9]{4}/,
+ process => \&rk_decaptcha
+ );
- GET( $img );
- $-{_referer} = $-{dl_page};
- $-{cap_start} = time;
+ RESTART( 1, "captcha unsolved" ) unless $_;
- CAPTCHA( "image/jpeg" );
- $-{post}->{code} = $_;
+ $-{form}->set( code => $_ );
- my $wait = $-{wait} - (time - $-{cap_start});
- $wait = 1 if $wait < 1;
+ WAIT( $-{wait}, "starting download" );
+
+ DOWNLOAD( $-{form}->post() );
- WAIT( $wait, "starting download" );
+ if ( /{lang_dod_7}/ ) {
+ CAPTCHA_RESULT( "FAIL" );
+ GOTO stage_captcha;
+ }
+
+
+perl:
+
+sub rk_filter_spots # remove dark pixels
+{
+ my $pix = shift;
+
+ my $lim = 100;
+ return if $pix->isAbove( 10 );
+
+ my $whites = 0;
+ my @sides = ( $pix->up, $pix->down, $pix->left, $pix->right );
+ foreach my $spix ( @sides ) {
+ return unless $spix; # borders are taken care of
+ $whites++ if $spix->isAbove( $lim );
+ }
+ return if $whites < 4;
+ my @corners = ( $sides[0]->left, $sides[0]->right,
+ $sides[1]->left, $sides[1]->right );
+ foreach my $cpix ( @corners ) {
+ $whites++ if $cpix->isAbove( $lim );
+ }
- DOWNLOAD( "", post => $-{post} );
+ $pix->set( 0xff ) if $whites >= 7;
+ return;
+}
+
+sub rk_decaptcha
+{
+ my $img = shift;
+ $img->color_filter( sub { $_[0] } );
+ $img = $img->crop( x1 => 21, y1 => 7, x2 => 57, y2 => 18 );
+ $img->set_border( 255 );
+ $img->luma_emphasize( 50, 80 );
+ $img->pix_filter( \&rk_filter_spots );
+ return $img->doublesize->ocr();
+}
# vim:ts=4:sw=4
More information about the pld-cvs-commit
mailing list