Skip to content

Instantly share code, notes, and snippets.

@steppat
Last active October 10, 2023 13:13
Show Gist options
  • Save steppat/2046285369b6c644b50d95a89277e2f5 to your computer and use it in GitHub Desktop.
Save steppat/2046285369b6c644b50d95a89277e2f5 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;
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());
}
}
@jonnathanweber
Copy link

jonnathanweber commented Jun 17, 2023

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