Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/perl
- # Módulo para requisição HTTP
- # 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.
- require LWP::UserAgent;
- # Módulo usado que trabalha em conjunto com o LWP::UserAgent para salvar os cookies setados pelas requisições http
- require HTTP::Cookies;
- use HTTP::Request::Common;
- # Variáveis que serão usadas no decorrer do script
- my($urlPrefix, $req, $ua, $response, $content, $headers, $code, $output, $regexp, $cookies) = ('http://www.cpturbo.org/cpt/');
- # Variáveis que devem ser alteradas
- # 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)
- my($cptLogin, $cptPass) = ('seuuser', 'suasenha');
- $cookies = HTTP::Cookies->new();
- # Fazendo login no CPT
- $ua = LWP::UserAgent->new;
- # 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
- $ua->cookie_jar(HTTP::Cookies->new('file' => 'cookies.txt', 'autosave' => 1));
- print "Content-type: text/plain\n\n";
- print "Script em execução...\n\n";
- $response = $ua->request(POST $urlPrefix.'index.php?app=core&module=global§ion=login&do=process', [username => $cptLogin, password => $cptPass, referer => $urlPrefix. 'index.php', rememberMe => 1]);
- $headers = $response->headers_as_string;
- $code = $response->code;
- if($code == 302) { # 'Moved'
- # capturando e armazenando os cookies dos headers
- 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
- # $2 guarda o nome do cookie, $3 o valor
- $cookies->set_cookie(0, $2, $3, '/', $urlPrefix, 80, 0, 0, 86400, 0);
- if($2 == 'cpt_1212pass_hash') { # Esse é o cookie que salva a sessão do usuário logado
- $logado = true;
- }
- }
- } else {
- print 'Falha ao efetuar requisição HTTP.';
- exit 0;
- }
- if(!defined($logado)) {
- print 'Não foi possível logar-se no CPT.';
- exit 0;
- }
- # Acessando a página principal e enviando o html de retorno para a sub rotina
- $response = $ua->request(GET $urlPrefix.'index.php?act=idx');
- $content = $response->content;
- $code = $response->code;
- salvarTopicos($content);
- # Rotina que utiliza recursividade para acessar o link de todos os tópicos e salvar o HTML deles
- sub salvarTopicos {
- 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]
- if(!defined($subTop)) {
- $subTop = '';
- }
- if(!defined($subFor)) {
- $subFor = '';
- }
- # Captura e acessa todos os sub fórums da página
- while($html =~ (/showforum.(\d+)\".*?>(.*?)<\/a>/gi)) {
- if($2 != "<div align='center'><img src=\"http://i.imgur.com/V0YFq.png\" border=\"0\" class=\"linked-image\" /></div>") {
- $|++;
- print "\n\n", $1, ': ', $2, "\n";
- # Cria a pasta de cada fórum
- mkdir 'arquivos/'. $subFor. $2, 0777 unless -d 'arquivos/'. $2;
- # Acessa a página de cada fórum e extrai seu html
- $response = $ua->request(GET $urlPrefix. 'index.php?showforum='. $1);
- $content = $response->content;
- salvarTopicos($content, $subTop. $2. '/', $subFor. $2. '/');
- }
- }
- # Captura e acessa todos os tópicos da página
- while($html =~ (/showtopic.(\d+)\".*?em (\d+) (.*?) (\d+)...(\d+):(\d+).*?>(.*?)<\/a>/gi)) {
- $|++;
- # Acessa a página de cada fórum e extrai seu html
- $response = $ua->request(GET $urlPrefix. 'index.php?showtopic='. $1);
- $content = $response->content;
- print " ";
- # Salva o conteúdo HTML de cada tópico nos arquivos
- open ARQUIVO, ">>", 'arquivos/'. $subTop. $7. '.html';
- if(!defined(ARQUIVO)) {
- print "Tópico ", $7, " ...... Erro ao salvar\n";
- } else {
- print "Tópico ", $7, " ...... Salvo com sucesso\n";
- print ARQUIVO $content;
- close ARQUIVO;
- }
- }
- }
- exit 0;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement