Instruktaż/Tutorial Skrypt uploadu na serwery rapidshare

hypnosiss

Moderator
Contributor
6 Lipiec 2008
327
31
28
31
Polska, Wrocław
QNAP
TS-x53D
Ethernet
1 GbE
SKRYPT PERL DO UPLOADOWANIA PLIKÓW Z QNAPA NA SERWERY RAPIDSHARE

Przedstawiam autorski skrypt do uploadu wiele plików na serwery rapidshare. Więkrzość opcji jest wypisanych w helpie skryptu.
Ogólnie mówiąc skrypt ma możliwość uploadu przez różne sposoby na serwery rapidshare. Skrypt ma zastosowaną funkcje skiplist, polega ona na zapisywaniu ściągniętych już plików także przy ponownym uruchomieniu tych samych wartości skrypt wznowi upload od danego pliku oraz danej KB.
Skrypt jest przeznaczony na serwery NAS firmy QNAP!
Obsługa kont premium, collector jak i darmowe.
Skrypt ma dodane obliczanie procentowe, dzięki czemu mamy możliwość poglądu w jakim stopniu wysłany jest plik.
Skrypt obsługuje również błedy RS.

Krok po kroku INSTALACJA:

1. Instalujemy OPTWARE z QPKG(znajdującym się w Panelu Administracyjnym) oraz ustawiamy wartośc na Enabled(włączony).
2. Instalujemy PERLA z QPKG (https://forum.qnap.net.pl/viewtopic.php?f=49&t=282) ustawiamy na Enabled
3. Logujemy się na SSH.
4. Tworzymy foldery i pliki.
Wpisuj kolejno:

Bash:
cd ..
mkdir rapidshare1
cd rapidshare1

Tworzymy plik rsapi.pl:
Bash:
vi rsapi.pl
Wciskamy klawisz "i"
Kopiujemy to:
Perl:
#!/usr/bin/perl
$| = 1;
#
# Version 2.1.1 (13. July 2007)
 
# RapidShare AG OpenSource Perl Uploader V2 (with upload resume). 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.
# Upload resume can continue aborted downloads up to 24 hours after the download aborted. This means, incomplete files
# will automatically be deleted from the RapidShare servers 24 hours after the first chunk arrived.
# 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)
 
use strict;
use warnings;
use Digest::MD5("md5_hex");
use Fcntl;
use IO::Socket;
 
my ($file, $zone, $login, $password, $uploadpath, $cursize, $size, $filecontent, $md5hex, $size2, $socket, $uploadserver, $killcode);
 
 
 
# This chapter sets some vars and parses some vars.
$/ = undef;
$SIG{PIPE} = 'IGNORE';
$file = $ARGV[0] || die "Syntax: $0 <filename to upload> <free|prem|col> [login] [password]\n";
$zone = $ARGV[1] || "";
$login = $ARGV[2] || "";
$password = $ARGV[3] || "";
$uploadpath = "l3";
$size = -s $file || die "Plik $file jest pusty lub nie istnieje!\n";
 
 
 
# 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 "Nie można otworzyć pliku: $!\n";
$filecontent = <FH>;
close(FH);
$md5hex = md5_hex($filecontent);
$size2 = length($filecontent);
print "MD5HEX is $md5hex ($size2 bytes analyzed)\n";
unless ($size == $size2) { die "Dziwny błąd: $size bajtów znaleziono, ale tylko $size2 bajtów przeanalizowano?\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 $zone account.\n" } else { print "Uploading as a free user.\n" }
print "Getting upload server infos.\n";
$socket = IO::Socket::INET->new(PeerAddr => "rapidshare.com", PeerPort => "80", Type => SOCK_STREAM) || die "Nie można się połączyć: $!\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";
 
$cursize = 0;
while ($cursize < $size) { print "SIZES=$cursize,$size\n"; $cursize = &uploadchunk($file, $md5hex, $size, $cursize, "rs$uploadserver$uploadpath.rapidshare.com:80") }
 
 
 
sub uploadchunk {
  my $file = shift || die;
  my $md5hex = shift || die;
  my $size = shift || die;
  my $cursize = shift || 0;
  my $fulluploadserver = shift || die;
 
  my ($uploaddata, $wantchunksize, $fh, $socket, $boundary, $contentheader, $contenttail, $contentlength, $header, $chunks, $chunksize,
$bufferlen, $buffer, $result, $fileid, $complete, $resumed, $filename);
 
  if (-e "$file.uploaddata") {
	print "Found .uploaddata! Overriding settings and trying to resume.\n";
	open(I, "$file.uploaddata") or die "Nie można otworzyć pliku: $!\n";
	($fulluploadserver, $fileid, $killcode) = split(/\n/, <I>);
	print "Uploadserver=$fulluploadserver\nFile-ID=$fileid\nKillcode=$killcode\n";
	close(I);
	print "Checking if RS gives an OK and the position...\n";
	$socket = IO::Socket::INET->new(PeerAddr => "rapidshare.com", PeerPort => "80", Type => SOCK_STREAM) || die "Nie można się połączyć: $!\n";
	print $socket qq|GET /cgi-bin/rsapi.cgi?sub=checkincomplete_v1&fileid=$fileid&killcode=$killcode HTTP/1.0\r\n\r\n|;
	$result = <$socket>;
	unless ($result =~ /\r\n\r\n(\d+)/) { die "I can't resume the file. Please delete $file.uploaddata. RS said:\n$result\n" }
	$cursize = $1;
	print "All ok. The upload stopped at $cursize. Trying to resume.\n";
	$resumed = 1;
  }
 
  $wantchunksize = 1024000;
 
  if ($size > $wantchunksize) {
	$chunks = 1;
	$chunksize = $size - $cursize;
	if ($chunksize > $wantchunksize) { $chunksize = $wantchunksize } else { $complete = 1 }
  } else {
	$chunks = 0;
	$chunksize = $size;
  }
 
  print "Upload chunk is $chunksize bytes starting at $cursize.\n";
 
  sysopen($fh, $file, O_RDONLY) || die "Unable to open file: $!\n";
  $filename = $file =~ /[\/\\]([^\/\\]+)$/ ? $1 : $file;
$socket = IO::Socket::INET->new(PeerAddr => $fulluploadserver, Type => SOCK_STREAM) || die "Nie można utworzyć połączenia: $!\n";
  $boundary = "---------------------632865735RS4EVER5675865";
  $contentheader .= qq|$boundary\r\nContent-Disposition: form-data; name="rsapi_v1"\r\n\r\n1\r\n|;
 
  if ($resumed) {
	$contentheader .= qq|$boundary\r\nContent-Disposition: form-data; name="fileid"\r\n\r\n$fileid\r\n|;
	$contentheader .= qq|$boundary\r\nContent-Disposition: form-data; name="killcode"\r\n\r\n$killcode\r\n|;
	if ($complete) { $contentheader .= qq|$boundary\r\nContent-Disposition: form-data; name="complete"\r\n\r\n1\r\n| }
  } else {
	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|;
	}
 
	if ($chunks) { $contentheader .= qq|$boundary\r\nContent-Disposition: form-data; name="incomplete"\r\n\r\n1\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) + $chunksize + length($contenttail);
 
  if ($resumed) {
	$header = qq|POST /cgi-bin/uploadresume.cgi HTTP/1.0\r\nContent-Type: multipart/form-data; boundary=$boundary\r\nContent-Length: $contentlength\r\n\r\n|;
  } else {
	$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|;
  }
 
  print $socket "$header$contentheader";
 
  sysseek($fh, $cursize, 0);
  $bufferlen = sysread($fh, $buffer, $wantchunksize) || 0;
  unless ($bufferlen) { die "Błąd podczas czytania pliku: $!\n" }
  print "Sending $bufferlen bytes.\n";
  $cursize += $bufferlen;
  print $socket $buffer;
  print $socket $contenttail;
  print "Server response:\n";
  ($result) = <$socket> =~ /\r\n\r\n(.+)/s;
  unless ($result) { die "Ooops! Nie otrzymano żadnych poprawnych wyników od serwera?\n" }
  print $result . "\n";
 
  if ($resumed) {
	if ($complete) {
	  if ($result =~ /^COMPLETE,(\w+)/) {
		print "Upload completed! MD5HEX=$1 Checking MD5...\n";
		if ($md5hex ne $1) { die "MD5-CHECK NOT PASSED! LOCAL=$md5hex REMOTE=$1\n" }
		print "MD5-check passed. Upload OK! Saving status to rsapiuploads.txt\n";
		open(O,">>rsapiuploads.txt") or die "Nie można zapisać do rsapiuploads.txt: $!\n";
		print O "Upload OK!\n\n";
		close(O);
		unlink("$file.uploaddata");
	  } else {
		die "Nieoczekiwana odpowiedź serwera!\n";
	  }
	} else {
	  if ($result =~ /^CHUNK,(\d+)/) {
		print "Chunk upload completed! Uploaded=$1\n";
	  } else {
		die "Nieoczekiwana odpowiedź serwera!\n";
	  }
	}
  } else {
	if ($result =~ /files\/(\d+)/) { $fileid = $1 } else { die "Serwer nie wysłał ID (Sprawdź login i hasło do konta premium).\n" }
	unless ($result =~ /File1\.3=(\d+)/ and $1 == $cursize) { die "Serwer nie zapisał wszystkich wysłanych danych.\n" }
	unless ($result =~ /File1\.2=.+?killcode=(\d+)/) { die "Serwer nie wysłał killcode.\n" }
 
	$killcode = $1;
 
	open(O,">>rsapiuploads.txt") or die "Nie można zapisać do rsapiuploads.txt: $!\n";
	print O "Uploading $file. Download-links:\n$result";
	close(O);
 
	if ($chunks) {
	  open(O, ">$file.uploaddata") or die "Unable to save upload server: $!\n";
	  print O "$fulluploadserver\n$fileid\n$killcode\n";
	  close(O);
	}
  }
 
  return $cursize;
}
i wklejmy do konsoli klikajac prawym przyciskiem myszy w konsole(a dokladniej w czarne tlo :) )
Wciskamy ESC oraz SHIFT + Z,Z.
Czekamy aż skończy wklejanie i potwierdzi że zapisano plik.

Tworzymy plik rs.pl:
Bash:
vi rs.pl
UWAGA UŻYTKOWNICY Z RAIDEM ZAMIENIAJA HDA_DATA NA MDO_DATA W JEDNYM MIEJSCU "my $basedir =" !!!!!!!!!!!!!!!!!!!!!!!
Robimy tak samo jak poprzedni plik z tym że wklejamy to:
Perl:
#!/usr/bin/perl
use strict;
 
$| = 1;
 
my $basedir = "/share/HDA_DATA";
my $rsf = "/rapidshare1/rsapi.pl";
 
unless ($ARGV[0]) {
  print "Witaj ! \n";
  print "Jest to skrypt do uploadowania plików znajdujących się na QNAPie na serwery Rapidshare. \n";
  print "Wykorzystuje on twórczość rapidshare, który napisał główny kod uploadujący(PLIK RSAPI.PL) na serwery rapidshare(na zasadzie Open Source). \n";
  print "Kod ich został przezemnie nieco zmieniony pod serwery QNAP oraz dla potrzeb skryptu. Skrypt powinien działać na wszystkich wersjach QNAPa.\n\n";
  print "Wymagania:\n";
  print "- zainstalowane na QNAPie(QPKG) środowisko OPTWARE;\n";
  print "- zainstalowany PERL z QPKG\n\n";
  print "Opcje:\n";
  print "1 - Wysyłanie wszystkich plików z podanego katalogu o danym rozszerzeniu mających w nazwie podaną frazę\nPrzykład: perl rapidshare1/rs.pl 1 Kaspersky rar QMultimedia [free|prem( login pass)]\n\n\n";
  print "2 - Wysyłanie plików o danym rozszerzeniu z danego folderu\nPrzykład: perl rapidshare1/rs.pl 2 rar Public/upload/antywirus [free|prem( login pass)]\n\n\n";
  print "3 - Wysyłanie podanych części archiwum rar wieloczęściowego z danego katalogu\nPrzykład: perl rapidshare1/rs.pl 3 1-15 QDownload/Filmy [free|prem( login pass)]\n\n\n";
  print "4 - Wysyłanie plików zapisanych na liście plików podanej jako parametr\nPrzykład: perl rapidshare1/rs.pl lista.plikow.txt [free|prem( login pass)]\n\n\n";
  print "INFORMACJE\n";
  print "- W nazwach katalogów nie należy używać ukośników na końcu.\n";
  print "- W liście plików(opcja 3) oddzielaj ścieszki enterami.\n\n";
  print "Kontakt: hypnosisspl\@gmail.com\n\n";
  die "Try again ;)";
}
unless (-e "$ENV{HOME}/skiplist.txt") { open FILE, ">", "$ENV{HOME}/skiplist.txt" or die "Error: $!\n";close FILE; }
if ($ARGV[0] == 1) {
  my $p;
  my $c;
  my $fff;
  my @prem;
  unless ($ARGV[1] && $ARGV[2] && $ARGV[3] && $ARGV[4]) {
	die "Nieprawidłowe parametry\n";
  }
  else {
	if ($ARGV[4] eq "prem") {
	  unless ($ARGV[5] && $ARGV[6]) {
	  die "Nie podano hasła/loginu do konta\n";
	}
	  else {
	$p = 1; $prem[0] = $ARGV[5]; $prem[1] = $ARGV[6]; print "Wybrano konto prem\n";
	  }
	}
	elsif ($ARGV[4] eq "col") {
	  unless ($ARGV[5] && $ARGV[6]) {
	  die "Nie podano hasła/loginu do konta\n";
	}
	  else {
	$c = 1; $prem[0] = $ARGV[5]; $prem[1] = $ARGV[6]; print "Wybrano konto col\n";
	  }
	}
	else { if ($ARGV[4] eq "free") { print "Wybrano konto free\n"; $fff = 1; } else { die "Wybrano złe konto\n"; } }
  }
  print "Wybrano opcję 1... Uruchamianie...\n";
  chdir($basedir."/".$ARGV[3]) or die "Error: $!\n";
  my @files = glob("*$ARGV[1]*.$ARGV[2]");
  open SKIP, "<", "$ENV{HOME}/skiplist.txt" or die "Error: $!\n";
  chomp(my @skip = <SKIP>);
  close SKIP;
  foreach my $f (@files) {
	my $ff = $basedir."/".$ARGV[3]."/".$f;
	my $ok = 1;
	foreach (@skip) {
	  if ($_ eq $ff) {
	$ok = 0;
	  }
	}
	  if ($ok == 1) {
	print "Wysyłanie $ff\n";
 
	if ($p == 1) {
	open RS, "perl $rsf $ff prem $prem[0] $prem[1] |";
	}
	elsif ($fff == 1) {
	  open RS, "perl $rsf $ff free |";
	}
	elsif ($c == 1) {
	  open RS, "perl $rsf $ff col $prem[0] $prem[1] |";
	}
	while (<RS>) {
	  chomp;
	  if ($_ =~ /^COMPLETE,\w+/) {
		open FILE, ">>", "$ENV{HOME}/skiplist.txt" or die "Error: $!\n";
		print FILE "$ff\n";
		print "\nPoprawnie wysłano $ff\n";
		close FILE;
	  }
	  elsif ($_ =~ /^SIZES=(\d+),(\d+)/) {
		my $procent = ($1/$2)*100;
		print "\rPostęp: ";printf "%.2f",$procent;print '%';
	  }
	}
	close RS;
 
	}
	else { print "Pomijanie $ff\n"; }
  }
  print "Koniec\n";
}
 
elsif ($ARGV[0] == 2) {
  my $p;
  my $c;
  my $fff;
  my @prem;
 
  unless ($ARGV[1] && $ARGV[2] && $ARGV[3]) {
	die "Nieprawidłowe parametry\n";
  }
  else {
	if ($ARGV[3] eq "prem") {
	  unless ($ARGV[4] && $ARGV[5]) {
	  die "Nie podano hasła/loginu do konta\n";
	}
	  else {
	$p = 1; $prem[0] = $ARGV[4]; $prem[1] = $ARGV[5]; print "Wybrano konto prem\n";
	  }
	}
	elsif ($ARGV[3] eq "col") {
	  unless ($ARGV[4] && $ARGV[5]) {
	  die "Nie podano hasła/loginu do konta\n";
	}
	  else {
	$c = 1; $prem[0] = $ARGV[5]; $prem[1] = $ARGV[5]; print "Wybrano konto col\n";
	  }
	}
	else { if ($ARGV[3] eq "free") { print "Wybrano konto free\n"; $fff = 1; } else { die "Wybrano złe konto\n"; } }
  }
  print "Wybrano opcję 2... Uruchamianie...\n";
  chdir($basedir."/".$ARGV[2]) or die "Error: $!\n";
  my @files = glob("*.$ARGV[1]");
  open SKIP, "<", "$ENV{HOME}/skiplist.txt" or die "Error: $!\n";
  chomp(my @skip = <SKIP>);
  close SKIP;
  foreach my $f (@files) {
	my $ff = $basedir."/".$ARGV[2]."/".$f;
	my $ok = 1;
	foreach (@skip) {
	  if ($_ eq $ff) {
	$ok = 0;
	  }
	}
	  if ($ok == 1) {
	print "Wysyłanie $ff\n";
	if ($p == 1) {
	open RS, "perl $rsf $ff prem $prem[0] $prem[1] |";
	}
	elsif ($fff == 1) {
	  open RS, "perl $rsf $ff free |";
	}
	elsif ($c == 1) {
	  open RS, "perl $rsf $ff col $prem[0] $prem[1] |";
	}
	while (<RS>) {
	  chomp;
	  if ($_ =~ /^COMPLETE,\w+/) {
		open FILE, ">>", "$ENV{HOME}/skiplist.txt" or die "Error: $!\n";
		print FILE "$ff\n";
		print "\nPoprawnie wysłano $ff\n";
		close FILE;
	  }
	  elsif ($_ =~ /^SIZES=(\d+),(\d+)/) {
		my $procent = ($1/$2)*100;
		print "\rPostęp: ";printf "%.2f",$procent;print '%';
	  }
	}
	close RS;
	}
	else { print "Pomijanie $ff\n"; }
  }
  print "Koniec\n";
}
elsif ($ARGV[0] == 3) {
  my $p;
  my $c;
  my $fff;
  my @prem;
  unless ($ARGV[1] && $ARGV[2] && $ARGV[3]) {
	die "Nieprawidłowe parametry\n";
  }
  else {
	if ($ARGV[3] eq "prem") {
	  unless ($ARGV[4] && $ARGV[5]) {
	  die "Nie podano hasła/loginu do konta\n";
	}
	  else {
	$p = 1; $prem[0] = $ARGV[4]; $prem[1] = $ARGV[5]; print "Wybrano konto prem\n";
	  }
	}
	elsif ($ARGV[3] eq "col") {
	  unless ($ARGV[4] && $ARGV[5]) {
	  die "Nie podano hasła/loginu do konta\n";
	}
	  else {
	$c = 1; $prem[0] = $ARGV[4]; $prem[1] = $ARGV[5]; print "Wybrano konto col\n";
	  }
	}
	else { if ($ARGV[3] eq "free") { print "Wybrano konto free\n"; $fff = 1; } else { die "Wybrano złe konto\n"; } }
  }
 
  my @files;
  my @parts;
  print "Wybrano opcję 3... Uruchamianie...\n";
  chdir($basedir."/".$ARGV[2]) or die "Error: $!\n";
  my @a = split /-/, $ARGV[1];
  for (my $i = $a[0]; $i <= $a[1]; $i++) {
	if ($i =~ /^(\d)$/) {
	  my $ii = 0; $ii .= $1;
	  push(@parts, $ii);
	}
	else { push(@parts, $i); }
  }
  my $basefile = glob("*.part$parts[0].rar");
  $basefile =~ s/part\d+\.rar//;
  foreach (@parts) { push(@files, $basefile."part".$_.".rar"); }
  open SKIP, "<", "$ENV{HOME}/skiplist.txt" or die "Error: $!\n";
  chomp(my @skip = <SKIP>);
  close SKIP;
 
  foreach my $f (@files) {
	my $ff = $basedir."/".$ARGV[2]."/".$f;
	my $ok = 1;
	foreach (@skip) {
	  if ($_ eq $ff) {
	$ok = 0;
	  }
	}
	  if ($ok == 1) {
	print "Wysyłanie $ff\n";
	if ($p == 1) {
	open RS, "perl $rsf $ff prem $prem[0] $prem[1] |";
	}
	elsif ($fff == 1) {
	  open RS, "perl $rsf $ff free |";
	}
	elsif ($c == 1) {
	  open RS, "perl $rsf $ff col $prem[0] $prem[1] |";
	}
	while (<RS>) {
	  chomp;
	  if ($_ =~ /^COMPLETE,\w+/) {
		open FILE, ">>", "$ENV{HOME}/skiplist.txt" or die "Error: $!\n";
		print FILE "$ff\n";
		print "\nPoprawnie wysłano $ff\n";
		close FILE;
	  }
	  elsif ($_ =~ /^SIZES=(\d+),(\d+)/) {
		my $procent = ($1/$2)*100;
		print "\rPostęp: ";printf "%.2f",$procent;print '%';
	  }
	}
	close RS;
	}
	else { print "Pomijanie $ff\n"; }
  }
  print "Koniec\n";
}
 
elsif ($ARGV[0] == 4) {
  my $p;
  my $c;
  my $fff;
  my @prem;
	unless ($ARGV[1] && $ARGV[2]) {
	die "Nieprawidłowe parametry\n";
  }
  else {
	if ($ARGV[2] eq "prem") {
	  unless ($ARGV[3] && $ARGV[4]) {
	  die "Nie podano hasła/loginu do konta\n";
	}
	  else {
	$p = 1; $prem[0] = $ARGV[3]; $prem[1] = $ARGV[4]; print "Wybrano konto prem\n";
	  }
	}
	elsif ($ARGV[2] eq "col") {
	  unless ($ARGV[3] && $ARGV[4]) {
	  die "Nie podano hasła/loginu do konta\n";
	}
	  else {
	$p = 1; $prem[0] = $ARGV[3]; $prem[1] = $ARGV[4]; print "Wybrano konto col\n";
	  }
	}
	else { if ($ARGV[2] eq "free") { print "Wybrano konto free\n"; $fff = 1; } else { die "Wybrano złe konto\n"; } }
  }
  print "Wybrano opcję 4... Uruchamianie...\n";
  open FILES, "<", "$ARGV[1]" or die "Error: $1\n";
  chomp(my @files = <FILES>);
  close FILES;
  chdir($basedir) or die "Error: $!\n";
 
  open SKIP, "<", "$ENV{HOME}/skiplist.txt" or die "Error: $!\n";
  chomp(my @skip = <SKIP>);
  close SKIP;
  foreach my $f (@files) {
	my $ff = $basedir."/".$f;
	my $ok = 1;
	foreach (@skip) {
	  if ($_ eq $ff) {
	$ok = 0;
	  }
	}
	  if ($ok == 1) {
	print "Wysyłanie $ff\n";
	if ($p == 1) {
	open RS, "perl $rsf $ff prem $prem[0] $prem[1] |";
	}
	elsif ($fff == 1) {
	  open RS, "perl $rsf $ff free |";
	}
	elsif ($c == 1) {
	  open RS, "perl $rsf $ff col $prem[0] $prem[1] |";
	}
	while (<RS>) {
	  chomp;
	  if ($_ =~ /^COMPLETE,\w+/) {
		open FILE, ">>", "$ENV{HOME}/skiplist.txt" or die "Error: $!\n";
		print FILE "$ff\n";
		print "\nPoprawnie wysłano $ff\n";
		close FILE;
	  }
	  elsif ($_ =~ /^SIZES=(\d+),(\d+)/) {
		my $procent = ($1/$2)*100;
		print "\rPostęp: ";printf "%.2f",$procent;print '%';
	  }
	}
	close RS;
	}
	else { print "Pomijanie $ff\n"; }
  }
  print "Koniec\n";
}

4. Nadajemy chmody.
Bash:
chmod 755 rs.pl

5. Instalujemy screen.
Bash:
ipkg update
ipkg install screen


Skrypt mamy zainstalowany :)

Odpalamy na screenie tak:

- Pierwszy raz(tzn jesli nie masz uruchomionego screena). Przykładowo:
Bash:
screen -a
cd rapidshare1
perl rs.pl 1 Kaspersky rar Public/antywirusy free

- Jeśli będąc na screenie chcesz wyjść z konsoli i zostawić uploadowanie na nocke wiciskasz CTRL+A+D

- Jeśli bedziesz chciał wrócic do screena wpisujesz:
Bash:
screen -r

- Jeżeli jesteś na screenie i chcesz otworzyć nowe "okienko" wciskasz CTRL+A+C

- Jeżeli jesteś na screenie i masz wiele otwartych okienek, możesz się przełączać między nimi skrótami CTRL+A+N lub CTRL+A+P.

- Jeżeli będąc na screenu z działającym skryptem i chcesz ten skrypt wyłączyć wciskasz CTRL+C.


Jeżeli chcesz dostać help ze spisem komend itd. wpisujesz:
Bash:
perl rapidshare1/rs.pl


Pliku rsapi.pl wcale nie uruchamiamy !

Jeśli chcesz zobaczyć co juz zuploadowało wejdź na rapidshare.com lub
plik generowany rsapiuploads.pl .

Wszelkie prawa zastrzeżone C 2008, skrypt jaki i całe HOWTO wykonał dla was hypnosiss :)
Rozpowszechnianie tylko za zgodą autora!
Podziękowania za pomoc w stawianiu podstawowych kroków SILAS-owi

Enjoy!
 
Re: [HOWTO] Skrypt uploadu na serwery rapidshare (NOWOŚĆ)

nazwijmy to v1 :)
skrypt jest ok...
ale dzis opublikwoalem Perl'a w QPKG ktory juz nie wymaga chroot'a i perl'a...
ale wymaga zainstalowania screen'a z optware

czyli ...

1) instalacja optware QPKG + wlacznie optware
2) # ipkg install screen
3) instalacja Perl QPKG
... zadzialaj w ten sposob...