Skip to content

Instantly share code, notes, and snippets.

@steppat
Last active March 24, 2022 20:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save steppat/d091e40d5f278923199a8b3c06b17514 to your computer and use it in GitHub Desktop.
Save steppat/d091e40d5f278923199a8b3c06b17514 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.ArrayList;
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 SevenDaysOfCodeJavaDay3 {
public static record Movie (String title, String url, String imDbRating, String year) {}
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();
List<Movie> movies = parse(json);
System.out.println(movies.size());
System.out.println(movies.get(0));
}
private static List<Movie> parse(String json) {
String[] moviesArray = parseJsonMovies(json);
List<String> titles = parseTitles(moviesArray);
List<String> urlImages = parseUrlImages(moviesArray);
List<String> ratings = parseRatings(moviesArray);
List<String> years = parseYears(moviesArray);
List<Movie> movies = new ArrayList<>(titles.size());
for (int i =0; i < titles.size(); i++) {
movies.add(new Movie(titles.get(i), urlImages.get(i) , ratings.get(i), years.get(i)));
}
return movies;
}
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> parseRatings(String[] moviesArray) {
return parseAttribute(moviesArray, 7);
}
private static List<String> parseYears(String[] moviesArray) {
return parseAttribute(moviesArray, 4);
}
private static List<String> parseAttribute(String[] jsonMovies, int pos) {
return Stream.of(jsonMovies)
.map(e -> e.split("\",\"")[pos])
.map(e -> e.split(":\"")[1])
.map(e -> e.replaceAll("\"", ""))
.collect(Collectors.toList());
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment