Last active
October 10, 2023 13:13
-
-
Save steppat/2046285369b6c644b50d95a89277e2f5 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.net.URI; | |
import java.net.http.HttpClient; | |
import java.net.http.HttpRequest; | |
import java.net.http.HttpResponse; | |
import java.util.List; | |
import java.util.regex.Matcher; | |
import java.util.regex.Pattern; | |
import java.util.stream.Collectors; | |
import java.util.stream.Stream; | |
class SevenDaysOfCodeJavaDay2 { | |
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(); | |
String[] moviesArray = parseJsonMovies(json); | |
List<String> titles = parseTitles(moviesArray); | |
titles.forEach(System.out::println); | |
List<String> urlImages = parseUrlImages(moviesArray); | |
urlImages.forEach(System.out::println); | |
//outras listas para rating e years | |
} | |
private static String[] parseJsonMovies(String json) { | |
Matcher matcher = Pattern.compile(".*\\[(.*)\\].*").matcher(json); | |
if (!matcher.matches()) { | |
throw new IllegalArgumentException("no match in " + json); | |
} | |
String[] moviesArray = matcher.group(1).split("\\},\\{"); | |
moviesArray[0] = moviesArray[0].substring(1); | |
int last = moviesArray.length - 1; | |
String lastString = moviesArray[last]; | |
moviesArray[last] = lastString.substring(0, lastString.length() - 1); | |
return moviesArray; | |
} | |
private static List<String> parseTitles(String[] moviesArray) { | |
return parseAttribute(moviesArray, 3); | |
} | |
private static List<String> parseUrlImages(String[] moviesArray) { | |
return parseAttribute(moviesArray, 5); | |
} | |
private static List<String> parseAttribute(String[] moviesArray, int pos) { | |
return Stream.of(moviesArray) | |
.map(e -> e.split("\",\"")[pos]) | |
.map(e -> e.split(":\"")[1]) | |
.map(e -> e.replaceAll("\"", "")) | |
.collect(Collectors.toList()); | |
} | |
} |
fiz assim
public static void main( String[] args ) {
String returnJSON;
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder().
uri(URI.create("https://imdb-api.com/en/API/Top250Movies/k_37jkhozm")).
build();
returnJSON = client.sendAsync(request, BodyHandlers.ofString()).
thenApply(HttpResponse::body).
join();
JSONArray jsonFilmes = new JSONObject(returnJSON).getJSONArray("items");
ArrayList<String> titulo = new ArrayList<>();
ArrayList<String> imagem = new ArrayList<>();
ArrayList<String> ano = new ArrayList<>();
ArrayList<String> nota = new ArrayList<>();
for (Object a : jsonFilmes) {
titulo.add( ((JSONObject) a).getString("title") );
imagem.add( ((JSONObject) a).getString("image") );
ano.add( ((JSONObject) a).getString("year") );
nota.add( ((JSONObject) a).getString("imDbRating") );
}
System.out.println( titulo );
}
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Bom dia galera!
Rapaz, que desafio complicado.
Como eu já havia tentado várias vezes, a minha alternativa foi salvar o arquivo .json no computador e fazer a leitura dele.
O IMDB só permite 100 requisições por dia, e eu fiz bem mais que isso até conseguir kkk.
Este desafio superou todos os meus conhecimentos.
EU GOSTO ASSIM!!! MAIS APRENDIZADO PRA CONTA DO PAI !! :D