Dizinha Linux
Ajude-Nos
Agradecimentos
Changelog
Download
Fórum
Screenshots

Projetos Internos
MPDizinha
PainelX

Artigo
Criando um TEMA no Blanes
Jogos Antigos no Linux?
Baixar fotos de um site?
Organizar seus textos!

Manual
Problema no BOOT!

Manual Remaster

Projetos de Amigos
CDI-AL
Kalango Linux
KernelBR
Kurumin Linux
LiveLinux
NeoDizinha
PainelX
Ralobao
UnixGirls
ZappWM


Shell Script para baixar fotos de um site???
1. Introdução
2. Entendendo a lógica 'básica' e criando um script
3. Arrumando Problema e melhorando o script
4. Faça o script detectar o numero total de fotos sozinho

ATENÇÃO! Esse texto serve apenas como "guia" de como programar em Shell Script. Não devo ser responsabilizado pelo mau uso do script!

1.Introdução
Um dos modos mais simples de baixar um site é usar programas que copiam TOTALMENTE o site. ( O wget tem a opção de fazer isso. )
A desvantagem de fazer isso é que você praticamente irá baixar muita coisa inútil e que pode ser evitada!

Outro modo é criar um shell script para fazer o serviço para você.
As vantagems de usar um shell script:
1. você pode "limitar" o que vai ser baixado
2. Pode fazer o próprio script "organizar" os arquivos para você
3. Caso for baixar arquivos compactados, pode mandar o script já descompactar os arquivos automaticamente.

2. Entendendo a lógica 'básica' e criando um script
Vamos imaginar que você quer baixar "wallpapers". Bons sites, geralmente, mantém os arquivos organizados de uma forma lógica.
Essa lógica é simples, cada "arquivo" recebe um nome composto por uma palavra fixa e um número variável!

Parece assustador falando assim, mas é simples. Se vamos baixar wallpapers geralmente eles tem o nome "fixo" com o nome da categoria e o número começa do número 1. Então os "wallpapers" da seção carros seria:

carro1.jpg
carro2.jpg
carro3.jpg
carro4.jpg
...

Então fazer um script para baixar todos "wallpapers" da seção carros é simples.
Primeiro temos que ver onde estão salvos os "wallpapers", então abra um dos wallpapers no navegador aperte com o botão direito nele e clique em "propriedades da imagem" ( pode haver uma pequena alteração no nome do menu de navegador para navegador )

Ele irá mostrar o endereço da imagem. Vamos imaginar que ele mostrou o seguinte endereço:

http://www.wallpapersBLABLABLA.com/carro/carro1.jpg

Então basta fazer um shell script com um "FOR" para copiar todos arquivos de carro, como o exemplo:

for ((i=INICIO;i<=FIM;i++))
do
wget http://www.wallpapersBLABLABLA.com/carro/carro$i.jpg
done



onde:
INICIO -> é de onde ele irá começar a baixar os arquivos ( se você baixou carro1.jpg até carro20.jpg, pode alterar inicio para 21 )
FIM -> é até onde irá baixar os arquivos ( se o ultimo wallpaper for carro90.jpg, altere FIM para 90 )

Como funcionar o script?
1. Você dá um valor inicial para variável "i" ( você dá esse valor trocando a palavra "INICIO" pelo valor adequado )
2. O script executa todos comandos que estão entre "do" e "done".
3. Depois de executar os comandos que estão entre "do" e "done", o script soma "1" ao valor atual de "i" ( se "i" fosse "10", fica sendo "11" )
4. O script verifica se o "i" é menor ou igual que o valor colocado em "FIM"
Se o valor FOR MENOR OU IGUAL ao valor em FIM -> O script executa o que está entre "do" e "done"
Se o valer NÃO FOR MENOR OU IGUAL ao valor em FIM -> O comando "for" pára de ser executado!

3. Arrumando Problema e melhorando o script
Alguns sites colocam um "0" em números menor que "10". Então o que antes era:
carro1.jpg
carro2.jpg
...

Nesses sites ficam:
carro01.jpg
carro02.jpg
...

Como arrumar isso?
Simples, basta "verificar" se "i" é menor que "10" se ele for altere a variável para "0" + i

if [ $i -lt 10 ]
then
n="0$i"
else
n="$i"
fi

Esse script faz o seguinte:
SE "i" for menor que "10" -> ele dá o valor de "n" para "0" + i ( ou seja: se "i" for 5, "n" fica sendo "05" )
SE "i" não for menor que "10" -> "n" fica sendo igual a "i" ( ou seja: se "i" igual a 90, "n" fica sendo "90" )

O script inteiro ficará:

for ((i=INICIO;i<=FIM;i++))
do

if [ $i -lt 10 ]
then
n="0$i"
else
n="$i"
fi

wget http://www.wallpapersBLABLABLA.com/carro/carro$n.jpg
done

4. Faça o script detectar o numero total de fotos sozinho
Como fazer um script detectar por sí só quantas fotos tem numa seção de um site?

Uma das idéias é fazer ele baixar todas fotos em sequencia, e cada vez que baixar uma foto verificar se deu erro na hora de baixar, ou não!

Se deu erro é porque todas as fotos da sequencia já foram baixadas!
( algumas vezes pode ser que deu erro porque o servidor não fez a comunicação com seu computador )

Então vamos fazer um script para baixar todas as fotos sem agente precisar saber o numero total de fotos!

for ((i=1;i<=500;i++))
do

if [ $i -lt 10 ]
then
n="0$i"
else
n="$i"
fi

wget http://www.wallpapersBLABLABLA.com/carro/carro$n.jpg

if ! [ -s "carro$n.jpg" ]
then

sudo rm -f carro$n.jpg
exit 0

fi

done


Repare que em "for" coloquei "i<=500" coloquei esse valor porque achei impossível um site ter 500 fotos!

Para que serve o 'if ! [ -s "carro$n.jpg" ]' esse comando verifica se o arquivo existe. Se o arquivo não existe, quer dizer que ele não existe para ser baixado. Logo todas as fotos já foram baixadas!
Então é dado o "exit 0" para finalizar o arquivo!