Backup dos artigos do VOL
Publicado por Xerxes (última atualização em 31/01/2013)
[ Hits: 5.215 ]
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!"
Script para trocar textos em arquivos
Extrair ID de jogos de PS1 e PS2
adicionar um gerenciador de janelas a lista do kdm
Gerar TinyURL (URL curta) para postar no Twitter
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
Recuperar arquivos de HD em formato RAW usando Linux (0)
SysAdmin ou DevOps: Qual curso inicial pra essa área? (0)
Melhores Práticas de Nomenclatura: Pastas, Arquivos e Código (3)
[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