tirinha.sh

Publicado por /dev/movebo 01/07/2009

[ Hits: 6.170 ]

Homepage: http://devmovebo.blogspot.com

Download tirinha-0.4




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

  



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 )
###########################################################################


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

Scripts recomendados

Script para gerar ISO do OpenBSD

Troca de MAC

Troca de imagem da tela de bloqueio de usuário no Linux Mint MATE

Baixa, instala, configura e executa o NO-IP.

Automatizar a importação de chave privada GPG (GnuPG)


  

Comentários
[1] Comentário enviado por letifer em 04/07/2009 - 13:22h

Esta versão está desatualizada, a versão 0.5 encontra-se aqui :

http://www.vivaolinux.com.br/script/tirinha0.5.sh-Baixa-as-tirinhas-da-Ilustrada-da-Folha-de-Sao-Pau...


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts