Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
1
respuesta

[Proyecto] Haga lo que hicimos

package com.aluracursos.screenmatch.model;

import com.fasterxml.jackson.annotation.JsonAlias;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

@JsonIgnoreProperties(ignoreUnknown = true)
public record DatosEpisodio(@JsonAlias("Title") String titutlo,
@JsonAlias("Episode") Integer numeroEpisodio,
@JsonAlias("imdbRating")String evaluacion,
@JsonAlias("Released")String fechaDeLanzamiento) {
}
package com.aluracursos.screenmatch.model;

import com.fasterxml.jackson.annotation.JsonAlias;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

import java.util.List;

@JsonIgnoreProperties(ignoreUnknown = true)
public record DatosTemporada(@JsonAlias("Season") Integer numero,
@JsonAlias("Episodes")List episodios) {
}
package com.aluracursos.screenmatch.model;

import com.fasterxml.jackson.annotation.JsonAlias;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

import java.util.List;

@JsonIgnoreProperties(ignoreUnknown = true)
public record DatosTemporada(@JsonAlias("Season") Integer numero,
@JsonAlias("Episodes")List episodios) {
}
package com.aluracursos.screenmatch.principal;

import com.aluracursos.screenmatch.model.DatosEpisodio;
import com.aluracursos.screenmatch.model.DatosSerie;
import com.aluracursos.screenmatch.model.DatosTemporada;
import com.aluracursos.screenmatch.service.ConsumoAPI;
import com.aluracursos.screenmatch.service.ConvierteDatos;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Principal {
private Scanner teclado = new Scanner(System.in);
private final String URL = "https://www.omdbapi.com/?t=";
private final String APIKEY = "&apikey=4fc7c187";
private ConsumoAPI consumoAPI = new ConsumoAPI();
private ConvierteDatos conversor = new ConvierteDatos();
public void muestraElMenu(){
System.out.println("Escribe el nombre de la série que deseas buscar");
var nombreSerie = teclado.nextLine();
var json = consumoAPI.obtenerDatos(URL + nombreSerie.replace(" ", "+") + APIKEY);
//https://www.omdbapi.com/?t=game+of+thrones&apikey=4fc7c187
DatosSerie datos = conversor.obtenerDatos(json, DatosSerie.class);
System.out.println(datos);

    List<DatosTemporada> temporadas = new ArrayList<>();

    for (int i = 1; i <= datos.totalTemporadas(); i++) {
        json = consumoAPI.obtenerDatos(URL + nombreSerie.replace(" ", "+") + "&Season=" + i + APIKEY);
        DatosTemporada datosTemporada = conversor.obtenerDatos(json, DatosTemporada.class);
        temporadas.add(datosTemporada);
    }
    temporadas.forEach(System.out::println);
   
    for (int i = 0; i < datos.totalTemporadas(); i++) {
        List<DatosEpisodio> episodiosTemporadas = temporadas.get(i).episodios();
        for (int j = 0; j < episodiosTemporadas.size(); j++) {
            System.out.println(episodiosTemporadas.get(j).titutlo());
        }
    }
    temporadas.forEach(t -> t.episodios().forEach(e -> System.out.println(e.titutlo())));
}

}
package com.aluracursos.screenmatch;

import com.aluracursos.screenmatch.principal.Principal;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class ScreenmatchApplication implements CommandLineRunner {

public static void main(String[] args) {
    SpringApplication.run(ScreenmatchApplication.class, args);
}

@Override
public void run(String... args) throws Exception {
    Principal principal = new Principal();
    principal.muestraElMenu();

}

}

1 respuesta

Hola Yolima, espero que estés bien

Parece que estás trabajando en un proyecto que interactúa con una API para obtener datos de series, temporadas y episodios, y luego los muestra al usuario. He revisado el código que compartiste y parece que está bastante bien estructurado. Sin embargo, noto que hay una duplicación en la declaración de la clase DatosTemporada. Asegúrate de tener solo una definición de esta clase en tu paquete model.

Además, en tu método muestraElMenu, estás imprimiendo los títulos de los episodios de dos maneras diferentes. Puedes elegir una de las dos formas para mantener el código más limpio. Por ejemplo, podrías usar solo el bucle forEach:

temporadas.forEach(t -> t.episodios().forEach(e -> System.out.println(e.titutlo())));

Esto simplifica el código y hace exactamente lo mismo que el bucle for anterior.

Por último, asegúrate de que tu API key y la URL estén correctas y que la API esté funcionando como se espera. A veces, los problemas pueden surgir de la comunicación con la API externa.

Espero que estas sugerencias te sean útiles y te ayuden a avanzar en tu proyecto. ¡Bons estudios!