diff --git a/src/main/java/movie/apis/Main.java b/src/main/java/movie/apis/Main.java index 99cdf8d..eaa2b98 100644 --- a/src/main/java/movie/apis/Main.java +++ b/src/main/java/movie/apis/Main.java @@ -30,8 +30,8 @@ public class Main { case 3: // TODO (BONUS): Get movie ID from user, then call movieService.displayMovieDetails() - - + Long movieId = getLongInput("Enter movie id: "); + movieService.displayMovieDetails(movieId); break; case 0: diff --git a/src/main/java/movie/apis/Movie.java b/src/main/java/movie/apis/Movie.java index c9e80d4..068d3cc 100644 --- a/src/main/java/movie/apis/Movie.java +++ b/src/main/java/movie/apis/Movie.java @@ -11,13 +11,26 @@ public class Movie { private Long id; private String title; private List genres; - private String images; + private List images; private String year; private String imdb_rating; private String country; + private String actors; + private String awards; + private String director; + private String imdb_id; + private String imdb_votes; + private String metascore; + private String plot; + private String rated; + private String released; + private String runtime; + private String type; + private String writer; + // TODO: Create a constructor with all fields - public Movie(Long id, String title, List genres, String images, String year, String imdb_rating, String country){ + public Movie(Long id, String title, List genres, List images, String year, String imdb_rating, String country){ this.id = id; this.title = title; this.genres = genres; @@ -37,46 +50,107 @@ public class Movie { public Long getId() { return id; } - public String getTitle() { return title; } - public List getGenres() { return genres; } - - public String getImages() { + public List getImages() { return images; } - public String getImdb_rating() { return imdb_rating; } - public String getYear() { return year; } - public String getCountry() { return country; } + public String getActors() { + return actors; + } + public String getAwards() { + return awards; + } + public String getDirector() { + return director; + } + public String getImdb_id() { + return imdb_id; + } + public String getImdb_votes() { + return imdb_votes; + } + public String getMetascore() { + return metascore; + } + public String getPlot() { + return plot; + } + public String getRated() { + return rated; + } + public String getReleased() { + return released; + } + public String getRuntime() { + return runtime; + } + public String getType() { + return type; + } + public String getWriter() { + return writer; + } public void setGenres(List genres) { this.genres = genres; } - - public void setImages(String images) { + public void setImages(List images) { this.images = images; } - public void setImdb_rating(String imdb_rating) { this.imdb_rating = imdb_rating; } - public void setYear(String year) { this.year = year; } + public void setAwards(String awards) { + this.year = awards; + } + public void setDirector(String director) { + this.year = director; + } + public void setMetascoret(String metascore) { + this.year = metascore; + } + public void setPlot(String plot) { + this.year = plot; + } + public void setImdb_id(String imdb_id) { + this.year = imdb_id; + } + public void setImdb_votes(String imdb_votes) { + this.year = imdb_votes; + } + public void setRated(String rated) { + this.year = rated; + } + public void setReleased(String released) { + this.year = released; + } + public void setType(String type) { + this.year = type; + } + public void setRuntime(String runtime) { + this.year = runtime; + } + public void setWriter(String writer) { + this.year = writer; + } + public void setCountry(String country) { this.country = country; diff --git a/src/main/java/movie/apis/MovieService.java b/src/main/java/movie/apis/MovieService.java index 5e4490f..c960070 100644 --- a/src/main/java/movie/apis/MovieService.java +++ b/src/main/java/movie/apis/MovieService.java @@ -134,46 +134,10 @@ public class MovieService { return null; } - /* - BONUS TODO: Display complete movie details for a given movie ID - - Open this link in your browser (and check Pretty-print checkbox) to view json format: - https://api.meshcomp.ir/api/v1/movies/1 - - INSTRUCTIONS: - 1. Call getMovieById(movieId) to get the JSON response string - 2. Check if response is null (if yes, print error and return) - 3. Parse the JSON string to JsonObject (inside try-catch) - 4. Use Gson to extract all fields from the JSON and map them to your Movie class: - - Add missing JSON fields to your Movie class first (actors, awards, director, - imdb_id, imdb_votes, metascore, plot, rated, released, runtime, type, writer) - - Then use Gson to parse your json string - 5. Print all movie details in a readable format - - (PUT ALL PARSING CODE INSIDE THE EXISTING try-catch) - */ - - /* EXAMPLE OUTPUT: - - ======================================================================= - THE SHAWSHANK REDEMPTION (1994) - ======================================================================= - Rating: 9.3/10 | Votes: 1,738,596 - Director: Frank Darabont - Cast: Tim Robbins, Morgan Freeman, Bob Gunton, William Sadler - Genre: Crime, Drama - Runtime: 142 min | Rated: R - Country: USA | Released: 14 Oct 1994 - Plot: Two imprisoned men bond over a number of years, finding - solace and eventual redemption through acts of common decency. - Awards: Nominated for 7 Oscars. Another 19 wins & 30 nominations. - ======================================================================= - - */ - public void displayMovieDetails(Long movieId) { // Step 1: Get JSON response from API String jsonResponse = getMovieById(movieId); +// System.out.println(jsonResponse + "\n"); // Step 2: Check if we got valid data // Step 3-5: Parse JSON and display details (PUT YOUR CODE INSIDE try-catch) @@ -184,8 +148,23 @@ public class MovieService { try { // TODO: Parse jsonResponse to JsonObject // HINT: Use JsonParser.parseString(jsonResponse).getAsJsonObject() + JsonObject moviesObj = JsonParser.parseString(jsonResponse).getAsJsonObject(); // TODO: use Gson to parse the json - // Your code here: + Gson gson = new Gson(); + Movie movie = gson.fromJson(moviesObj, Movie.class); + String output = " =======================================================================\n" + + " "+ movie.getTitle() +"\n" + + " =======================================================================\n" + + " Rating: "+ movie.getImdb_rating() +" | Votes: "+ movie.getImdb_votes() + "\n" + + " Director: "+ movie.getDirector() +"\n" + + " Cast: "+ movie.getActors() +"\n" + + " Genre: "+ movie.getGenres() +"\n" + + " Runtime: "+ movie.getRuntime() +" | Rated: "+ movie.getRated() +"\n" + + " Country: "+ movie.getCountry() +" | Released: "+ movie.getReleased() +"\n" + + " Plot: " + movie.getPlot() + + "\n ======================================================================="; + System.out.println(output); + } catch (Exception e) { System.err.println("ERROR parsing movie details: " + e.getMessage()); }