tirinha.sh
Publicado por /dev/movebo 01/07/2009
[ Hits: 6.374 ]
Homepage: http://devmovebo.blogspot.com
movebo@navi: ~$ tirinha-0.4
Objetivo: baixa as tirinhas do site da Folha de São Paulo
Utilização: tirinha-0.4 [ OPÇÃO ]...
Opções:
-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
#!/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 )
###########################################################################
#####################
# 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 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
DIR=$DIRBASE/$( date +%F )
[ -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
FILE=$DIR/index.html
echo "<html><meta charset=utf8><body>" > $FILE
echo "<h1>$( date +"%A, %d de %B de %Y")</ h1>" >> $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
if [ $html -eq 1 ] ; then
DESC=$( echo "$NOMES" | grep "$name" | awk '{ print $2" "$3" "$4 }' )
echo "<h2>$DESC</ h2><p>" >> $FILE
echo "<img src=\"$DEST\" /></ p><br />" >> $FILE
fi
done
if [ $html -eq 1 ] ; then
echo "</ body><a href="http://devmovebo.blogspot.com"></ a></ 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
Shoot - programinha para tirar screenshot pelo prompt
User manager - o gerenciador de usuários para Slackware Linux
Configuração do Iptables em modo texto.
Instalação do winehq-staging e do Lutris em Debian 11 (Bullseye) para o Origin
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Como instalar o repositório do DBeaver no Ubuntu
Como instalar o Plex Media Server no Ubuntu
Digitando underscore com "shift" + "barra de espaços"
Como ativar a lixeira e recuperar aquivos deletados em um servidor Linux
Como mudar o nome de dispositivos Bluetooth via linha de comando
O programa assinador digital (5)
Assinador JNLP do Site Portal da Nota Fiscal Eletrônica (5)









