Backup dos artigos do VOL
Publicado por Xerxes (última atualização em 31/01/2013)
[ Hits: 5.216 ]
Homepage: -
Salva todos os artigos de um usuário qualquer do Viva o Linux em HTML e em PDF (convertido). Precisa do wkhtmltopdf instalado.
#!/bin/sh #--------------------------------------------------------------------------------- # # volbackup.sh # # Versão 1.0 beta # # Script usado para salvar todos os artigos de um usuário # do site Viva o Linux - www.vivaolinux.com.br # # # # *** precisa do wkhtmltopdf instalado *** # # # Por Xerxes Lins # Contato: http://www.vivaolinux.com.br/~xerxeslins # # Recife, 21 de janeiro de 2013 #--------------------------------------------------------------------------------- # # # Tem como entrada o nome de um usuário do Viva o linux, busca seus artigos, # salva-os em HTML e em PDF. # # A conversão para PDF pode gerar arquivos com defeito devido limitações do # software WkHTMLtoPDF. # # O sistema Ubuntu usa DASH ao invés de BASH, por isso antes de executar este # script, caso use Ubuntu, use primeiro o comando: # # $ sudo dpkg-reconfigure dash # # E quando perguntado se deseja usar o DASH responda NÃO. # Depois disso pode usar o script no Ubuntu sem problemas. # # Torne o script executável: # $ chmod +x volbackup.sh # # Execute: # $ sh ./volbackup # # #--------------------------------------------------------------------------------- # # # # Histórico: # # versão 1.0b (2013-21-01) # versão 1.1b (2013-12-02) # # * corrigido o bug de dizer onde movia os artigos ($dir2 e não $dir) # * adicionado aviso para trocar DASH por BASH para quem usa Ubuntu # # Licença: GPL # # #--------------------------------------------------------------------------------- dir=~/.volbackup # define o diretório onde ocorrerão os procedimentos do script dir2=~/artigos_vol # diretório onde os artigos serão salvos sleeptime=10 # tempo padrão do comando "sleep" antes de usar o comando "curl" (para evitar flood) # Criação dos diretórios principais: # Caso o diretório $dir exista, ele será REcriado. # Se não, ele será criado. if [ -d "$dir" ]; then rm -rf "$dir" mkdir "$dir" else mkdir "$dir" fi # Caso o diretório $dir2 exista, ele será REcriado. # Se não, ele será criado. # Inclui subdiretórios (HTML e PDF) if [ -d "$dir2" ]; then rm -rf "$dir2" mkdir $dir2 mkdir $dir2/PDF mkdir $dir2/HTML else mkdir $dir2 mkdir $dir2/PDF mkdir $dir2/HTML fi # Buscar pelo usuário do qual se quer fazer o backup: # Pergunta o nome do usuário clear echo "Deseja salvar os artigos de que usuário?" echo read entrada clear # Da entrada do usuário acima pega-se apenas a primeira palavra # Ex.: # Se o usuário digitar "Xerxes Lins" # Será usado apenas "Xerxes" login=$(echo " $entrada " | awk '{print $1;}') # Um alerta sobre o usuário removido if [ $login = "removido" ]; then echo "Usuário removido herda TODOS os artigos dos usuários que foram removidos, ou seja, são muitos artigos!" echo "Para continuar, pressione Enter. Para sair use Ctrl+C." read tecla_user fi echo "Buscando usuário $login no Viva o Linux..." # Define o endereço completo da página do usuário do qual será feito a cópia dos artigos pagina_do_usuario=http://www.vivaolinux.com.br/~$login # Arquivo descartável para verificar se o usuário existe no Viva o Linux FILE=$dir/.saida_usuario.txt # Joga a saída do Curl no arquivo descartável definido acima curl --silent $pagina_do_usuario > $FILE # Se encontrar o usuário (ou seja, se o $FILE não for vazio), o script continua, se não ele encerra. if [[ -s $FILE ]] ; then echo "Usuário $login encontrado." sleep 2 else echo "Usuário não encontrado!" sleep 1 echo "Saindo..." exit 1 fi ; # Quantas páginas há no índice de artigos do usuário? # Arquivo descartável para verificar se o usuário publicou artigos FILE=$dir/.saida_indice.txt curl --silent "http://www.vivaolinux.com.br/artigos/userview.php?login=$login" > $FILE tem_artigo=$(cat $FILE | grep '<tr><td><b>Nenhum artigo foi encontrado.</b></td></tr>') # Se não achar o índice de artigos, encerra o programa if [[ -z $tem_artigo ]] ; then echo "$login publicou artigos no Viva o Linux!" sleep 2 else echo "Usuário $login não publicou artigos no Viva o Linux." sleep 1 echo "Saindo..." exit 1 fi ; # Captura da página do índice, as linhas referentes às opções de páginas # (vai capturar todas menos uma, a SELECTED) echo "Aguarde enquanto dados são coletados..." sleep $sleeptime curl --silent "http://www.vivaolinux.com.br/artigos/userview.php?login=$login&&pagina=1" | sed '1,/<option value=1 SELECTED>1/ d' | sed '/<\/select>/,$ d' > $FILE # Conta quantas linhas tem no arquivo saida_indice.txt num_pag=$(awk '{x++} END {print x}' $FILE) # Incrementa 1 à contagem para ficar certo já que # A primeira linha sempre é excluída let num_pag++ # Pega da última linha do arquivo, o útimo numero da página # que corresponde ao total de páginas do índice de artigos #num_pag=$(cat $dir/saida_indice.txt | tail -1 | sed 's/<.*>//g') #num_pag=1 # Define outro número de páginas para fins de teste # Listar todos os artigos: # Loop para verificar em cada uma das páginas do índice for ((i=1;i<=$num_pag;i++)); do echo "Coletando informações da página $i de $num_pag do índice de artigos de $login..." # Extrai o conteúdo da página do índice e joga em ".extração_da_pagina.txt" # para poder "garimpar" os links depois sleep $sleeptime curl --silent "http://www.vivaolinux.com.br/artigos/userview.php?login=$login&&pagina=$i" > $dir/.extracao_da_pagina.txt # Garimpando os links... # Este comando extrai todos os links dos artigos de dentro do arquivo ".extração_da_pagina.txt" # E envia para o arquivo ".links" para criar uma lista com todos os links cat $dir/.extracao_da_pagina.txt | egrep '^<h1><a href="/artigo/' | sed 's/^[\<h1\>\<a\ href\="]*[/]//; s/[">].*$//' >> $dir/.links.txt done # Pega o número de linhas do arquivo ".links.txt", ou seja, o número de artigos que o autor tem! num_de_artigos=$(awk '{x++} END {print x}' $dir/.links.txt) echo echo "Artigos encontrados:" echo sleep 2 # Lista os artigos cat $dir/.links.txt | sed 's/^artigo\///g' | sed 's/.$//' echo echo "$login publicou $num_de_artigos artigos no Viva o Linux." sleep 5 # Salvando os artigos: # loop para salvar artigos um por um. for ((i=1;i<=$num_de_artigos;i++)); do # seleciona uma a uma as linhas do arquivo ".links.txt", quer dizer... # seleciona um por um o artigo que será salvo caminho=$(head -$i $dir/.links.txt | tail -1) # /artigo/nome-do-artigo/ # fica: nome-do-artigo nome_artigo=$(echo $caminho | sed 's/^artigo\///g' | sed 's/.$//') echo "Preparando-se para salvar o artigo número $i de um total de $num_de_artigos artigos... " sleep 5 x=1 # número da página do artigo, começa sempre na primeira (1) proxima_pagina=sim # por padrão considera que o artigo tem a próxima página # Loop para repetir o procedimento em cada página do artigo while [ "$proxima_pagina" = 'sim' ]; do echo "Salvando página $x..." sleep $sleeptime # Joga o conteúdo da página do artigo para extração curl --silent "http://www.vivaolinux.com.br/$caminho?pagina=$x" > $dir/.extracao_da_pagina2.txt # Aqui começa a extração das informações... # Título do artigo titulo_artigo=$(cat $dir/.extracao_da_pagina2.txt | egrep '^<title>' | sed 's/<title>Linux://g' | sed 's/<.title>//g') # Descrição do artigo descricao_artigo=$(cat $dir/.extracao_da_pagina2.txt | egrep '^<meta name="description" content="' | sed 's/<meta name="description" content="//g' | sed 's/">//g') # Conteúdo que será o corpo da página html cat $dir/.extracao_da_pagina2.txt | sed '1,/^<div id=HOTWordsTxt name=HOTWordsTxt>/ d' | sed '/^<span class="floatleft"/,$ d' >> $dir/.corpo_html.txt # Incrementa $x (número da página) para passar para a próxima página do artigo (loop) let x++ proxima_pagina=nao # para sair do loop # Mas caso exista outra página (linha de código abaixo verifica isso) valor muda para "sim" e o loop continua. grep -qs 'gina >></a></span>' $dir/.extracao_da_pagina2.txt && proxima_pagina=sim done # Criação da página HTML: # Joga o conteúdo que vai ser o corpo da página HTML na variável $corpo_html # Sendo que faz isso dando uma organizada no conteúdo. # Por exemplo: colocanado quebras de linhas para separar as imagens dos textos. # Lembrando que pode não funcionar algumas vezes devido a formatação do moderador. corpo_html=$(cat $dir/.corpo_html.txt | sed 's/><\/div>/><\/div><br\/><br\/>/g' | sed 's/^<div /<br\/><br\/><div /g') # Cria a página HTML echo "<HTML><HEAD><TITLE> $nome_artigo </TITLE></HEAD><BODY> <h1>$titulo_artigo</h1> <br/><br/> Autor: <em>$login (www.vivaolinux.com.br/~$login) <br/><br/> <strong>$descricao_artigo</strong> </em> <br/><br/> $corpo_html </BODY></HEAD>" > $dir2/HTML/$nome_artigo.html # Converte para PDF echo "Convertendo artigo para PDF..." wkhtmltopdf -q $dir2/HTML/$nome_artigo.html $dir2/PDF/$nome_artigo.pdf echo "Feito!" echo "Artigo salvo!" echo # Apaga arquivo descartável que recebeu o corpo da página HTML para receber conteúdo de outra página rm $dir/.corpo_html.txt done echo Os artigos foram movidos para $dir2! echo "IMPORTANTE: os arquivos convertidos em PDF podem apresentar defeitos devido limitações do KwHTMLtoPDF!"
Perifericos Hardware na terminal
Script de firewall para evitar ataques comuns
Script simples para pegar informações sobre placa de rede
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
É cada coisa que me aparece! - não é só 3% (3)
Melhorando a precisão de valores flutuantes em python[AJUDA] (5)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta