tirinha-0.5.sh : Baixa as tirinhas da Ilustrada da Folha de São Paulo
Publicado por /dev/movebo 01/07/2009
[ Hits: 7.752 ]
Homepage: http://devmovebo.blogspot.com
Utilização: tirinha-0.5 [ OPÇÃO ]...
Baixa as tirinhas do site da Folha de São Paulo
-n, --name Define o nome do cartunista
-d, --date Informe o ano e o mês no formato AAAA[MM[DD]]
-t, --today Baixa as tirinhas do dia
-H, --html Cria e abre o arquivo html com as tirinhas do dia
-h, --help Exibe esta tela de ajuda
-V, --version Mostra a versão do programa
Obs.: Algumas melhorias, sobretudo na página html: ./tirinha-0.5 -H
#!/bin/bash
#
###########################################################################
# tirinha
#
# Função : Baixa as tirinhas do site da Folha de São Paulo
# Autor : /dev/movebo
# (C) Copyleft 2009 /dev/movebo
# dev.movebo@gmail.com
# http://devmovebo.blogspot.com
# Versão 0.1 : Baixa em diretórios ordenados por ano
# Versão 0.2 : Aceita datas no formato ANO, ANO/MES e ANO/MES/DIA
# Versão 0.3 : Baixa apenas os quadrinhos de hoje ( -t )
# Versão 0.4 : Cria um arquivo html com os quadrinhos de hoje ( -H -t )
# Versão 0.5 : Melhorias na página html
###########################################################################
#####################
# FLAGS e Variáveis #
#####################
# URL das imagens da Folha de São Paulo
URL="http://www1.folha.uol.com.br/fsp/images"
DIRBASE=~/tirinha
mes=0 # Inicializa mês com 0
dia=0 # Inicializa dia com 0
today=0 # Flag para baixar apenas as tirinhas do dia de hoje
html=0 # Flag para produzir e abrir um arquivo html
dl_a=0 # Baixar todo o ano
dl_am=0 # Baixar todo o mês de um certo ano
dl_amd=0 # Baixar apenas determinada data
# Cartunistas válidos
NOMES="
adao Adão Iturrasgarai
ange Angeli
caco Caco Galhardo
glau Glauco
niqu Níquel Náusea
pira Piratas do Tietê"
# Mesagem de erro padrão
MSG="Utilização: $( basename $0 ) [ OPÇÃO ]...
Baixa as tirinhas do site da Folha de São Paulo
-n, --name Define o nome do cartunista
-d, --date Informe o ano e o mês no formato AAAA[MM[DD]]
-t, --today Baixa as tirinhas do dia
-H, --html Cria e abre o arquivo html com as tirinhas do dia
-h, --help Exibe esta tela de ajuda
-V, --version Mostra a versão do programa
"
###########
# FUNÇÕES #
###########
# Limpar
function limpa()
{
rm -f 404.html # Apaga os arquivos de página inexistente
}
# Validar Data
function data_valida()
{
# Se o ano for maior que o atual, então é inválido
if [ $ano -gt `date +%Y` ] ; then
echo "$(basename $0): ano inválido $ano"
exit 3
# Se o ano for o atual e o mês for maior que este, é inválido
elif [ $ano -eq `date +%Y` ] && [ $mes -gt `date +%m` ] ; then
echo "$(basename $0): data inválida $mes/$ano"
exit 3
# Se a data informada for maior que a data atual, é inválida
elif [ $ano -eq `date +%Y` ] && [ $mes -eq `date +%m` ] && [ $dia -gt `date +%d` ] ; then
echo "$(basename ${0}): data inválida $dia/$mes/$ano"
exit 3
fi
}
# Pegar e verificar a data
function checkdate()
{
# Se nenhuma data ou ano tiver sido especificado, exiba a mensagem de erro
if [ -z "$date" ] ; then
echo "`basename $0`: nenhuma data foi especificada"
echo "Digite uma data no formato AAAA[MM[DD]]"
exit 2
# Se houver uma data, verifique se seu comprimento é válido
else
# Serão aceitos 5, 7 ou 9 caracteres:
# ANO = 4 + \n = 5
# ANO MES = 6 + \n = 7
# ANO MES DIA = 8 + \n = 9
while [ `echo $date | wc -m ` -ne 5 ] && \
[ `echo $date | wc -m ` -ne 7 ] && \
[ `echo $date | wc -m ` -ne 9 ]
do
echo -n "Digite uma data no formato AAAA[MM[DD]]: "
read date
done
# Se saímos do loop é porque o tamanho é válido
# Parseie o conteúdo
if [ `echo $date | wc -m` -eq 5 ] ; then
ano=$date
dl_a=1 # Flag para baixar todo o ano
echo "$( basename $0 ): baixando todo o ano de $ano"
elif [ `echo $date | wc -m` -eq 7 ] ; then
ano=` echo $date | cut -c 1-4 `
mes=` echo $date | cut -c 5-6 `
dl_am=1 # Flag para baixar todo um mês
echo "$( basename $0 ): baixando o ano $ano e o mês $mes"
elif [ `echo $date | wc -m` -eq 9 ] ; then
ano=` echo $date | cut -c 1-4 `
mes=` echo $date | cut -c 5-6 `
dia=` echo $date | cut -c 7-8 `
dl_amd=1 # Flag para baixar um dia preciso
echo "$( basename $0 ): baixando a data $dia/$mes/$ano"
fi
fi
echo "$( basename $0 ): Aguarde..."
}
# Função baixar
function baixar()
{
# Exiba a mensagem "Download ARQUIVO"
echo -n "$( basename $0 ): download $SRC: "
if [ -f "$DIR/$DEST" ] ; then
echo "arquivo presente, nada a fazer"
else
wget -c ${URL}/$SRC -q # Baixar em silêncio com o wget
# continuar se o arquivo estiver incompleto
if [ -f $SRC ]; then # Vê se o arquivo existe agora
echo "OK" # Se sim, diga OK
mv $SRC $DIR/$DEST # e mova-o para o diretório com autor/ano
else
echo "NOT OK" # Do contrário diga NOT OK
limpa # Em caso de erro o wget baixa um 404.html
# vamos removê-lo
fi
fi
}
function checkname()
{
# Verifica se algum nome foi escolhido
if [ -z "$name" ]; then
echo "$( basename $0 ): faltando nome"
echo "Use um dos nomes abaixo$NOMES"
exit 1
fi
# Verifica se o nome informado é um nome válido
testname=$( echo "$NOMES" | awk '{ print $1 }' | grep "$name" )
if [ "$testname" != "$name" ] ; then
echo "$( basename $0 ): nome $name inválido"
echo "Use um dos nomes abaixo$NOMES"
exit 1
fi
DESC=$( echo "$NOMES" | grep "$name" | awk '{ print $2" "$3" "$4 }' )
echo "$( basename $0 ): baixando $DESC"
}
function getbrowser()
{
# Verifica o navegador presente
if type "firefox" > /dev/null 2>&1 ; then BROWSER="firefox"
elif type "epiphany" > /dev/null 2>&1 ; then BROWSER="epiphany"
elif type "konqueror" > /dev/null 2>&1 ; then BROWSER="konqueror"
elif type "opera" > /dev/null 2>&1 ; then BROWSER="opera"
else echo "Navegador não encontrado."; exit 1
fi
}
##########################
# Command Line Interface #
##########################
# Verifica se algum argumento foi digitado, do contrário exiba a mensagem de erro e saia.
if [ -z "$1" ] ; then
echo "$MSG"
exit 1
fi
# Tratamento das opções da linha de comando
while [ -n "$1" ]
do
case "$1" in
-n | --name )
shift
name=$1
;;
-d | --date )
shift
date=$1
;;
-t | --today )
today=1
;;
-H | --html )
today=1
html=1
;;
-h | --help )
echo "$MSG"
exit 0
;;
-V | --version )
echo -n "$( basename $0 )"
grep '^# Versão' "$0" | tail -n1 | cut -d: -f1 | tr -d \#
exit 0
;;
* )
echo "$( basename $0 ): opção inválida $1"
exit 1
;;
esac
shift # O argumento atual foi processado, faça a fila andar
done
########
# MAIN #
########
# Este if baixa apenas os quadrinhos do dia
if [ $today -eq 1 ] ; then
# Diretório onde armazenar os quadrinhos no formato ANO-MES-DIA
DIR=$DIRBASE/$( date +%F )
# Se ele não existir, crie-o
[ -d $DIR ] || mkdir -p $DIR
ano=$( date +%Y )
mes=$( date +%m )
dia=$( date +%d )
# Formata o mês
[ $mes -lt 10 ] && [ `echo $mes | wc -m` -eq 2 ] && mes="0$mes"
# Formata o dia
[ $dia -lt 10 ] && [ `echo $dia | wc -m` -eq 2 ] && dia="0$dia"
# Se a flag html estiver ligada, vamos criar o arquivo html
if [ $html -eq 1 ] ; then
# Nome e localização do arquivo
FILE=$DIR/index.html
# Cabeçalho com tags html e css
echo "<html><head><style type="text/css">body {background-image:url('http://media.bigoo.ws/content/background/paper/paper_35.jpg')} img.main {position:relative; left:50px} h3.main {text-align:left; text-indent:50px}</style><title>/dev/movebo ::. tirinhas da Ilustrada</title><meta charset=utf8><b><center><font size="7" face="Times">F<font size="6">OLHA DE <font size="7">S<font size="6">ÃO PAULO</font></ center></ b><body><br><center><font size="3">$( date +"%A," | tr [a-z] [A-Z]; date +" %d de %B de %Y")</ font></ center>" > $FILE
fi
for name in $( echo "$NOMES" | awk '{ print $1 }' | paste -s )
do
# Monta o formato do arquivo como está no servidor da Folha
SRC="$name$dia$mes$ano.gif"
# Formate o arquivo racionalmente para armzenarmos localmente
DEST="$name-$ano.$mes.$dia.gif"
# Baixar o arquivo
baixar
# Se a flag estiver ligada e o arquivo existir, vamos incluí-lo no html
if [ $html -eq 1 ] && [ -f $DIR/$DEST ] ; then
DESC=$( echo "$NOMES" | grep "$name" | awk '{ print $2" "$3" "$4 }' )
echo "<h3 class="main">$DESC<br />" >> $FILE
echo "<img class="main" src=\"$DEST\" /></ h3>" >> $FILE
fi
done
if [ $html -eq 1 ] ; then
echo "</ body><hr><h6><a href="http://devmovebo.blogspot.com">(C) Copyleft 2009 /dev/movebo</ a><br /> <a href="http://www.vivaolinux.com.br/~letifer">Espaço VOL</a><br /><a href="mailto:dev.movebo@gmail.com">Fale com o autor</a></ h6></ html>" >> $FILE
getbrowser
$BROWSER $FILE
fi
else
checkname # Valide o nome do cartunista
checkdate # Valide a data informada
DIR=$DIRBASE/$name/$ano # Define diretório
[ -d $DIR ] || mkdir -p $DIR # Se ele não existir, crie-o
# Se a flag para baixar todo o ano estiver ligada...
if [ $dl_a -eq 1 ] ; then
for mes in `seq 1 12` # Para os meses de 1 a 12
do
# Se o mês for < que 10 e a variável mês tiver apenas 1 caracter
# ( além do \n ), ponha um zero na frente a título de organização
if [ $mes -lt 10 ] ; then
[ `echo $mes | wc -m` -eq 2 ] && mes="0$mes"
fi
# Loop dos dias
for ((i=1;i<=31;i++)) # Para os dias de 1 a 31
do
data_valida # Valide a data
if [ $i -lt 10 ]; then
dia="0$i" # Se o dia for < que 10
# ponha um 0 na frente
else
dia="$i"
fi
# Monta o formato do arquivo como está no servidor da Folha
SRC="$name$dia$mes$ano.gif"
# Formate o arquivo racionalmente para armzenarmos localmente
DEST="$name-$ano.$mes.$dia.gif"
# Baixar o arquivo
baixar
done
done
elif [ $dl_am -eq 1 ] ; then
# Formata o mês
if [ $mes -lt 10 ] ; then
[ `echo $mes | wc -m` -eq 2 ] && mes="0$mes"
fi
for ((i=1;i<=31;i++)) # Para os dias de 1 a 31
do
data_valida # Valida a data
if [ $i -lt 10 ]; then
dia="0$i" # Se o dia for < que 10
# ponha um 0 na frente
else
dia="$i"
fi
# Monta o formato do arquivo como está no servidor da Folha
SRC="$name$dia$mes$ano.gif"
# Formate o arquivo racionalmente para armzenarmos localmente
DEST="$name-$ano.$mes.$dia.gif"
# Baixar o arquivo
baixar
done
elif [ $dl_amd -eq 1 ] ; then
# Monta o formato do arquivo como está no servidor da Folha
SRC="$name$dia$mes$ano.gif"
# Formate o arquivo racionalmente para armzenarmos localmente
DEST="$name-$ano.$mes.$dia.gif"
# Baixar o arquivo
baixar
fi
fi
InstallDPKG - Instalando pacotes DEB no Slackware
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
[Resolvido] VirtualBox can't enable the AMD-V extension
Como verificar a saúde dos discos no Linux
Como instalar , particionar, formatar e montar um HD adicional no Linux?
Como automatizar sua instalação do Ubuntu para desenvolvimento de software.
Não consigo instalar distro antiga no virtualbox nem direto no hd (14)
Quais os códigos mais dificeis que vcs sabem fazer? (12)
systemd-resol... precisa ser reiniciado periodicamente [RESOLVIDO] (7)









