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

Publicado por /dev/movebo 01/07/2009

[ Hits: 7.502 ]

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

Converter arquivos CBR para PDF

Jogo campo minado em Shell Script

Criar pacote Slackware

Instalador automático nVIDIA para Debian

Script simples para ripar CDs de áudio em mp3 com uso do CDDB para nomear as faixas.


  

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