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

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?

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

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

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.

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

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.

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

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

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/

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

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.

Se quase 2 anos programando na linguagem, e tu não pode considerar que tu “sabe” ela, quando seria?[quote=“JulioCesarSF, post:10, topic:343800”]
Senão toda vez que você precisar de algo vai postar aqui?
[/quote]

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.

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?