Backup dos artigos do VOL
Publicado por Xerxes (última atualização em 31/01/2013)
[ Hits: 5.458 ]
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
Script simples para pegar informações sobre placa de rede
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Como realizar um ataque de força bruta para desobrir senhas?
Como usar Gpaste no ambiente Cinnamon
Atualizando o Fedora 42 para 43
Erro no suitable vídeo mode (12)
Navegar no Firefox sem passar pelo Google [RESOLVIDO] (2)
Pergunta: Meu teclado não está respondendo direito como e consertar? (3)
Erro: Lazarus 4.2 64 no Linux Mint não entra mais apos ajustar desktop... (1)









