Logueate





Inteligencia Compartida

Linux, ubuntu, gnome, debian, xubuntu, GNU

La Zona Linux, la zona linux, Todo lo relacionado al mundo de GNU / Linux, ubuntu, debian, etc

Posteado por:

Thunderboy
Linuxero
* Masculino

86 Posts
80 Comentarios
2824 Puntos
0 Referido/s

REGISTRATE! es GRATIS!!

 RapidShare Uploader para Linux  

No me gusta subir archivos a RapidShare con el browser, primero porque me ocupa una pestaña hasta que se termina de subir y segundo porque el medidor de velocidad y los bytes subidos que me muestra nunca me andan bien y tengo que esperar sin saber si esta subiendo o no.
Buscando solucionar eso encontré un programa para subir archivos oficial de RapidShare, lamentablemente no era para el Sistema Operativo que estoy usando.
Buscando un poco mas me sorprendí al encontrar este script en Perl que, al parecer, también lo hizo la gente de RapidShare.

Como instalarlo:

1. Copiar el siguiente codigo en tu editor de textos preferido.

Cita:
#!/usr/bin/perl  # RapidShare AG OpenSource Perl Uploader V1.0. For non-commercial use only. All rights reserved. # Included: Uploading to free, collector's and premium-zone. The MD5-check after uploads checks if the upload worked. # NOT included in this version: Upload-resume via new RS API. # This is a PERL script written for experts and for coders wanting to know how to write own upload programs. # Tested under Linux and Linux only. # If you write your own upload-tools, please look at our rsapi.cgi calls. You need them to have fun. # # To upload a file, put this script on a machine with perl installed and use the following syntax: # perl rsapi.pl free mytestfile.rar (this uploads mytestfile.rar as a free user) # perl rsapi.pl prem archive.rar 334 test (this uploads archive.rar to the premium-zone of login 334 with password test) # perl rsapi.pl col a.rar testuser mypw (this uploads a.rar to the collector's-zone of login testuser with password mypw) # # We will publish another version with upload resume enabled soon, but this script actually works and we actually # want you to understand how it works and upload resume would make this script even more complex.  use strict; use warnings; use Digest::MD5("md5_hex"; use Fcntl; use IO::Socket;  my ($file, $filename, $uploadpath, $size, $socket, $uploadserver, $cursize, $fh, $bufferlen, $buffer, $boundary, $header, $contentheader, $contenttail, $contentlength, $result, $maxbufsize, $md5hex, $filecontent, $size2, %key_val, $login, $password, $zone, $porcentaje);    # This chapter sets some vars and parses some vars. $/ = undef; $file = $ARGV[0] || die "Syntax: $0 <filename to upload> <free|prem|col> [login] [password]\n"; $zone = $ARGV[1] || ""; $login = $ARGV[2] || ""; $password = $ARGV[3] || ""; $maxbufsize = 64000; $uploadpath = "l3"; $cursize = 0; $size = -s $file || die "File $file is empty or does not exist!\n"; $filename = $file =~ /[\/\\]([^\/\\]+)$/ ? $1 : $file;    # This chapter checks the file and calculates the MD5HEX of the existing local file. print "File $file has $size bytes. Calculating MD5HEX...\n"; open(FH, $file) || die "Unable to open file: $!\n"; $filecontent = <FH>; close(FH); $md5hex = uc(md5_hex($filecontent)); $size2 = length($filecontent); print "MD5HEX is $md5hex ($size2 bytes analyzed.)\n"; unless ($size == $size2) { die "Strange error: $size bytes found, but only $size2 bytes analyzed?\n" }    # This chapter finds out which upload server is free for uploading our file by fetching http://rapidshare.com/cgi-bin/rsapi.cgi?sub=nextuploadserver_v1 if ($login and $password) { print "Trying to upload to your premium account.\n" } else { print "Uploading as a free user.\n" } print "Uploading as filename '$filename'. Getting upload server infos.\n"; $socket = IO::Socket::INET->new(PeerAddr => "rapidshare.com:80" || die "Unable to open port: $!\n"; print $socket qq|GET /cgi-bin/rsapi.cgi?sub=nextuploadserver_v1 HTTP/1.0\r\n\r\n|; ($uploadserver) = <$socket> =~ /\r\n\r\n(\d+)/; unless ($uploadserver) { die "Uploadserver invalid? Internal error!\n" } print "Uploading to rs$uploadserver$uploadpath.rapidshare.com\n";    # This chapter opens our file and the TCP socket to the upload server. sysopen($fh, $file, O_RDONLY) || die "Unable to open file: $!\n"; $socket = IO::Socket::INET->new(PeerAddr => "rs$uploadserver$uploadpath.rapidshare.com:80" || die "Unable to open port: $!\n";    # This chapter constructs a (somewhat RFC valid) HTTP header. See how we pass rsapi_v1=1 to the server to get a program-friendly output. $boundary = "---------------------632865735RS4EVER5675865"; $contentheader .= qq|$boundary\r\nContent-Disposition: form-data; name="rsapi_v1"\r\n\r\n1\r\n|;  if ($zone eq "prem" and $login and $password) { $contentheader .= qq|$boundary\r\nContent-Disposition: form-data; name="login"\r\n\r\n$login\r\n|; $contentheader .= qq|$boundary\r\nContent-Disposition: form-data; name="password"\r\n\r\n$password\r\n|; }  if ($zone eq "col" and $login and $password) { $contentheader .= qq|$boundary\r\nContent-Disposition: form-data; name="freeaccountid"\r\n\r\n$login\r\n|; $contentheader .= qq|$boundary\r\nContent-Disposition: form-data; name="password"\r\n\r\n$password\r\n|; }  $contentheader .= qq|$boundary\r\nContent-Disposition: form-data; name="filecontent"; filename="$filename"\r\n\r\n|; $contenttail = "\r\n$boundary--\r\n"; $contentlength = length($contentheader) + $size + length($contenttail); $header = qq|POST /cgi-bin/upload.cgi HTTP/1.0\r\nContent-Type: multipart/form-data; boundary=$boundary\r\nContent-Length: $contentlength\r\n\r\n|;    #This chapter actually sends all the data, header first, to the upload server. print $socket "$header$contentheader";  while ($cursize < $size) { $bufferlen = sysread($fh, $buffer, $maxbufsize, 0) || 0; unless ($bufferlen) { die "Error while sending data: $!\n" }  #BEGIN modificado por Pomber $porcentaje = 100*$cursize/$size; printf "(%02.2f",$porcentaje; print "%) $cursize de $size bytes enviados.\n"; #END modificado por Pomber (descomentar proxima linea) #print "$cursize of $size bytes sent.\n"; $cursize += $bufferlen; print $socket $buffer; }  print $socket $contenttail;    # OK, all is sent. Now lets fetch the server's reponse and analyze it. print "All $size bytes sent to server. Fetching result:\n"; ($result) = <$socket> =~ /\r\n\r\n(.+)/s; unless ($result) { die "Ooops! Did not receive any valid server results?\n" } print "$result >>> Verifying MD5...\n";  foreach (split(/\n/, $result)) { if ($_ =~ /([^=]+)=(.+)/) { $key_val{$1} = $2 } }    # Now lets check if the result contains (and it should contain) the MD5HEX of the uploaded file and check if its identical to our MD5HEX. unless ($key_val{"File1.4"}) { die "Ooops! Result did not contain MD5? Maybe you entered invalid login data.\n" } if ($md5hex ne $key_val{"File1.4"}) { die qq|Upload FAILED! Your MD5HEX is $md5hex, while the uploaded file has MD5HEX $key_val{"File1.4"}!\n| } print "MD5HEX value correct. Upload completed without errors. Saving links to rsulres.txt\n\n\n";    # Maybe you want the links saved to a logfile? Here we go. open(O, ">>rsulres.txt"; print O $result . "\n"; close(O);    # Thats it. Have fun experimenting with this script. Now lets say... exit;

2. Guardarlo en algun lugar y con algun nombre que termine en .sh, supongamos que lo guardas como "~/RSUpload.sh"

3. Ahora en la consola ejecutar los siguientes comandos (despues de "su" tenes que ingresar tu contraseña de root):

Cita:
cd ~
su
chmod 744 RSUpload.sh
mv RSUpload.sh /usr/bin
exit

Como usarlo:

Para cuentas free ejecutar:

Cita:
RSUpload.sh [nombredelarchivo]

Para collector ejecutar:

Cita:
RSUpload.sh [nombredelarchivo] col [usuario] [contraseña]

Para premium ejecutar:

Cita:
RSUpload.sh [nombredelarchivo] prem [usuario] [contraseña]

Cuando se termine de subir el archivo elegido, se crea un archivo llamado rsulres.txt en el directorio desde donde ejecutaste el script (si no cambiaste de directorio es tu home) con la direccion del archivo en RapidShare.
2 Comentarios
#1 josejp24240 | 6.8.2009 23:24:46 dijo:
muy buena data voy aprobarlo gracias


#2 damisio | 3.1.2010 06:33:55 dijo:
por favor explica desde el FREE
no se entiende para nosotros los novatos, recien estamos agarrando cancha en linux.-  porfavor amigo