import com.fasterxml.jackson.annotation.JsonAlias;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
@JsonIgnoreProperties(ignoreUnknown = true)
public record DatosEpisodio(
@JsonAlias("Title") String titulo,
@JsonAlias("Episode") Integer numero,
@JsonAlias("imdbRating") String evaluacion,
@JsonAlias("Released") String fechaLanzamiento
) {
}
import java.time.LocalDate;
public class Episodio {
private Integer temporada;
private String titulo;
private Integer numeroEpisodio;
private Double evaluacion;
private LocalDate fechaLanzamiento;
public Episodio(Integer numeroTemporada, DatosEpisodio datosEpisodio) {
this.temporada = numeroTemporada;
this.titulo = datosEpisodio.titulo();
this.numeroEpisodio = datosEpisodio.numero();
try {
this.evaluacion = Double.valueOf(datosEpisodio.evaluacion());
} catch (NumberFormatException e) {
this.evaluacion = 0.0;
}
try {
this.fechaLanzamiento = LocalDate.parse(datosEpisodio.fechaLanzamiento());
} catch (Exception e) {
this.fechaLanzamiento = null;
}
}
public Integer getTemporada() {
return temporada;
}
public String getTitulo() {
return titulo;
}
public Integer getNumeroEpisodio() {
return numeroEpisodio;
}
public Double getEvaluacion() {
return evaluacion;
}
public LocalDate getFechaLanzamiento() {
return fechaLanzamiento;
}
@Override
public String toString() {
return "temporada=" + temporada +
", titulo='" + titulo + '\'' +
", numeroEpisodio=" + numeroEpisodio +
", evaluacion=" + evaluacion +
", fechaLanzamiento=" + fechaLanzamiento;
}
}
List episodios = temporadas.stream()
.flatMap(t -> t.episodios().stream()
.map(d -> new Episodio(t.numero(), d)))
.toList();
System.out.println("Top 5 episodios:");
episodios.stream()
.filter(e -> e.getEvaluacion() > 0.0)
.sorted(Comparator.comparing(Episodio::getEvaluacion).reversed())
.limit(5)
.forEach(System.out::println);
System.out.println("¿A partir de qué año deseas ver los episodios?");
var año = teclado.nextInt();
teclado.nextLine();
LocalDate fechaBusqueda = LocalDate.of(año, 1, 1);
episodios.stream()
.filter(e -> e.getFechaLanzamiento() != null)
.filter(e -> e.getFechaLanzamiento().isAfter(fechaBusqueda))
.forEach(System.out::println);
.filter(e -> e.getFechaLanzamiento() != null)
.filter(e -> !e.getFechaLanzamiento().isBefore(fechaBusqueda))
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;
public class Principal {
private Scanner teclado = new Scanner(System.in);
private ConsumoApi consumoApi = new ConsumoApi();
private ConvierteDatos conversor = new ConvierteDatos();
private final String URL_BASE = "https://www.omdbapi.com/?t=";
private final String API_KEY = "&apikey=TU_API_KEY";
public void muestraElMenu() {
System.out.println("Escribe el nombre de la serie:");
var nombreSerie = teclado.nextLine();
var json = consumoApi.obtenerDatos(URL_BASE + nombreSerie.replace(" ", "+") + API_KEY);
DatosSerie datosSerie = conversor.obtenerDatos(json, DatosSerie.class);
List<DatosTemporada> temporadas = new ArrayList<>();
for (int i = 1; i <= datosSerie.totalTemporadas(); i++) {
json = consumoApi.obtenerDatos(URL_BASE + nombreSerie.replace(" ", "+") + "&season=" + i + API_KEY);
DatosTemporada datosTemporada = conversor.obtenerDatos(json, DatosTemporada.class);
temporadas.add(datosTemporada);
}
List<Episodio> episodios = temporadas.stream()
.flatMap(t -> t.episodios().stream()
.map(d -> new Episodio(t.numero(), d)))
.toList();
System.out.println("\nTop 5 episodios:");
episodios.stream()
.filter(e -> e.getEvaluacion() > 0.0)
.sorted(Comparator.comparing(Episodio::getEvaluacion).reversed())
.limit(5)
.forEach(System.out::println);
System.out.println("\n¿A partir de qué año deseas ver los episodios?");
var año = teclado.nextInt();
teclado.nextLine();
LocalDate fechaBusqueda = LocalDate.of(año, 1, 1);
System.out.println("\nEpisodios encontrados:");
episodios.stream()
.filter(e -> e.getFechaLanzamiento() != null)
.filter(e -> !e.getFechaLanzamiento().isBefore(fechaBusqueda))