Fala galera!
Vamos falar hoje de uma técnica muito legal que você pode utilizar tanto para uso em um projeto pessoal quanto para uma necessidade específica.
Vou tentar exemplificar: em algum momento você precisou salvar várias imagens de um mesmo site - respeitando os direitos de cópia e uso - e precisou ficar baixando imagem por imagem? Pois bem, o que faremos aqui é uma forma de automatizar esses downloads deixando a tarefa mais rápida e fácil.
Logicamente, o código varia de site para site, então o que compartilharei com vocês é apenas um exemplo simples. Caso tenha interesse em aplicar em algo mais robusto, por favor, compartilhe com a gente :).
Vamos lá! Para fazer esse exemplo para vocês, vou usar um site simples, porém muito conhecido o www.pudim.com.br. Se você não conhece, vale a pena conferir rsrsrs. E também utilizaremos da técnica Web Scraping, onde já falamos em outros posts.
Bom, além de criar a classe que irá receber o código, é muito interessante que você dê uma olhada na estrutura da página, analisando onde estão - em quais tags, classes e ids - das imagens que deseja baixar. Veja como está localizada a imagem que baixaremos:
Nosso código inicial será para encontrar a imagem no site e obter a url/nome do arquivo para que possamos efetuar o download.
//url do site onde está a imagem
public static final String SITE = "http://www.pudim.com.br";
//diretório onde a imagem será salva
public static final String PATH = "E:\\imagens\\";
public static void main(String[] args) {
try{
Document doc = Jsoup.connect(SITE).timeout(0).get();
String img = doc.select("div.image").select("img").attr("src");
//envia o nome da imagem no site ao método
downloadImage(img);
}catch(Exception ex){
ex.printStackTrace();
}
}
Uma atenção especial para o método timeout(), pois é responsável por definir o tempo de conexão e leitura do site. Por padrão - caso seja omitido o método - o tempo máximo é de 3000 milisegundos (3 segundos), se definir o timeout com 0, ele será tratado como timeout infinito. Quando o tempo limite for excedido, será lançada uma exceção IOException.
//definido timeout 0 Document doc = Jsoup.connect(SITE).timeout(0).get();
Temos um método chamado downloadImage(String img) que será responsável por baixar a imagem e salvar no diretório de destino.
private static void downloadImage(String img) throws IOException{
//nome do arquivo que será salvo no pc
//nesse caso, adiciona a extensão
String nome = "imagem.jpg";
// url = http://www.pudim.com.br/pudim.jpg
URL url = new URL(SITE+"/"+img);
InputStream input = url.openStream();
OutputStream output = new BufferedOutputStream(new FileOutputStream(PATH + nome));
for(int i; (i = input.read()) != -1;){
output.write(i);
}
//encerra as conexões
output.close();
input.close();
}
Após o download, a imagem estará disponível no diretório informado.
Essa foi a dica de hoje, espero que tenham gostado. Se tiver alguma informação a acrescentar ou alguma curiosidade para compartilhar, fale para nós nos comentários.
Até mais!
;)
Nenhum comentário:
Postar um comentário