Pesquisar imagem aleatória na internet sobre determinado assunto em Java

11 respostas Resolvido
java
Thallysson

Olá. Neste tópico eu gostaria de saber se alguém aqui conhece alguma maneira de pegar uma imagem aleatória da internet sobre determinado assunto. Eu vi alguns exemplos na internet, aparentemente é possível, mas aí vem o problema, o tal do “aleatório”. Alguém tem alguma ideia de como fazer isso?

11 Respostas

lvbarbosa

Já deu uma olhada na API de busca do Google?

https://developers.google.com/custom-search/docs/overview

Thallysson

Sim. Também encontrei vários exemplos como esse e esse, porém não é o que eu quero. Eu quero somente pegar uma imagem aleatória da internet sobre algum assunto. Gostaria de saber se há uma solução mais simples.

drsmachado

Mais simples que a solução empregada pelo google?
Difícil.
A não ser que a questão seja apenas encontrar uma imagem (arquivos com extensões como .jpg, .gif, .png, .ico, etc) e cujo nome contenha uma palavra ou expressão (onde palavra é qualquer conjunto com um ou mais caracteres e expressão é um conjunto qualquer de uma ou mais palavras).

Thallysson

Cara, eu só quero pegar uma imagem dos resultados, realmente, vou usar o Google, só que eu não encontrei nenhum exemplo “aleatório”, bem, eu posso pegar um array de uma determinada quantidade a partir dos resultados e sortear uma posição dele, porém eu não encontrei nenhum exemplo especifico sobre imagens.

JulioCesarSF

Dá pra fazer com HttpURLConnection, ai você usa alguma lib para o parse do html.

Thallysson

Não conseguiria me dar um exemplo? Pode ser com qualquer site, depois eu adapto.

JulioCesarSF
Solucao aceita
public static void main(String[] args) {
	
	String busca = new String("https://www.google.com.br/search?site=imghp&tbm=isch&source=hp&q=");
	String imagem = new String("cachorro");	
	
	URL url = null;
	
	try {
		url = new URL(busca+imagem);			
		HttpURLConnection con = (HttpURLConnection) url.openConnection();			
		con.setRequestMethod("GET");			
		con.setRequestProperty("user-agent", "Mozilla/5.0");
		
		BufferedReader bR = new BufferedReader(new InputStreamReader(con.getInputStream()));
		
		System.out.println(bR.readLine());
		
		bR.close();					
		
	} catch (MalformedURLException e) {			
		e.printStackTrace();
	} catch (IOException e) {			
		e.printStackTrace();
	}
}

Na real é que você vai ter dar uma olhada no HTML que retorna e descobrir como os endereços das imagens são formados, pelo que vi tem um javascript ali misturado.

Parse: https://jsoup.org/

Thallysson

Eu analisei o retorno, realmente, retornam imagens junto, porém eu não estou conseguindo pegar com o JSoup, o print retorna vazio:

BufferedReader bR = new BufferedReader(new InputStreamReader(con.getInputStream()));
		
String page = bR.readLine();
Document document = Jsoup.parse(page);
Element image = document.select("img").first();
String src = image.absUrl("src");
System.out.println(src);
JulioCesarSF

Sem querer ser chato, não é melhor aprender Java e depois tentar fazer alguma coisa? Senão toda vez que você precisar de algo vai postar aqui?

A API ta funcionando perfeitamente aqui…

Uma das imagens que ele listou do google:
https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQjRNuXFGxokNzgPkVU-MweX9e2OyNw2LX0gZdmofO9_BPxaKpVv4NiPI6M

Tem de reformatar o código… mas ta funcionando.

Thallysson

Se quase 2 anos programando na linguagem, e tu não pode considerar que tu “sabe” ela, quando seria?

“JulioCesarSF:

Senão toda vez que você precisar de algo vai postar aqui?

Se notar que eu estou criando muitos tópicos aqui, é porque eu fiquei offline por vários dias, e fui criando uma lista de problemas no meu projeto que não pude resolver pela falta de internet, nada mais, e eu tento o máximo possível criar tópicos interessantes, caso eu criei muitos, apenas ignore-os.
Mas, muito obrigado pela dica, meu código ficou assim:

BufferedReader bR = new BufferedReader(new InputStreamReader(con.getInputStream()));
		
		String page = bR.readLine();
		Document document = Jsoup.parse(page, "UTF-8");
		for(Element image : document.select("img")){
			String src = image.attr("src");
			System.out.println(src);
		}

Ainda tem um problema, as imagens estão menores do que o tamanho original, mas se não pode explicar, tudo bem, valeu pela ajuda.

vze

eu estou tentado fazer a mesma coisa, eu usei os códigos mas ele sempre me retorna a mesma coisa:

this.UrlImagem = "https://www.google.com.br/search?site=imghp&tbm=isch&source=hp&q="+"lua";
        
         try {
            Document document = Jsoup.connect(UrlImagem).get();
            
           this.paginaImagem = document; 
                  
        } catch (IOException ex) {
            Logger.getLogger(Busca.class.getName()).log(Level.SEVERE, null, ex);
        }
             
         for(Element image : paginaImagem.select("img")){
			String src = image.attr("src");
			System.out.println(src);
		
		}

ele me retorna isso:

/images/branding/googlelogo/2x/googlelogo_color_92x30dp.png
/tia/tia.png
data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsPSJub25lIiBkPSJNMCAwaDI0djI0SDB6Ii8+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGZpbGw9IiM0Mjg1RjQiIGQ9Ik0xOSAyMmgtN3YtMmg3Yy41NSAwIDEtLjQ2IDEtMVY1YTEgMSAwIDAgMC0xLS45OUwxMiA0VjJoN2MxLjY2IDAgMyAxLjM2IDMgM3YxNGMwIDEuNjUtMS4zNSAzLTMgMyIvPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsPSIjRUE0MzM1IiBkPSJNMTIgMjJINWMtMS42NCAwLTMtMS4zNi0zLTNWNWMwLTEuNjQgMS4zNi0zIDMtM2g3djJINWMtLjU1IDAtLjk5LjQ1LS45OSAxTDQgMTljMCAuNTUuNDUgMSAxIDFoN3YyeiIvPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsPSIjMzRBODUzIiBkPSJNMTQgMTNsLTIuMjUgMi43NUwxMCAxNGwtNCA0aDEyeiIvPjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBmaWxsPSIjRkJCQzA0IiBkPSJNMTAgOGMwIDEuMS0uOSAyLTIgMnMtMi0uOS0yLTJjMC0xLjA5LjktMiAyLTJzMiAuOSAyIDIiLz48L3N2Zz4K
data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==

seguido por um monte de espaço, oque eu posso fazer?

Criado 22 de fevereiro de 2017
Ultima resposta 8 de jan. de 2020
Respostas 11
Participantes 5