Advertisement
Papadopolis

Untitled

Jan 18th, 2012
210
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 4.61 KB | None | 0 0
  1. #!/usr/bin/perl
  2.  
  3. # Módulo para requisição HTTP
  4. # require HTTP::Request; # Esse módulo não é necessário nesse script, eu prefiro usar o LWP::UserAgent pra fazer requisições com post fields e cookies.
  5. require LWP::UserAgent;
  6.  
  7. # Módulo usado que trabalha em conjunto com o LWP::UserAgent para salvar os cookies setados pelas requisições http
  8. require HTTP::Cookies;
  9.  
  10. use HTTP::Request::Common;
  11.  
  12. # Variáveis que serão usadas no decorrer do script
  13. my($urlPrefix, $req, $ua, $response, $content, $headers, $code, $output, $regexp, $cookies) = ('http://www.cpturbo.org/cpt/');
  14.  
  15. # Variáveis que devem ser alteradas
  16. # Login e senha do CPT e opção de ativar repaginação do script (capturar absolutamente todas as páginas possíveis do fórum)
  17. my($cptLogin, $cptPass) = ('seuuser', 'suasenha');
  18.  
  19. $cookies = HTTP::Cookies->new();
  20.  
  21. # Fazendo login no CPT
  22. $ua = LWP::UserAgent->new;
  23.  
  24. # Os cookies são armazenados automaticamente no arquivo cookies.txt, também são usados automaticamente ao fazer uma requisição no domínio em que foram setados, só não se esqueça de setar o chmod do arquivo para 0640
  25. $ua->cookie_jar(HTTP::Cookies->new('file' => 'cookies.txt', 'autosave' => 1));
  26.  
  27. print "Content-type: text/plain\n\n";
  28. print "Script em execução...\n\n";
  29.  
  30. $response   = $ua->request(POST $urlPrefix.'index.php?app=core&module=global&section=login&do=process', [username => $cptLogin, password => $cptPass, referer => $urlPrefix. 'index.php', rememberMe => 1]);
  31. $headers    = $response->headers_as_string;
  32. $code       = $response->code;
  33.  
  34. if($code == 302) { # 'Moved'
  35.     # capturando e armazenando os cookies dos headers
  36.     while($headers =~ (/.*?set-cookie: ((.*?)=(.*?);)/gi)) { # Se não incluir a flag 'g' o script entra em loop infinito / Colocar as RegExp entre parêntesis não é algo obrigatório
  37.         # $2 guarda o nome do cookie, $3 o valor
  38.         $cookies->set_cookie(0, $2, $3, '/', $urlPrefix, 80, 0, 0, 86400, 0);
  39.         if($2 == 'cpt_1212pass_hash') { # Esse é o cookie que salva a sessão do usuário logado
  40.             $logado = true;
  41.         }
  42.     }
  43. } else {
  44.     print 'Falha ao efetuar requisição HTTP.';
  45.     exit 0;
  46. }
  47.  
  48. if(!defined($logado)) {
  49.     print 'Não foi possível logar-se no CPT.';
  50.     exit 0;
  51. }
  52.  
  53. # Acessando a página principal e enviando o html de retorno para a sub rotina
  54. $response   = $ua->request(GET $urlPrefix.'index.php?act=idx');
  55. $content    = $response->content;
  56. $code       = $response->code;
  57.  
  58. salvarTopicos($content);
  59.  
  60. # Rotina que utiliza recursividade para acessar o link de todos os tópicos e salvar o HTML deles
  61. sub salvarTopicos {
  62.     my($html, $subTop, $subFor) = (shift, shift, shift); # a função shift serve para obter e excluir o primeiro ítem de um array, que nesse caso são os argumentos da função que ficam armazenados na array $_ (que não é declarada), sendo assim você também pode acessar os parâmetros passados para sua rotina utilizando $_[0], $_[1], ..., $_[50]
  63.    
  64.     if(!defined($subTop)) {
  65.         $subTop = '';
  66.     }
  67.    
  68.     if(!defined($subFor)) {
  69.         $subFor = '';
  70.     }
  71.    
  72.     # Captura e acessa todos os sub fórums da página
  73.     while($html =~ (/showforum.(\d+)\".*?>(.*?)<\/a>/gi)) {
  74.         if($2 != "<div align='center'><img src=\"http://i.imgur.com/V0YFq.png\" border=\"0\" class=\"linked-image\" /></div>") {
  75.             $|++;
  76.             print "\n\n", $1, ': ', $2, "\n";
  77.            
  78.             # Cria a pasta de cada fórum
  79.             mkdir 'arquivos/'. $subFor. $2, 0777 unless -d 'arquivos/'. $2;
  80.            
  81.             # Acessa a página de cada fórum e extrai seu html
  82.             $response   = $ua->request(GET $urlPrefix. 'index.php?showforum='. $1);
  83.             $content    = $response->content;
  84.            
  85.             salvarTopicos($content, $subTop. $2. '/', $subFor. $2. '/');
  86.         }
  87.     }
  88.    
  89.     # Captura e acessa todos os tópicos da página
  90.     while($html =~ (/showtopic.(\d+)\".*?em (\d+) (.*?) (\d+)...(\d+):(\d+).*?>(.*?)<\/a>/gi)) {
  91.         $|++;
  92.         # Acessa a página de cada fórum e extrai seu html
  93.         $response   = $ua->request(GET $urlPrefix. 'index.php?showtopic='. $1);
  94.         $content    = $response->content;
  95.        
  96.         print "         ";
  97.         # Salva o conteúdo HTML de cada tópico nos arquivos
  98.         open ARQUIVO, ">>", 'arquivos/'. $subTop. $7. '.html';
  99.         if(!defined(ARQUIVO)) {
  100.             print "Tópico ", $7, " ...... Erro ao salvar\n";
  101.         } else {
  102.             print "Tópico ", $7, " ...... Salvo com sucesso\n";
  103.             print ARQUIVO $content;
  104.             close ARQUIVO;
  105.         }
  106.     }
  107. }
  108.  
  109. exit 0;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement