Backup dos artigos do VOL
Publicado por Xerxes (última atualização em 31/01/2013)
[ Hits: 5.291 ]
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!"
Mostra a temperatura da cidade desejada
Imprimindo várias páginas do Cifra Club automaticamente
Converter arquivos CSV para Ldif
Como gerar qualquer emoji ou símbolo unicode a partir do seu teclado
Instalar e Configurar o Slackware Linux em 2025
Como configurar os repositórios do apt no Debian 12 em 2025
Passkeys: A Evolução da Autenticação Digital
Instalação de distro Linux em computadores, netbooks, etc, em rede com o Clonezilla
Configurando o Conky para iniciar corretamente no sistema
3 configurações básicas que podem melhorar muito a sua edição pelo editor nano
Como colorir os logs do terminal com ccze
Instalação Microsoft Edge no Linux Mint 22
Como configurar posicionamento e movimento de janelas no Lubuntu (Openbox) com atalhos de teclado
firefox nao guarda meus logins nos sites (1)
Instalar debian testing (13) "por cima" do debian 12 (2)
Erro de segmentação «Segmentation fault (core dumped)» ao retornar obj... (1)