Backup dos artigos do VOL

Publicado por Xerxes (última atualização em 31/01/2013)

[ Hits: 5.233 ]

Homepage: -

Download volbackup.sh




Salva todos os artigos de um usuário qualquer do Viva o Linux em HTML e em PDF (convertido). Precisa do wkhtmltopdf instalado.

  



Esconder código-fonte

#!/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!"

Scripts recomendados

Script de firewall para evitar ataques comuns

Criar servidor, montar cliente e verificar montagens no NFS (Gentoo)

Calculadora em shell script

Pesquisa recursiva

Talk Weather - Anúncio do tempo e temperatura em voz sintetizada


  

Comentários
[1] Comentário enviado por fabio em 31/01/2013 - 09:29h

Muito bom mesmo, parabéns!

[2] Comentário enviado por igor_rocha em 01/02/2013 - 01:04h

Show de bola, muito critativo!

Parabéns!!

[3] Comentário enviado por m4iir1c10 em 11/02/2013 - 18:07h

Deu pau !!!!

Aqui esta a saida do teminal, estou usando o Ubuntu 12.04 x86_64 3.2.0-37-generic tenho o wkhtmltopdf 0.9.9 instalado

Buscando usuário m4iir1c10 no Viva o Linux...
Downloads/volbackup.sh: 120: Downloads/volbackup.sh: [[: not found
Usuário não encontrado!
Saindo...

Quando eu sair do trabalho vou tentar em casa no Archbang

[4] Comentário enviado por xerxeslins em 11/02/2013 - 18:32h


[3] Comentário enviado por m4iir1c10 em 11/02/2013 - 18:07h:

Deu pau !!!!

Aqui esta a saida do teminal, estou usando o Ubuntu 12.04 x86_64 3.2.0-37-generic tenho o wkhtmltopdf 0.9.9 instalado

Buscando usuário m4iir1c10 no Viva o Linux...
Downloads/volbackup.sh: 120: Downloads/volbackup.sh: [[: not found
Usuário não encontrado!
Saindo...

Quando eu sair do trabalho vou tentar em casa no Archbang


vou verificar depois também.

[5] Comentário enviado por xerxeslins em 12/02/2013 - 01:22h


[3] Comentário enviado por m4iir1c10 em 11/02/2013 - 18:07h:

Deu pau !!!!

Aqui esta a saida do teminal, estou usando o Ubuntu 12.04 x86_64 3.2.0-37-generic tenho o wkhtmltopdf 0.9.9 instalado

Buscando usuário m4iir1c10 no Viva o Linux...
Downloads/volbackup.sh: 120: Downloads/volbackup.sh: [[: not found
Usuário não encontrado!
Saindo...

Quando eu sair do trabalho vou tentar em casa no Archbang


Quando fiz o script eu estava no Slackware se não me engano... e não no Ubuntu. Com essa informação e com o Google descobri a causa do problema e ela não está no código e sim na distribuição Ubuntu. Por algum motivo Ubuntu usa DASH ao invés de BASH mesmo quando se diz que é um executável de BASH.

Coisas loucas do ubuntu!

Por isso para quem precisar usar este script no Ubuntu, é preciso, ANTES, usar o comando:

$ sudo dpkg-reconfigure dash

Ele vai perguntar se quer usar o DASH. Deve-se escolher NÃO. Depois disso pode executar o script sem problema.

Executei no Ubuntu após o comando que eu falei e saiu assim:

Buscando usuário m4iir1c10 no Viva o Linux...
Usuário m4iir1c10 encontrado.
m4iir1c10 publicou artigos no Viva o Linux!
Aguarde enquanto dados são coletados...
Coletando informações da página 1 de 4 do índice de artigos de m4iir1c10...
Coletando informações da página 2 de 4 do índice de artigos de m4iir1c10...
Coletando informações da página 3 de 4 do índice de artigos de m4iir1c10...
Coletando informações da página 4 de 4 do índice de artigos de m4iir1c10...

Artigos encontrados:

Criando-video-com-caracteristicas-de-DVD
SSH-Blindado-Protegendo-o-seu-sistema-de-ataques-SSH
MEncoder-Criando-Programa-Grafico-Para-Conversao
5-comandos-que-ninguem-nunca-deve-executar-no-Linux
GRUB-com-imagens-aleatorias-e-KDM-com-video-de-fundo
Proteja-seu-website-ou-pagina-html-com-encriptacao
Bug-afeta-todas-as-distros
Raios-de-luz-explodindo-atras-do-texto
Letras-brilhantes-com-Gimp
Instalando-e-configurando-um-dock-igual-ao-Mac-Leopard-no-KDE
Protecao-de-tela-ou-video-como-papel-de-parede
Como-controlar-todas-as-midias-da-sua-casa-somente-com-1-controle-remoto-e-1-Linux
Instalando-Beryl-no-Windows-XP
Rode-o-Blackbox-no-Windows-XP
Rode-Linux-no-seu-iPod
Codificacao-e-decodificacao-entre-ASCII-hexadecimal-e-unicode
Maquina-Enigma-e-encriptacao-em-XOR
Colocando-Windows-Linux-e-Mac-Os-X-em-um-mesmo-PC
Enfeite-o-LILO-com-uma-imagem-de-seu-gosto

m4iir1c10 publicou 19 artigos no Viva o Linux.



[6] Comentário enviado por m4iir1c10 em 12/02/2013 - 20:08h

Excellent !!!!! Muito bom mesmo, eu rodei sem problema no Arch e seguindo suas instruções estou rodando agora no Ubuntu. Muito bom mesmo.
Agora uma sugestão, eu fiz os downloads dos meus e dos seus artigos e todos foram parar em um local, que tal separar os artigos por usuários? outra coisa também que pode aderir funcionalidade e a seleção de artigos por datas, eu fiz os downloads dos seus artigos e peguei coisa antiga do tipo "Introdução ao Fedora 5" e dos meus artigos "Lilo com imagem de fundo".

Eu sei que o proposito do script e para backup assim sendo seria bom fazer o download completo, porem com seleção de data tipo ano de publicação, assim evitamos tempo e bytes de download perdido :)

[7] Comentário enviado por xerxeslins em 12/02/2013 - 21:11h


[6] Comentário enviado por m4iir1c10 em 12/02/2013 - 20:08h:

Excellent !!!!! Muito bom mesmo, eu rodei sem problema no Arch e seguindo suas instruções estou rodando agora no Ubuntu. Muito bom mesmo.
Agora uma sugestão, eu fiz os downloads dos meus e dos seus artigos e todos foram parar em um local, que tal separar os artigos por usuários? outra coisa também que pode aderir funcionalidade e a seleção de artigos por datas, eu fiz os downloads dos seus artigos e peguei coisa antiga do tipo "Introdução ao Fedora 5" e dos meus artigos "Lilo com imagem de fundo".

Eu sei que o proposito do script e para backup assim sendo seria bom fazer o download completo, porem com seleção de data tipo ano de publicação, assim evitamos tempo e bytes de download perdido :)


Beleza! Sugestões anotadas! :D

[8] Comentário enviado por removido em 16/02/2013 - 12:48h

Rapaz, mão na roda pros moderadores!
Muito bom, Xerxes!


Uma dúvida, Xerxes: é possível escolher para download artigos em espera, googlados e/ou aprovados?
Como poderíamos fazer isso?

Pergunto porque se preciso baixar um artigo seu pra moderar, terei que baixar os "trocentos" (rsrs) que você já publicou?

* E olha, quero um pra dicas também! rs

[9] Comentário enviado por xerxeslins em 16/02/2013 - 19:19h


[8] Comentário enviado por izaias em 16/02/2013 - 12:48h:

Rapaz, mão na roda pros moderadores!
Muito bom, Xerxes!


Uma dúvida, Xerxes: é possível escolher para download artigos em espera, googlados e/ou aprovados?
Como poderíamos fazer isso?

Pergunto porque se preciso baixar um artigo seu pra moderar, terei que baixar os "trocentos" (rsrs) que você já publicou?

* E olha, quero um pra dicas também! rs


Olá Izaias!

Esse script aí só salva os artigos que já foram publicados. Os que estão em espera, etc ele não salva.

Talvez eu faça um para salvar as dicas também... mas nada certo por enquanto =)


[10] Comentário enviado por removido em 16/02/2013 - 20:52h

Ok, ok! De quanto estamos falando? rs

É isso aí!
Abração.

[11] Comentário enviado por removido em 17/05/2014 - 11:12h

@xerxeslins

muito bacana esse seu script, funcionou perfeitamente no Slackware!

Deveria ser um script oficial aqui no VOL, muito útil pra quem quer salvar um ou vários artigos em um pendrive ou cd.

Seria bacana adaptá-lo para salvar dicas também! Fica a sugestão...

Abraços

[12] Comentário enviado por xerxeslins em 03/04/2016 - 08:01h

Se tornou obsoleto depois de modificações na estrutura do VOL.

Quando tiver tempo tentarei fazer outro.
--
https://goo.gl/uu8OUX


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts