Author: sparky
Date: Thu Aug 27 15:28:58 2009
New Revision: 10495

Added:
   toys/rsget.pl/Get/
   toys/rsget.pl/Get/DepositFiles
   toys/rsget.pl/Get/FileFactory
   toys/rsget.pl/Get/FlyfileUs
   toys/rsget.pl/Get/HotFile
   toys/rsget.pl/Get/MegaShares
   toys/rsget.pl/Get/MegaUpload
   toys/rsget.pl/Get/NetLoad
   toys/rsget.pl/Get/OdSiebie
   toys/rsget.pl/Get/RapidShare
   toys/rsget.pl/Get/RapidShark
   toys/rsget.pl/Get/StorageTo
   toys/rsget.pl/Get/TurboUpload
   toys/rsget.pl/Get/UploadedTo
Log:
- getters from original rsget.pl and some new ones:
  - MegaShares, woohoo !
  - RapidShark
  - fixed OdSiebie


Added: toys/rsget.pl/Get/DepositFiles
==============================================================================
--- (empty file)
+++ toys/rsget.pl/Get/DepositFiles      Thu Aug 27 15:28:58 2009
@@ -0,0 +1,38 @@
+#!/usr/bin/perl
+
+name: DepositFiles
+short: DF
+uri: qr{depositfiles\.com/}
+status: OK 2009-08-24
+
+start:
+       GET( $-{_uri} );
+
+       ERROR( "file not found" ) if /Such file does not exist /;
+       ! m{<div class="info">.*?<b .*?>(.*?)</b>\s*<span 
.*?>.*?<b>(\d+(\.\d+)?)&nbsp;([KM]B)</b></span>}s;
+       INFO( name => $1, size => "$2 $4" );
+       RESTART( 5 * 60, "servers overloaded" )
+               if /We are sorry, but all downloading slots for your country 
are busy/;
+       
+       if ( m{<form action="(.*)" method="get" onSubmit="download_started} ) {
+               $-{file_uri} = $1;
+               return $self->stage_download();
+       }
+
+       ! /<form action="(.*?)" method="post">/;
+       GET( $1, post => { gateway_result => 1 } );
+
+       RESTART( $1, "free limit reached" )
+               if m#<span 
class="html_download_api-limit_interval">(\d+)</span>#;
+       
+       MULTI() if m#<span class="html_download_api-limit_parallel">#;
+       ! /<form action="(.*?)" method="get" onSubmit="download_started/;
+       $-{file_uri} = $1;
+       
+       WAIT( 60, "starting download" );
+stage_download:
+
+       DOWNLOAD( $-{file_uri} );
+       RESTART( $1, "traffic limit" ) if /Wait (\d+) seconds/;
+
+# vim:ts=4:sw=4

Added: toys/rsget.pl/Get/FileFactory
==============================================================================
--- (empty file)
+++ toys/rsget.pl/Get/FileFactory       Thu Aug 27 15:28:58 2009
@@ -0,0 +1,40 @@
+#!/usr/bin/perl
+
+name: FileFactory
+short: FF
+uri: qr{filefactory\.com/}
+status: OK 2009-08-24
+
+start:
+       GET( $-{_uri} );
+
+       ERROR( "file not found" ) if /File Not Found/;
+       ! m{<h1>(<a.*?</a>|<img .*?/>)&nbsp;(.*?)(<span.*?</span>)?</h1>\s*<div 
id="info" class="metadata">\s*<span>([\d\.]+ [KM]B) file uploaded}s;
+       my ( $name, $size ) = ( $2, $4 );
+       $name =~ s/&#8203;//g;
+       INFO( name => $name, size => $size );
+       
+       MULTI() if /You are currently downloading/;
+       if ( /starthtimer[\s\S]*timerend=d\.getTime\(\)\+(\d+);/m ) {
+               RESTART( $1 / 1000, "free limit reached" ) if $1 > 0;
+       }
+
+       ! m#<form action="(.*)" method="post">\s*<input type="submit" 
value="Free#m;
+       GET( $1, post => { freeBtn => "Free Download" } );
+
+       ! m#<a href="(.*?)">Click here to begin your download</a>#;
+       $-{file_uri} = $1;
+       
+       ! m#<p id="countdown">(\d+)</p>#;
+       WAIT( $1, "starting soon" );
+
+       DOWNLOAD( $-{file_uri} );
+
+       # file turned out to be html, meens we need to wait
+       MULTI() if /You are currently downloading too many files at once/;
+       RESTART( $1 * 60 - 30, "free limit reached" )
+               if /Please wait (\d+) minutes to download more files/;
+       RESTART( $1, "free limit reached" )
+               if /Please wait (\d+) seconds to download more files/;
+
+# vim:ts=4:sw=4

Added: toys/rsget.pl/Get/FlyfileUs
==============================================================================
--- (empty file)
+++ toys/rsget.pl/Get/FlyfileUs Thu Aug 27 15:28:58 2009
@@ -0,0 +1,41 @@
+#!/usr/bin/perl
+
+name: FlyfileUs
+short: FU
+uri: qr{flyfile\.us/}
+status: OK 2009-08-24
+
+start:
+       GET( $-{_uri} );
+
+       ERROR( "file not found" ) if /(No such file|No such user)/;
+       m{<h2>Download File (.*?)</h2>}; #\s*<font .*?>You have requested .*? 
\((\d+\.\d+) Mb\)</font>}s;
+       $-{name} = $1;
+
+       ! s/^.*?<Form method="POST" action=''>//s;
+       ! s/(.*?)<\/Form>.*$/$1/s;
+       my %opts;
+       $opts{$1} = $2 while s/<input type="hidden" name="(.*?)" 
value="(.*?)">//;
+       $opts{method_free} = "Free Download";
+
+       GET( "", post => \%opts );
+
+       m{<small>\((\d+) bytes\)</small>};
+       INFO( name => $-{name}, size => $1 );
+
+       RESTART( 600, "download-limit reached" )
+               if /You have reached the download-limit/;
+
+       ! s/^.*?<Form name="F1" method="POST" action=""//s;
+       ! s/(.*?)<\/Form>.*$/$1/s;
+       my %opts;
+       $opts{$1} = $2 while s/<input type="hidden" name="(.*?)" 
value="(.*?)">//;
+       $opts{btn_download} = "Create Download Link";
+
+       DOWNLOAD( $-{_referer}, post => \%opts );
+
+       # html
+       RESTART( 120, "temporarily unavailable" )
+               if /temporarily unavailable/;
+
+# vim:ts=4:sw=4

Added: toys/rsget.pl/Get/HotFile
==============================================================================
--- (empty file)
+++ toys/rsget.pl/Get/HotFile   Thu Aug 27 15:28:58 2009
@@ -0,0 +1,33 @@
+#!/usr/bin/perl
+
+name: HotFile
+short: HF
+uri: qr{hotfile\.com/}
+status: BROKEN
+
+start:
+       GET( $-{uri} );
+
+       ERROR( "file not found" ) unless length $_;
+       ERROR( "file not found" ) if /This file is either removed/;
+       MULTI() if /You are currently downloading/;
+       ! /starthtimer[\s\S]*?timerend=d\.getTime\(\)\+(\d+);/;
+       RESTART( $1 / 1000, "free limit reached" ) if $1 > 0;
+       ! /starttimer[\s\S]*?timerend=d\.getTime\(\)\+(\d+);/;
+       my $wait = $1 / 1000;
+
+       ! s/^.*?<form style=".*?" action="(.*?)" method=post name=f>//s;
+       $-{action} = $1;
+       ! s#^(.*?)</form>.*#$1#;
+       my %post;
+       $post{$1} = $2 while s/<input type=hidden name=(.*?) value=(.*?)>//;
+       $-{post} = \%post;
+
+       WAIT( $wait,  "starting download" );
+
+       GET( $-{action}, post => $-{post} );
+
+       ! m#<a href="(.*?)">Click here to download</a>#;
+       DOWNLOAD( $1 );
+
+# vim:ts=4:sw=4

Added: toys/rsget.pl/Get/MegaShares
==============================================================================
--- (empty file)
+++ toys/rsget.pl/Get/MegaShares        Thu Aug 27 15:28:58 2009
@@ -0,0 +1,115 @@
+#!/usr/bin/perl
+
+name: MegaShares
+short: MS
+uri: qr{d01\.megashares\.com/\?d01=}
+cookie: ms
+status: OK ?
+
+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" );
+
+start:
+       my $stime = time() - 600;
+       my @line = (qw(.megashares.com TRUE / FALSE), $stime + 43200, 'freest', 
$stime . "%3A" );
+
+       open my $c, ">", $-{_cookie};
+       print $c join( "\t", @line ), "\n";
+       close $c;
+
+       GET( $-{_uri} );
+
+       ERROR( "temporarily unavailable" )
+               if m{<dd class="red">([^<]|<br>)*(link is currently 
offline)([^<]|<br>)*</dd>};
+       ERROR( "file not found" )
+               if m{<dd class="red">([^<]|<br>)*(Link was removed|Invalid 
link)([^<]|<br>)*</dd>};
+       MULTI()
+               if m{You already have the maximum of 1 download running};
+
+       m{<dt>Filename:&nbsp;<strong>(.*?)</strong>&nbsp;&nbsp;&nbsp;size: 
(\d+\.\d+ [GMK]B)</dt>};
+       INFO( name => $1, size => $2 );
+
+       RESTART( $1 * 60 + $2, "free limit reached" )
+               if m{Your download passport will renew\s*in 
00:<strong>(\d+)</strong>:<strong>(\d+)</strong>};
+
+       unless( m{<dt>Your Passport needs to be reactivated.</dt>} ) {
+               ! m{<a href="(.*?)">Click here to download</a>};
+               $-{file_uri} = $1;
+
+               m{You have ([\d\.]+ .*?) left that you can download with this 
passport.};
+               my $left = $1;
+               m{Your download passport will renew 
in\s*<strong>0</strong>:<strong>(\d+)</strong>:<strong>(\d+)</strong>}s;
+               my $time = s2string( $1 * 60 + $2 );
+               my $if = $-{_outif} ? "[$-{_outif}]" : "";
+               p "${if}[MS] Passport: $left, $time";
+
+               return $self->stage_download();
+       }
+
+       ! m{var request_uri = "(.*?)";};
+       $-{ajax} = $1 . "&rs=check_passport_renewal";
+
+       ! m{<input type="hidden" name="random_num" id="random_num" 
value="(\d+)" />};
+       $-{random_num} = $1;
+
+       ! m{<input type="hidden" name="passport_num" id="passport_num" 
value="([0-9a-f]+)" />};
+       $-{passport_num} = $1;
+
+       ! m{<img src="(index.*?)" alt="Security Code"};
+       GET( $1 );
+
+       my $captcha = captcha( \$_ );
+       RESTART( 5, "Can't read captcha" ) unless $captcha;
+
+       my $rand = 1000 * time() + int rand 1000;
+       my $ajax = $-{ajax}
+               . (join "", map { '&rsargs[]=' . $_ }
+                       ( $captcha, $-{random_num}, $-{passport_num}, 
"replace_sec_pprenewal" ) )
+               . "&rsrnd=$rand";
+
+       GET( $ajax );
+
+       RESTART( 10, "Passport reactivated" ) if m{Thank you for reactivating 
your passport};
+       RESTART( 10, "Wrong captcha ?" );
+
+       GET( "" );
+stage_download:
+
+       DOWNLOAD( $-{file_uri} );
+
+perl:
+
+sub run_ocr
+{
+       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;
+       }
+
+       return undef;
+}
+
+# vim:ts=4:sw=4

Added: toys/rsget.pl/Get/MegaUpload
==============================================================================
--- (empty file)
+++ toys/rsget.pl/Get/MegaUpload        Thu Aug 27 15:28:58 2009
@@ -0,0 +1,159 @@
+#!/usr/bin/perl
+
+name: MegaUpload
+short: MU
+uri: qr{mega(upload|porn|rotic)\.com/\?d=}
+status: OK 2009-08-24
+
+pre:
+       use Image::Magick;
+
+       my $mu_font_db = $main::data_path . "/mu_font_db.png";
+       die "Font DB '$mu_font_db' does not exist\n" unless -r $mu_font_db;
+
+start:
+       ( $-{uri} = $-{_uri} ) =~ s/megarotic/megaporn/;
+       GET( $-{uri} );
+stage_first:
+       $-{first_page} = $-{_referer};
+
+       ERROR( "file not found" ) if
+               /The file you are trying to access is temporarily unavailable/
+                       or /Unfortunately, the link you have clicked is not 
available/
+                       or /This file has expired due to inactivity/;
+       m{<TD valign="middle" align="left" .*?width="500">(.*?)</TD>}s;
+       my @f = map m#<font.*?>(.*?)</font>#g, $1;
+       INFO( name => de_ml( $f[1] ), size => $f[5] );
+
+       if ( /The file you're trying to download is password protected/ ) {
+               ERROR( "password required" ) unless exists $-{_opts}->{mu_pass};
+
+               GET_NEXT( stage_last, $-{uri},
+                       post => { filepassword => $-{_opts}->{mu_pass} } );
+       }
+
+       SEARCH(
+               captcha_img => qr#<img 
src="(http://.*/gencap\.php\?[0-9a-f]+\.gif)"#,
+               s2icode => qr#<INPUT type="hidden" name="captchacode" 
value="(.*?)"#,
+               s2mevagar => qr#<INPUT type="hidden" name="megavar" 
value="(.*?)"#,
+       );
+
+       GET( $-{captcha_img} );
+
+       my $captcha = captcha( \$_ );
+       RESTART( 10, "Can't read captcha" ) unless defined $captcha;
+
+       $-{_referer} = $-{first_page};
+       GET( $-{uri}, post => {
+               captchacode => $-{s2icode},
+               megavar => $-{s2mevagar},
+               captcha => $captcha
+       } );
+
+stage_last:
+       if ( /id="captchaform"/ ) {
+               $self->print( "invalid captcha" );
+               return $self->stage_first();
+       }
+       ERROR( "invalid password" )
+               if /The file you're trying to download is password protected/;
+
+       ! /<a href="(.*?)".*IMG SRC=".*?but_dnld_regular.gif/;
+       $-{file_uri} = $1;
+
+       ! /count=([0-9]+);/;
+       WAIT( $1, "starting download" );
+
+       DOWNLOAD( $-{file_uri} );
+
+
+perl:
+       
+my %size = (
+       A => 28, B => 22, C => 21, D => 27, E => 16,
+       F => 16, G => 26, H => 26, K => 20, M => 38,
+       N => 28, P => 21, Q => 30, R => 22, S => 18,
+       T => 19, U => 26, V => 22, W => 40, X => 23,
+       Y => 18, Z => 18
+);
+
+my @db;
+
+sub read_db()
+{
+       my $dbf = new Image::Magick;
+       $dbf->Read( $mu_font_db );
+       foreach my $pos ( 0..3 ) {
+               my @list = sort keys %size;
+               @list = (1..9) if $pos == 3;
+
+               my $height = 32;
+               my $width = 40;
+               my $left = $width * $pos;
+               $width = 22 if $pos == 3;
+               my $top = 0;
+       
+               my %db;
+               foreach my $char ( @list ) {
+                       my $db = $dbf->Clone();
+                       $db->Crop( width => $width, height => $height, x => 
$left, y => $top );
+                       $db{$char} = $db;
+                       $top += 32;
+               }
+               push @db, \%db;
+       }
+}
+
+sub get_char
+{
+       my ($src, $db, $width, $x) = @_;
+
+       my $img = $src->Clone();
+       $img->Crop( width => $width, height => 32, x => $x, y => 0 );
+       $img->Extent( width => $width, height => 32, x => 0, y => 0 );
+
+       my $min = 1;
+       my $min_char = undef;
+       foreach my $n ( keys %$db ) {
+               my $x = $img->Compare( image => $db->{$n} );
+               my ($e, $em) = $img->Get( 'error', 'mean-error' );
+               if ( $em < $min ) {
+                       $min = $em;
+                       $min_char = $n;
+               }
+       }
+       return $min_char;
+}
+
+sub captcha
+{
+       my $data_ref = shift;
+
+       read_db() unless @db;
+
+       open IMAGE, '>', '.captcha.gif';
+       print IMAGE $$data_ref;
+       close IMAGE;
+
+       my $img = new Image::Magick;
+       my $x = $img->Read( '.captcha.gif' );
+       unlink '.captcha.gif';
+       return if length $x;
+
+       my ($width, $height) = $img->Get( 'columns', 'rows' );
+
+       my $bg = new Image::Magick;
+       $bg->Set( size => $width."x32" );
+       $bg->Read( "xc:white" );
+       $bg->Composite( image => $img );
+
+       my @cap;
+       push @cap, get_char( $bg, $db[0], 40, 0 );
+       push @cap, get_char( $bg, $db[1], 40, $size{$cap[0]} - 6 );
+       push @cap, get_char( $bg, $db[2], 40, $width - 56 );
+       push @cap, get_char( $bg, $db[3], 22, $width - 22 );
+
+       return join "", @cap;
+}
+
+# vim:ts=4:sw=4

Added: toys/rsget.pl/Get/NetLoad
==============================================================================
--- (empty file)
+++ toys/rsget.pl/Get/NetLoad   Thu Aug 27 15:28:58 2009
@@ -0,0 +1,231 @@
+#!/usr/bin/perl
+
+name: NetLoad
+short: NL
+uri: qr{netload\.in/datei}
+cookie: nl
+status: OK 2009-08-24
+
+pre:
+       use IPC::Open2;
+       use GD;
+
+       die "Both ocrad and gocr are required\n" unless
+               require_prog( "ocrad" ) and require_prog( "gocr" );
+       die "pngtopnm is required\n" unless require_prog( "pngtopnm" );
+
+start:
+       GET( $-{_uri} );
+
+       ERROR( "file not found" )
+               if /(Sorry, we don't host the requested 
file|unknown_file_data)/;
+       ! m#<div class="dl_first_filename">\s*(.+?)<span.*?>, (\d+\.\d+ 
MB)</span></div>#s;
+       INFO( name => $1, size => $2 );
+
+       RESTART( 60 )
+               if /We will prepare your download/;
+
+       ! /href="(.*?captcha=1)"/;
+       GET( de_ml( $1 ) );
+       $-{dl_page} = $-{_referer};
+
+       RESTART( 1 ) if /"(.*?captcha=1)"/;
+
+       SEARCH(
+               action => qr#<form method="post" action="(.*?)">#,
+               captcha_img => qr#"(share/includes/captcha\.php\?t=[0-9]+)"#,
+               file_id => qr#input name="file_id" .*value="(.*?)"#,
+               s3wait => qr#please wait .*countdown\(([0-9]+),#,
+       );
+
+       GET( $-{captcha_img} );
+
+       $-{captcha} = Get::NetLoad::Captcha::resolve( \$_ );
+       RESTART( 1 ) unless defined $-{captcha};
+
+       WAIT( $-{s3wait} / 100, "checking" );
+
+       $-{_referer} = $-{dl_page};
+       GET( $-{action}, post => {
+               file_id => $-{file_id},
+               captcha_check => $-{captcha},
+               start => ''
+       } );
+
+       RESTART( 1 )
+               if /You may forgot the security code or it might be wrong/;
+       ERROR( "file not found" )
+               if /This file is currently unavailable/;
+       RESTART( $1 / 100, "free limit reached" )
+               if /You could download your next file in.*countdown\(([0-9]+)/;
+
+       ! /<a class="Orange_Link" href="(.*?)"/;
+       $-{file_uri} = $1;
+
+       ! /please wait .*countdown\(([0-9]+),/;
+       WAIT( $1 / 100, "starting download" );
+
+       DOWNLOAD( $-{file_uri} );
+
+perl:
+package Get::NetLoad::Captcha;
+
+sub blankline
+{
+       my $img = shift;
+       my $x = shift;
+       my $n = 0;
+       my $white = $img->colorClosest( 255, 255, 255 );
+       foreach my $y ( 0..28 ) {
+               my $ci = $img->getPixel( $x, $y );
+               next if $ci == $white;
+               $n++;
+               return 0 if $n > 1;
+       }
+       return 1;
+}
+
+sub blanklinev
+{
+       my $img = shift;
+       my $y = shift;
+       my $y2 = $y + shift;
+       my $xmin = shift;
+       my $xmax = shift;
+       my $n = 0;
+       my $white = $img->colorClosest( 255, 255, 255 );
+       foreach my $x ( $xmin..$xmax ) {
+               my $ci = $img->getPixel( $x, $y );
+               $n++ if $ci != $white;
+               $ci = $img->getPixel( $x, $y2 );
+               $n++ if $ci != $white;
+               return 0 if $n > 2;
+       }
+       return 1;
+}
+
+sub charat
+{
+       my $img = shift;
+       my $trimg = shift;
+       my $sx = shift;
+
+       my $xmin = $sx;
+       until( blankline( $img, $xmin ) ) {
+               $xmin--;
+       }
+       my $xmax = $sx+1;
+       until( blankline( $img, $xmax ) ) {
+               $xmax++;
+       }
+       my $ymin = 14;
+       until( blanklinev( $img, $ymin, -1, $xmin, $xmax ) ) {
+               $ymin--;
+       }
+       my $ymax = 15;
+       until( blanklinev( $img, $ymax, +1, $xmin, $xmax ) ) {
+               $ymax++;
+       }
+
+       my $w = $xmax - $xmin;
+       my $h = $ymax - $ymin;
+       my $nimg = new GD::Image( $w * 4 + 16, ($h > 12 ? $h : 12 ) + 4 );
+       my $nw = $nimg->colorAllocate( 255, 255, 255);
+       $nimg->copy( $trimg, 1, 1, $xmin, $ymin, $w, $h );
+       $nimg->copy( $trimg, 3 + 1*$w, 1, $xmin, $ymin, $w, $h );
+       $nimg->copy( $trimg, 13 + 2*$w, 1, $xmin, $ymin, $w, $h );
+       $nimg->copy( $trimg, 15 + 3*$w, 1, $xmin, $ymin, $w, $h );
+
+       IPC::Open2::open2( *READ, *WRITE, "pngtopnm | gocr -f ASCII -a 5 -m 56 
-C 0123456789 - 2>/dev/null" );
+       print WRITE $nimg->png;
+       close WRITE;
+       my $num = <READ> || "";
+       close READ;
+
+       my ($gocr) = ($num =~ /^([0-9])/);
+
+       IPC::Open2::open2( *READ, *WRITE, "pngtopnm | ocrad 
--filter=numbers_only - 2>/dev/null" );
+       print WRITE $nimg->png;
+       close WRITE;
+       $num = <READ> || "";
+       close READ;
+
+       my ($ocrad) = ($num =~ /^([0-9])/);
+
+       #print "G: $gocr, O: $ocrad\n";
+       if ( defined $gocr ) {
+               return 7 if ( defined $ocrad and $ocrad == 7 and $gocr == 1 );
+               return $gocr;
+       } elsif ( defined $ocrad ) {
+               return $ocrad;
+       }
+       return undef;
+}
+
+sub resolve
+{
+       my $capdata = shift;
+
+       my $img = GD::Image->new( $$capdata );
+       my $white = $img->colorClosest( 255, 255, 255 );
+
+       foreach my $y ( 0..28 ) {
+               $img->setPixel( 0, $y, $white );
+               $img->setPixel( 73, $y, $white );
+       }
+       foreach my $x ( 0..73 ) {
+               $img->setPixel( $x, 0, $white );
+               $img->setPixel( $x, 28, $white );
+       }
+
+       foreach my $y ( 1..27 ) {
+               FORX: foreach my $x ( 1..72 ) {
+                       my $ci = $img->getPixel( $x, $y );
+                       next if $ci == $white;
+                       my @xy = ( [0, 1], [0, -1], [1, 0], [-1, 0] );
+       
+                       my $wrong = 0;
+                       foreach my $xy ( @xy ) {
+                               my $c = $img->getPixel( $x + $xy->[0], $y + 
$xy->[1] );
+                               if ( $c != $white ) {
+                                       $wrong++;
+                                       next FORX if $wrong > 1;
+                               }
+                       }
+       
+                       $img->setPixel( $x, $y, $white );
+               }
+       }
+
+
+       my $trimg = GD::Image->newTrueColor( 74, 29 );
+       my $trwhite = $trimg->colorAllocate( 255, 255, 255 );
+       $trimg->fill( 0, 0, $trwhite );
+       foreach my $y ( 0..28 ) {
+               foreach my $x ( 0..73 ) {
+                       my $ci = $img->getPixel( $x, $y );
+                       my ($r, $g, $b ) = $img->rgb( $ci );
+                       $r = (256 - $r) / 256;
+                       $g = (256 - $g) / 256;
+                       $b = (256 - $b) / 256;
+                       my $c = 256 - 256 * (($r * $g * $b) ** (1/3));
+
+                       my $gray = $trimg->colorResolve( $c, $c, $c );
+       
+                       $trimg->setPixel( $x, $y, $gray );
+               }
+       }
+       
+       my @n;
+       push @n, charat( $img, $trimg, 9 );
+       push @n, charat( $img, $trimg, 28 );
+       push @n, charat( $img, $trimg, 42 );
+       push @n, charat( $img, $trimg, 58 );
+       foreach (@n) {
+               return undef unless defined $_;
+       }
+
+       return join "", @n;
+}
+
+# vim:ts=4:sw=4

Added: toys/rsget.pl/Get/OdSiebie
==============================================================================
--- (empty file)
+++ toys/rsget.pl/Get/OdSiebie  Thu Aug 27 15:28:58 2009
@@ -0,0 +1,25 @@
+#!/usr/bin/perl
+
+name: OdSiebie
+short: OS
+uri: qr{odsiebie\.com/pokaz/}
+cookie: os
+slots: 8
+status: OK 2009-08-25
+
+start:
+       GET( $-{_uri} );
+
+       ERROR( "some problem, file not found ?" )
+               if $-{_referer} =~ m{/(upload|error)\.html};
+
+       m{<dl class="file-info">.*?<dd>(.*?)</dd>.*?<dd>\s*(\d+\.\d+ MB)</dd>}s;
+       INFO( name => $1, size => $2 );
+
+       ! m{href="(/pobierz/\d+---.*?\.html)"};
+       GET( $1 );
+
+       ! m{href="(/download/\d+---.*?.html)"};
+       DOWNLOAD( $1 );
+
+# vim:ts=4:sw=4

Added: toys/rsget.pl/Get/RapidShare
==============================================================================
--- (empty file)
+++ toys/rsget.pl/Get/RapidShare        Thu Aug 27 15:28:58 2009
@@ -0,0 +1,40 @@
+#!/usr/bin/perl
+
+name: RapidShare
+short: RS
+uri: qr{rapidshare\.com/}
+status: OK 2009-08-24
+
+start:
+       GET( $-{_uri} );
+
+       ERROR( "file not found" )
+               if /The file could not be found\.  Please check the download 
link/;
+       ERROR( "file removed" ) if /file has been removed from the server/;
+
+       m#<p class="downloadlink">.*/(.+?) <font style=".*?">\| (\d+ 
KB)</font></p>#;
+       INFO( name => $1, size => $2, kilo => 1000 );
+
+       RESTART( $1 * 60, "servers overloaded" )
+               if /Unfortunately you will have to wait ([0-9]+) minutes,/;
+       
+       ! /form id="ff" action="(.*?)"/;
+       GET( $1, post => 'dl.start=Free' );
+
+       MULTI() if /Please wait until the download is completed/;
+
+       RESTART( $1 * 60 + 10, "free limit reached" )
+               if /Instant download access! Or try again in about ([0-9]+) 
minutes\./;
+
+       RESTART( $1 * 60, "servers overloaded" )
+               if /Unfortunately you will have to wait ([0-9]+) minutes,/;
+
+       ! /form name="dlf" action="(.*?)"/;
+       $-{file_uri} = $1;
+
+       ! /var c=([0-9]+);/;
+       WAIT( $1, "starting download" );
+
+       DOWNLOAD( $-{file_uri}, post => { mirror => "on" } );
+
+# vim:ts=4:sw=4

Added: toys/rsget.pl/Get/RapidShark
==============================================================================
--- (empty file)
+++ toys/rsget.pl/Get/RapidShark        Thu Aug 27 15:28:58 2009
@@ -0,0 +1,66 @@
+#!/usr/bin/perl
+
+name: RapidShark
+short: RK
+uri: qr{rapidshark\.pl/}
+status: OK 2009-08-26
+
+start:
+       GET( $-{_uri} );
+
+       ERROR( "file not found" )
+               if m{<b>(Plik nie zostaƂ odnaleziony|File Not Found|Datei nicht 
gefunden)</b>};
+       ERROR( "file not found" )
+               if m{<font class="err">No such file};
+
+       m{<font style="font-size:12px;">Chcesz pobrac plik <font 
color="red">.*/(.*?)</font> \(([\d\.]+ ([MK])?b)\)</font>};
+       INFO( name => $1, size => $2 );
+
+       ! s/^.*?<Form method="POST" action=''>//s;
+       ! s/(.*?)<\/Form>.*$/$1/s;
+
+       my %opts;
+       $opts{$1} = $2 while s/<input type="hidden" name="(.*?)" 
value="(.*?)">//;
+
+       ! m{<input type="submit" name="method_free" value="(.*?)">};
+       $opts{method_free} = $1;
+
+       GET( "", post => \%opts );
+
+       if ( /You have to wait (.*) till next download/ ) {
+               $_ = $1;
+               my $wait = 0;
+               $wait += 60 * 60 * $1 if /(\d+) hour/;
+               $wait += 60 * $1 if /(\d+) minute/;
+               $wait += $1 if /(\d+) second/;
+               RESTART( $wait, "free limit reached" );
+       }
+
+       ! s/^.*?<Form name="F1" method="POST" action=""//s;
+       ! s/(.*?)<\/Form>.*$/$1/s;
+
+       ! m{<div .*?>(.*)</div>\s+</td><td align=left valign=middle><input 
type="text" name="code" class="captcha_code"></td></tr>}s;
+       my %opts = ( code => captcha( $1 ) );
+
+
+       $opts{$1} = $2 while s/<input type="hidden" name="(.*?)" 
value="(.*?)">//s;
+
+       ! m{<input type="submit" id="btn_download" value="(.*?)">};
+       $opts{btn_download} = $1;
+
+       $-{post} = \%opts;
+
+       ! m{<span id="countdown">(\d+)</span>};
+       WAIT( $1, "starting download" );
+       
+       DOWNLOAD( $-{_referer}, post => $-{post} );
+
+perl:
+       sub captcha
+       {
+               my %c = map /<span.*?padding-left:\s*?(\d+)px;.*?>(\d)</g, 
shift;
+               my @c = map { $c{$_} } sort { $a <=> $b } keys %c;
+               return join "", @c;
+       }
+
+# vim:ts=4:sw=4

Added: toys/rsget.pl/Get/StorageTo
==============================================================================
--- (empty file)
+++ toys/rsget.pl/Get/StorageTo Thu Aug 27 15:28:58 2009
@@ -0,0 +1,33 @@
+#!/usr/bin/perl
+
+name: StorageTo
+short: ST
+uri: qr{storage\.to/}
+status: OK 2009-08-24
+
+start:
+       GET( $-{_uri} );
+
+       ! m{<span class="orange">.*?:</span> (.*?) <span 
class="light">\(([\d\.]+ [KM]B)\)</span>};
+       INFO( name => $1, size => $2 );
+
+       ! /onclick='javascript:startcountdown\("(.*?)", "(.*?)"\);'/;
+       GET( "/getlink/$2/" );
+
+       ! s/^.*?{\s+//;
+       ! s/\s+}.*?$//;
+
+       ! /'countdown'\s*:\s*(\d+)/;
+       my $wait = $1;
+       RESTART( $wait, "free limit reached" )
+               unless /'state'\s*:\s*'ok'/;
+
+       ! /'link'\s*:\s*'(.*?)'/ and $1;
+       $-{file_uri} = $1;
+
+       WAIT( $wait, "starting download" );
+
+       delete $-{_referer}; # started from ajax, there must be no referer
+       DOWNLOAD( $-{file_uri} );
+
+# vim:ts=4:sw=4

Added: toys/rsget.pl/Get/TurboUpload
==============================================================================
--- (empty file)
+++ toys/rsget.pl/Get/TurboUpload       Thu Aug 27 15:28:58 2009
@@ -0,0 +1,56 @@
+#!/usr/bin/perl
+
+name: TurboUpload
+short: TU
+uri: qr{turboupload\.com/}
+status: OK 2009-08-24
+
+start:
+       GET( $-{_uri} );
+
+       ERROR( "file not found" ) if /File Not Found/;
+       ! m{<h2>\S* \S* (.*?)</h2>\s*<font .*?</font> \((\d+\.\d+ 
[MK]b)\)</font>}s;
+       INFO( name => $1, size => $2 );
+
+       ! s/^.*?<Form method="POST" action=''>//s;
+       ! s/(.*?)<\/Form>.*$/$1/s;
+
+       my %opts;
+       $opts{$1} = $2 while s/<input type="hidden" name="(.*?)" 
value="(.*?)">//;
+       $opts{method_free} = "Free Download";
+
+       GET( "", post => \%opts );
+
+       if ( /You have to wait (.*) till next download/ ) {
+               $_ = $1;
+               my $wait = 0;
+               $wait += 60 * 60 * $1 if /(\d+) hour/;
+               $wait += 60 * $1 if /(\d+) minute/;
+               $wait += $1 if /(\d+) second/;
+               RESTART( $wait, "free limit reached" );
+       }
+
+       ! m#Enter code below:[\S\s]*?<div.*?>(.*?)</div>#;
+       my %opts = ( code => captcha( $1 ) );
+
+       ! s/^.*?<Form name="F1" method="POST" action=""//s;
+       ! s/(.*?)<\/Form>.*$/$1/s;
+
+       $opts{$1} = $2 while s/<input type="hidden" name="(.*?)" 
value="(.*?)">//s;
+       $opts{btn_download} = "Download File";
+
+       $-{post} = \%opts;
+
+       WAIT( 60, "starting download" );
+       
+       DOWNLOAD( $-{_referer}, post => $-{post} );
+
+perl:
+       sub captcha
+       {
+               my %c = map /<span.*?padding-left:\s*?(\d+)px;.*?>(\d)</g, 
shift;
+               my @c = map { $c{$_} } sort { $a <=> $b } keys %c;
+               return join "", @c;
+       }
+
+# vim:ts=4:sw=4

Added: toys/rsget.pl/Get/UploadedTo
==============================================================================
--- (empty file)
+++ toys/rsget.pl/Get/UploadedTo        Thu Aug 27 15:28:58 2009
@@ -0,0 +1,33 @@
+#!/usr/bin/perl
+
+name: UploadedTo
+short: UT
+uri: qr{(uploaded|ul)\.to/}
+status: OK 2009-08-24
+
+start:
+       GET( $-{_uri} );
+
+       RESTART( $1 * 60, "free limit reached" )
+               if /Or wait (\d+) minutes/;
+
+       if ( $-{_referer} =~ m#/\?view=# ) {
+               ERROR( "file not found" ) if $-{_referer} =~ /fileremoved/;
+               ERROR( "unknown error" );
+       }
+
+       ! m{<title>(.*?) \.\.\. at uploaded\.to - };
+       my $name = $1;
+       ! m{<tr><td style="padding-left:4px;">Filesize: 
&nbsp;</td><td>\s*(\d+\.\d+ [KM]B)\s*</td></tr>};
+       INFO( name => $name, size => $1 );
+
+
+       ! m#<form name="download_form" method="post" action="(.*)">#;
+       $-{file_uri} = $1;
+
+       ! m#var secs = (\d+); // Wartezeit#;
+       WAIT( $1, "starting download" );
+
+       DOWNLOAD( $-{file_uri}, post => { download_submit => "Download" } );
+
+# vim:ts=4:sw=4
_______________________________________________
pld-cvs-commit mailing list
pld-cvs-commit@lists.pld-linux.org
http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit

Reply via email to