Skip to content

Instantly share code, notes, and snippets.

@steppat
Last active September 22, 2023 14:27
Show Gist options
  • Star 9 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save steppat/d6fc9a8fa90f0c4e5f6bbf23c3e5d89e to your computer and use it in GitHub Desktop.
Save steppat/d6fc9a8fa90f0c4e5f6bbf23c3e5d89e to your computer and use it in GitHub Desktop.
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
class SevenDaysOfCodeJavaDay1 {
public static void main(String[] args) throws Exception {
String apiKey = "<sua chave>";
URI apiIMDB = URI.create("https://imdb-api.com/en/API/Top250TVs/" + apiKey);
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder().uri(apiIMDB).build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
String json = response.body();
System.out.println("Resposta: " + json);
}
}
@redmasters
Copy link

Show

@alissonos
Copy link

Boa noite, Steppat.

No meu compila, mas não aparece no console o resultado JSON. Alguma luz do que pode ser?

@steppat
Copy link
Author

steppat commented Apr 2, 2022

Oi Alissonos, tente substituir a ultima linha com:

System.out.println("Resposta: " + json.substring(0,1000));

Eu tive o mesmo problema com eclipse.

@alissonos
Copy link

Agora sim, Steppat. Obrigaduuuu

@matheuscortes
Copy link

Alguém sabe por que o json está sendo retornado em uma única linha no console?

@DuarteLucas
Copy link

A minha solução é ligeiramente (😆) diferente, criei um ficheiro de txt, ao mesmo nível, para guardar a key localmente.

Leio o ficheiro com a key, guardo numa variável. Depois, ao fazer a URI, depois do método build(), estava a dar erro no index 51 - no fim da key. Adicionei o método trim(), o que me resolveu a questão.

Onde poderia estar o problema, visto que apenas escrevi a key no ficheiro? Não vi nenhum espaço.

Força aí!

@Fernandanery
Copy link

Fernandanery commented Apr 13, 2022

A aula está sendo transmitda em algum video, youtube, etc?

@steppat
Copy link
Author

steppat commented Apr 13, 2022

@DuarteLucas eu já vi soluções usar variáveis de ambiente ou arquivos de properties.

@Fernandanery Fernanda, não temos aula sobre 7days. A ideia que cada um encontra a sua solução e compartilha nas redes.

@philipepompeu
Copy link

Oi Alissonos, tente substituir a ultima linha com:

System.out.println("Resposta: " + json.substring(0,1000));

Eu tive o mesmo problema com eclipse.

Obrigado por compartilhar essa solução, estava tendo o mesmo problema!

@FredericoPerpetuo
Copy link

FredericoPerpetuo commented Apr 24, 2022

Oi Alissonos, tente substituir a ultima linha com:

System.out.println("Resposta: " + json.substring(0,1000));

Eu tive o mesmo problema com eclipse.

Boa noite Nico

Aqui estava com o msm problema e resolveu quando usei System.out.println("Resposta: " + json.substring(0,1000)); mas por que é necessário utilizar o método substring? E por que o System.out.println("Resposta: " + json) não imprime nada?

Obrigado

@steppat
Copy link
Author

steppat commented Apr 24, 2022

Oi Frederico, eu nao consegui descobrir ainda. Eu imagino que é algo relacionado com Eclipse. Até experimentei e aumentei o buffer da console no Eclipse mas tbm não resolveu.

@Patrick-Jabba
Copy link

Eu consegui o seguinte print :
{"items":[{"id":"tt0111161","rank":"1","title":"The Shawshank Redemption","fullTitle" etc etc etc ne? pq é enorme usando o seguinte codigo :

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = (HttpRequest) HttpRequest.newBuilder()
.uri(URI.create("https://imdb-api.com/en/API/Top250Movies/k_lvhcppad"))
.build();

	client.sendAsync(request, BodyHandlers.ofString())
	.thenApply(HttpResponse::body)
	.thenAccept(System.out::println)
	.join();

Minha duvida é mesmo sem a apiKey eu obtive o que pareceu ser o resultado da lista e outra duvida é que quando tentei aplicar a solução dada daí nao funcionou mesmo usando o json.substring(0, 1000). Alguem pode ajudar?

@elvitin
Copy link

elvitin commented Jun 17, 2022

Nico mitooo!!!, curto muito esse professor!! melhor sotaque heheh

@HendSchmidt
Copy link

Fala Pessoal, depois da minha aplicação chamar o IMDB eles me responderam isso aqui:
Resposta: {"items":[],"errorMessage":"Invalid API Key"}

Aí, fui olhar na documentação do IMDB https://developer.imdb.com/documentation/api-documentation/getting-access/
e esta dizendo que precisa ter uma conta na AWS...

alguém precisou criar conta na AWS pra conseguir gerar uma api key valida ?

@henriqu
Copy link

henriqu commented Aug 27, 2022

Pessoal

O HttpClient, só funciona no Java 12, estou executando no Java 9 e não importa.

@cgodevs
Copy link

cgodevs commented Sep 7, 2022

estou tendo um erro bizarro de certificado, alguém conhece um contorno? Já segui tutorial do StackOverflow, consegui adicionar o certificado do imdb ao "cacerts" do java e tal... pior que a request do Nico funcionou aqui na primeira tentativa, porém agora (uns 2 dias depois) não mais.

Exception in thread "main" java.util.concurrent.CompletionException: javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
	at .....................

@flavioborato
Copy link

Fala Pessoal, depois da minha aplicação chamar o IMDB eles me responderam isso aqui: Resposta: {"items":[],"errorMessage":"Invalid API Key"}

Aí, fui olhar na documentação do IMDB https://developer.imdb.com/documentation/api-documentation/getting-access/ e esta dizendo que precisa ter uma conta na AWS...

alguém precisou criar conta na AWS pra conseguir gerar uma api key valida ?

Fala pessoal tudo bem, estou tendo o mesmo problema, ao cadastrar a chave, independente da chave que eu cadastre aparece isso. Também estou precisando de uma ajuda.

@RaphaelJesusDev
Copy link

Quantidade de Bugs que tive nesse primeiro exercicio já servem para quando eu virar Senior. Agora o retorno não foi exatamente igual, sera que consultei a api incorreta?

`package br.com.SevenDaysOfCode;

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class SegundoDia {

public static void main(String[] args) throws URISyntaxException, IOException, InterruptedException {
	// TODO Auto-generated method stub
	
	
	HttpClient client = HttpClient.newHttpClient(); 
	HttpRequest request =  HttpRequest.newBuilder()
			.uri(new URI("https://imdb-api.com/en/API/Title/k_9synf3in/tt1375666"))
			.GET()
			.build();
	
	
	HttpResponse<String> httpResponse = client.send(request, HttpResponse.BodyHandlers.ofString());	
	System.out.println(httpResponse.body());
	
			

}

}
`

@andavno
Copy link

andavno commented Nov 18, 2022

Quantidade de Bugs que tive nesse primeiro exercicio já servem para quando eu virar Senior. Agora o retorno não foi exatamente igual, sera que consultei a api incorreta?

`package br.com.SevenDaysOfCode;

import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse;

public class SegundoDia {

public static void main(String[] args) throws URISyntaxException, IOException, InterruptedException {
	// TODO Auto-generated method stub
	
	
	HttpClient client = HttpClient.newHttpClient(); 
	HttpRequest request =  HttpRequest.newBuilder()
			.uri(new URI("https://imdb-api.com/en/API/Title/k_9synf3in/tt1375666"))
			.GET()
			.build();
	
	
	HttpResponse<String> httpResponse = client.send(request, HttpResponse.BodyHandlers.ofString());	
	System.out.println(httpResponse.body());
	
			

}

} `

Olá Raphael! Creio que o seu retorno foi diferente pois a url que você está utilizando está pesquisando um título específico. Repare que no código na linha 11 ele usa uma url que procura pelos top 250 filmes do IMDB.

@liposcki
Copy link

Não foi fácil... Uma dica boa é esconder a chave da API como variável de ambiente e fazer a requisição pelo sistema assim ela fica segura e não vai junto para o Git, tentei criar um arquivo .env mas não consegui, hehe.

public static void main(String[] args) {
		
		String apiKeyIMDB = System.getenv("ApiKeyIMDB");
		URI apiIMDB = URI.create("https://imdb-api.com/en/API/Top250Movies/" + apiKeyIMDB);
		
		HttpClient client = HttpClient.newHttpClient();
		HttpRequest request = HttpRequest
			.newBuilder()
			.uri(apiIMDB)
			.build();
		
		String json = client.sendAsync(request, BodyHandlers.ofString())
			.thenApply(HttpResponse::body)
			.join();
	
		System.out.println(json);
	}

@Eder-TS
Copy link

Eder-TS commented Nov 24, 2022

Cara... Que bateção de cabeça a toa!! Acho que a palavra JSon ativou o modo apocalipse e, junto com o fato do Eclipse não imprimir no console, fez eu ficar o dia todo tentando entender o quê estava errado! Esta parte de http eu não conhecia nada e fiquei pensando que o desafio era muito pra quem acabou de fazer a parte de OO do Java. Só a noite descobri os códigos http e consegui extrair a resposta 200, indicando que estava tudo certo, mas a bagaça não imprimia!! Agora, olhando as resoluções da galera, vi que é relativamente simples e imprimi um Stream num arquivo TXT.
Obrigado e forte abraço a todos!

@RebecaBNunes
Copy link

Acabei de terminar a formação de Java e tive dificuldades pra fazer esse desafio! Na realidade não conhecia as classes para trabalhar com o protocolo http e me baguncei toda pra fazer. Na hora de imprimir , ao invocar o body tava vindo o html todo do site no lugar do json, não entendi o porquê inicialmente, mas depois vi que tinha um erro na minha url. E também utilizei a url com a apiKey visível.

@ruan-narici
Copy link

Esse desafio foi difícil kkk, mas eu assisti algumas aulas no youtube e consegui fixar um pouco do conhecimento sobre o HttpClient, HttpRequest e HttpResponse.
Partiu para o segundo desafio!
Boa sorte a todos! 👨🏽‍💻

@twellv
Copy link

twellv commented Mar 27, 2023

To com 2 problemas aqui, o primeiro que o site ta dando ''acesso negado'' e o segundo é que não consigo fazer o import do pacote java.net.
E consequentemente não tenho como utilizar os httpRequest / Response. Acredito que isso esteja acontecendo por estar usando um projeto srping boot, logo vou ter que chamar o Request/Response de uma outra forma. Caso não seja esse o problema vou dar uma olhadinha na versão do meu java.
Mas no geral ta indo tudo na paz ^_^
Boa sorte a todos =)

@paulocpavan
Copy link

O meu só imprimi o primeiro filme no console, mas qdo olho o response.body o arquivo está completo...Não sei pq não imprimiu tudo..
import com.google.gson.FieldNamingPolicy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.Scanner;

public class Main {
public static void main(String[] args) throws IOException, InterruptedException {

    String apiKey = "k_th634hsu";


    try {

    String sUrl = "https://imdb-api.com/en/API/Top250Movies/" + apiKey;

    HttpClient cliente = HttpClient.newHttpClient();
    HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create(sUrl))
            .build();
    HttpResponse<String> response = cliente
            .send(request, HttpResponse.BodyHandlers.ofString());

    String json = response.body();

        System.out.println(json);

    } catch (IOException e) {
        System.out.println(e.getMessage());
    }
}

}

@jmsmarcelo
Copy link

IMDB API não disponibiliza a apiKey gratuita para testes:
image

@DevSerOCaco
Copy link

DevSerOCaco commented Aug 2, 2023

Pessoal, a api do desafio hoje é paga.
Estou usando essa para fazer o desafio. Gratuita e muito bem documentada.
https://developer.themoviedb.org/docs

@mvteus
Copy link

mvteus commented Sep 22, 2023

Pessoal, a api do desafio hoje é paga. Estou usando essa para fazer o desafio. Gratuita e muito bem documentada. https://developer.themoviedb.org/docs

Obrigadão!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment