tirinha.sh
Publicado por /dev/movebo 01/07/2009
[ Hits: 6.170 ]
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
Script para gerar ISO do OpenBSD
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)
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Flatpak: remover runtimes não usados e pacotes
Mudar o gerenciador de login (GDM para SDDM e vice-versa) - parte 2
Estou com sede em aprender sobre o nosso querido Linux. (1)
big linux sem audio como resolver (2)
Como faz para dar um update-grub por shell script [RESOLVIDO] (3)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta