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

[Sugerencia] Haga lo que hicimos: aplicando interacción con el usuário

package com.aluracursos.screenmatch.principal;

import com.aluracursos.screenmatch.model.DatosEpisodio;
import com.aluracursos.screenmatch.model.DatosSerie;
import com.aluracursos.screenmatch.model.DatosTemporadas;
import com.aluracursos.screenmatch.service.ConsumoAPI;
import com.aluracursos.screenmatch.service.ConvierteDatos;
import com.aluracursos.screenmatch.service.IConvierteDatos;
import org.yaml.snakeyaml.external.com.google.gdata.util.common.base.Escaper;

import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Principal {

    private Scanner teclado = new Scanner(System.in);
    private ConsumoAPI consumoApi = new ConsumoAPI();
    private final String URL_BASE = "https://www.omdbapi.com/?t=";
    private final String API_KEY = "&apikey=c236e1a";
    private ConvierteDatos conversor = new ConvierteDatos();

    public void muestraElMenu(){
        System.out.println("Por favor escribe el nombre de la serie que deseas buscar: ");

        // Busca los datos de serie
        var nombreSerie = teclado.nextLine();
        var json = consumoApi.obtenerDatos(URL_BASE + nombreSerie.replace(" ","+") + API_KEY);
        var datos = conversor.obtenerDatos(json, DatosSerie.class);
//        System.out.println(datos);

        // Busca los datos de todas las temporadas
        List<DatosTemporadas> temporadas = new ArrayList<>();
        for (int i = 1; i <= datos.totalDeTemporadas(); i++) {
            json = consumoApi.obtenerDatos(URL_BASE + nombreSerie.replace(" ", "+") + "&Season=" + i + API_KEY);
            var datosTemporadas = conversor.obtenerDatos(json, DatosTemporadas.class);
            temporadas.add(datosTemporadas);
        }
        //temporadas.forEach(System.out::println); //se imprime toda la temporada

        // Mostrr solo el titulo de los episodios para las tempordas
//        for (int i = 0; i < datos.totalDeTemporadas(); i++) {
//            List<DatosEpisodio> episodioTemporada = temporadas.get(i).episodios();
//            for (int j = 0; j < episodioTemporada.size(); j++) {
//                System.out.println(episodioTemporada.get(j).titulo());
//            }
//        }
        temporadas.forEach(t -> t.episodios().forEach(e -> System.out.println(e.titulo())));
    }
}

Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad

1 respuesta

Hola Juan, espero que estés bien

Parece que ya tienes un buen avance en tu proyecto. Aquí tienes algunas sugerencias para mejorar la interacción con el usuario y asegurarte de que el programa funcione de manera fluida:

  1. Validación de entrada del usuario: Podrías agregar una validación para asegurarte de que el usuario no ingrese una cadena vacía o caracteres inválidos antes de realizar la búsqueda.

    public void muestraElMenu() {
        String nombreSerie = "";
        do {
            System.out.println("Por favor escribe el nombre de la serie que deseas buscar: ");
            nombreSerie = teclado.nextLine().trim();
            if (nombreSerie.isEmpty()) {
                System.out.println("El nombre de la serie no puede estar vacío. Inténtalo de nuevo.");
            }
        } while (nombreSerie.isEmpty());
    
        // Resto del código...
    }
    
  2. Manejo de errores de la API: Considera manejar posibles errores al consumir la API, como problemas de conexión o respuestas inesperadas.

    try {
        var json = consumoApi.obtenerDatos(URL_BASE + nombreSerie.replace(" ", "+") + API_KEY);
        var datos = conversor.obtenerDatos(json, DatosSerie.class);
        // Resto del código...
    } catch (Exception e) {
        System.out.println("Hubo un error al obtener los datos de la serie. Por favor, intenta nuevamente.");
    }
    
  3. Mejorar la presentación de los resultados: Puedes formatear la salida para que sea más clara y fácil de leer.

    temporadas.forEach(t -> {
        System.out.println("Temporada " + t.numero() + ":");
        t.episodios().forEach(e -> System.out.println(" - " + e.titulo()));
    });
    

Estas mejoras pueden hacer que tu aplicación sea más robusta y amigable para el usuario. Espero que estas sugerencias te sean útiles.

¡Espero haber ayudado y buenos estudios!