-
-
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); | |
} | |
} |
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?
Nico mitooo!!!, curto muito esse professor!! melhor sotaque heheh
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 ?
Pessoal
O HttpClient, só funciona no Java 12, estou executando no Java 9 e não importa.
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 .....................
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.
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());
}
}
`
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.
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);
}
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!
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.
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! 👨🏽💻
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 =)
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());
}
}
}
Pessoal, a api do desafio hoje é paga.
Estou usando essa para fazer o desafio. Gratuita e muito bem documentada.
https://developer.themoviedb.org/docs
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!
Gente, usei a Api que o pessoal mandou nos comentários acima: https://developer.themoviedb.org/docs
Para quem estiver tendo dificuldades de conectar na API, cheguei a fazer, caso queiram dar uma olhada.
Meu repositório: https://github.com/CaiquePiazzaroli/7Days-To-Code.git
`
public class ApiTmdbClient {
private String apiUrl;
private HttpClient client;
private HttpRequest request;
private HttpResponse<String> response;
private String json;
//TBDB api connection
public ApiTmdbClient(String token, String apiUrl) throws URISyntaxException, IOException, InterruptedException {
//Criando o cliente
this.apiUrl = apiUrl;
this.client = HttpClient.newBuilder().build();
//Criando o request
this.request = newBuilder()
.uri(new URI(this.apiUrl))
.header("Authorization", "Bearer " + token)
.GET()
.build();
//Criando a response
this.response = client.send(request, HttpResponse.BodyHandlers.ofString());
this.json = this.response.body();
}
public String getJson() {
return json;
}`
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.