Wget mastery – część 4

Posted by Ktoso on 17/08/2009 – 13:23

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:

  1. #Pobieranie wszystkich plików z czyjejś listy plików na rapidshare.com
  2. #rapget.pl by DeathPlanter (deathplanter@gmail.com)
  3. #by Ktoso (ktosotheryba@project13.pl)
  4.  
  5. #pobrać pliczek z rapidshare
  6. #ręcznie na razie trzeba… zapisujemy go jako Rapidplik
  7. #same urle co chcemy
  8. cat "Rapidplik" | grep -o -e ''http://.\\{1,100\\}\\.pdf'' > lista
  9.  
  10. #bez powtórzeń
  11. cat lista | uniq > listaClear
  12. #bez linii w które załapał się "
  13. sed -i listaClear -e ''/"/d''
  14.  
  15. #pobieramy dzięki użyciu zmodyfikowanego przezemnie rapget, rapgetfile
  16. mv listaClear lista
  17. ./rapgetfile.pl
  18.  
  19. #lub tradycyjnie przez podanie wszystkich URLi rapgetowi…
  20. #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

#!/usr/bin/env perl
  1. use warnings; use strict;
  2.  
  3. #RapGet. Downloads links given as a program''s argument.
  4. #Released under the latest version of Creative Commons, 3.0 BY-SA.
  5. #http://creativecommons.org/licenses/by-sa/3.0/
  6. #Contact: deathplanter@gmail.com
  7.  
  8. foreach ( @ARGV ){
  9. chomp;
  10.  
  11. my $data = `wget -q -O- $_`;
  12. my $regex = ''form id="(.*)" action="(.*)" method="post">(.*)Free user(.*)<\\/form'';
  13. $data =~ /$regex/s;
  14.  
  15. $data = `wget -q -O- –post-data="dl.start=Free" $2`;
  16. $regex =
  17. "var (.*?) = ''
  18.  
  19. <form> "action=\\"(.*?)\\" method=\\"post\\"&gt;(.*?)".
  20. "var (.*?)=(.*?);(.*?)if";
  21.  
  22. if ($data =~ /$regex/s) {   }
  23.  
  24. #if not a number, exit, rapidshare wont give us links for now (download limit)
  25. if ($6 == ""){
  26. print "[ERR] RapidShare download limit reached for this IP!\\n\\n ";
  27. exit;
  28. }else{
  29. print "[OK] Got the DL link for $_. Waiting $6 seconds…\\n";
  30. for (0..$6) { sleep (1); }
  31. system ("wget $3");
  32. system("sed -i -e ''1d'' lista");
  33. }
  34. }
  35. </form>

rapgetfile.pl

#!/usr/bin/env perl
  1. use warnings; use strict;
  2.  
  3. #RapGet. Downloads links given as a program''s argument.
  4. #Released under the latest version of Creative Commons, 3.0 BY-SA.
  5. #http://creativecommons.org/licenses/by-sa/3.0/
  6. #Contact: deathplanter@gmail.com
  7.  
  8. open FILE, "lista";
  9. @ARGV = ;
  10.  
  11. foreach ( @ARGV ){
  12. chomp;
  13.  
  14. chdir "~/Downloads=";
  15. my $data = `wget -q -O- $_`;
  16. my $regex = ''form id="(.*)" action="(.*)" method="post"&gt;(.*)Free user(.*)&lt;\\/form'';
  17. $data =~ /$regex/s;
  18.  
  19. $data = `wget -q -O- –post-data="dl.start=Free" $2`;
  20. $regex =
  21. "var (.*?) = ''
  22. "action=\\"(.*?)\\" method=\\"post\\"&gt;(.*?)".
  23. "var (.*?)=(.*?);(.*?)if";
  24.  
  25. if ($data =~ /$regex/s) {   }
  26.  
  27. #if not a number, exit, rapidshare wont give us links for now (download limit)
  28. if ($6 == ""){
  29. print "[ERR] RapidShare download limit reached for this IP!\\n\\n ";
  30. exit;
  31. }else{
  32. print "[OK] Got the DL link for $_. Waiting $6 seconds…\\n";
  33. for (0..$6) { sleep (1); }
  34. system ("wget $3");
  35. system("sed -i -e ''1d'' lista");
  36. }
  37. }
  38.  
  39. 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 )


This post is under “coding, guide” and has no respond so far.
If you enjoy this article, make sure you subscribe to my RSS Feed.

Post a reply