tirinha-0.5.sh : Baixa as tirinhas da Ilustrada da Folha de São Paulo

Publicado por /dev/movebo 01/07/2009

[ Hits: 7.465 ]

Homepage: http://devmovebo.blogspot.com

Download tirinha-0.5




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

  



Esconder código-fonte

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

Scripts recomendados

Teste compatativo entre discos e/ou partições

Jogar Guitar Hero Online no controle

Assistindo vídeo na TV e controlando no monitor com o xine

Simples Verificador de E-mail Gmail

e17 Uptade


  

Comentários
[1] Comentário enviado por feraf em 01/07/2009 - 19:34h

Parabéns! Muito bom seu Script! Vou usá-lo para treinar meus conhecimentos de Shell Script.

Fiz um script interessante esses dias também, para renomear arquivos, vou publicá-lo aqui quando estiver pronto.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts