Wget mastery – część 4
Kolejna część zabaw z wgetem! Tym razem moim celem jest pobranie gigantycznego zbioru ebooków informatycznych/matematycznych z profilu użytkownika na rapidshare. Url stronki profilu interesującego mnie użytkownika to: http://rapidshare.com/users/3USCM4. Niestety aby dostać się do listy samych plików najpierw przeba kliknąć w javascriptowy link, który nam ją pokaże… więc nie wymyśliłem jak na razie jak ten moment zautomatyzować. Musimy ręcznie pobrać stronkę z spisem plików, danego folderu. Kolejne kroki przedstawiam poniżej:
-
#Pobieranie wszystkich plików z czyjejś listy plików na rapidshare.com
-
#rapget.pl by DeathPlanter (deathplanter@gmail.com)
-
#by Ktoso (ktosotheryba@project13.pl)
-
-
#pobrać pliczek z rapidshare
-
#ręcznie na razie trzeba… zapisujemy go jako Rapidplik
-
#same urle co chcemy
-
cat "Rapidplik" | grep -o -e ''http://.\\{1,100\\}\\.pdf'' > lista
-
-
#bez powtórzeń
-
cat lista | uniq > listaClear
-
#bez linii w które załapał się "
-
sed -i listaClear -e ''/"/d''
-
-
#pobieramy dzięki użyciu zmodyfikowanego przezemnie rapget, rapgetfile
-
mv listaClear lista
-
./rapgetfile.pl
-
-
#lub tradycyjnie przez podanie wszystkich URLi rapgetowi…
-
#cat listaClear | while read A; do ./rapget.pl $A; done;
-
Sam skrypt rapget nie jest mojego autorstwa, zmodyfikowałem go jedynie troszkę tworząc rapgetfile, który czyta listę URLi z pliku oraz usuwa pobrany już plik z niej. Przydatne IMO. Poza tym w obu wersjach wprowadziłem przerywanie wykonania skryptu w przypadku osiągnięcia limitu pobierania rapidshare – po prostu plik nie zostanie nam nigdy podany przez pewien okres po pobraniu poprzedniego. Skrypty te w rozwinięciu, żeby nie za dużo na głównej było.
rapget.pl
-
use warnings; use strict;
-
-
#RapGet. Downloads links given as a program''s argument.
-
#Released under the latest version of Creative Commons, 3.0 BY-SA.
-
#http://creativecommons.org/licenses/by-sa/3.0/
-
#Contact: deathplanter@gmail.com
-
-
foreach ( @ARGV ){
-
chomp;
-
-
my $data = `wget -q -O- $_`;
-
my $regex = ''form id="(.*)" action="(.*)" method="post">(.*)Free user(.*)<\\/form'';
-
$data =~ /$regex/s;
-
-
$data = `wget -q -O- –post-data="dl.start=Free" $2`;
-
$regex =
-
"var (.*?) = ''
-
-
<form> "action=\\"(.*?)\\" method=\\"post\\">(.*?)".
-
"var (.*?)=(.*?);(.*?)if";
-
-
if ($data =~ /$regex/s) { }
-
-
#if not a number, exit, rapidshare wont give us links for now (download limit)
-
if ($6 == ""){
-
print "[ERR] RapidShare download limit reached for this IP!\\n\\n ";
-
exit;
-
}else{
-
print "[OK] Got the DL link for $_. Waiting $6 seconds…\\n";
-
for (0..$6) { sleep (1); }
-
system ("wget $3");
-
system("sed -i -e ''1d'' lista");
-
}
-
}
-
</form>
-
rapgetfile.pl
-
use warnings; use strict;
-
-
#RapGet. Downloads links given as a program''s argument.
-
#Released under the latest version of Creative Commons, 3.0 BY-SA.
-
#http://creativecommons.org/licenses/by-sa/3.0/
-
#Contact: deathplanter@gmail.com
-
-
open FILE, "lista";
-
@ARGV = ;
-
-
foreach ( @ARGV ){
-
chomp;
-
-
chdir "~/Downloads=";
-
my $data = `wget -q -O- $_`;
-
my $regex = ''form id="(.*)" action="(.*)" method="post">(.*)Free user(.*)<\\/form'';
-
$data =~ /$regex/s;
-
-
$data = `wget -q -O- –post-data="dl.start=Free" $2`;
-
$regex =
-
"var (.*?) = ''
-
"action=\\"(.*?)\\" method=\\"post\\">(.*?)".
-
"var (.*?)=(.*?);(.*?)if";
-
-
if ($data =~ /$regex/s) { }
-
-
#if not a number, exit, rapidshare wont give us links for now (download limit)
-
if ($6 == ""){
-
print "[ERR] RapidShare download limit reached for this IP!\\n\\n ";
-
exit;
-
}else{
-
print "[OK] Got the DL link for $_. Waiting $6 seconds…\\n";
-
for (0..$6) { sleep (1); }
-
system ("wget $3");
-
system("sed -i -e ''1d'' lista");
-
}
-
}
-
-
close FILE;
-
W razie problemów z skryptem (plucie się perla o “unrecognized character”, pobierzcie skrypt z http://www.upshit.project13.pl/files/rapgetfile.pl )


Post a reply