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

PROYECTO FINAL: CONSUMO DE API

public class Main {
    public static void main(String[] args) throws IOException {
        Scanner lectura = new Scanner(System.in);
        List<Film> peliculas = new LinkedList<>();
        ConsultaClientHTTP c = new ConsultaClientHTTP();
        Gson gson = new GsonBuilder()
                .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
                .setPrettyPrinting()
                .create();

        System.out.println("****Bienvenido a su sistema SWAPI****");

        while (true) {
            System.out.println("Seleccione el número de la película que desea consultar ");
            System.out.println("1,2,3,4,5,6,7  y 8 para salir");
            try {
                int busqueda = lectura.nextInt();
                if (busqueda == 8) {
                    break;
                }
                if (busqueda < 1 || busqueda > 7) {
                    System.out.println("Ingrese una opción correcta");
                } else {
                    FilmsOmdb filmsOmdb = c.solicitudHttp(busqueda);
                    System.out.println(filmsOmdb);
                    Film myFilm = new Film(filmsOmdb);
                    System.out.println("Título ya convertido: " + myFilm);
                    peliculas.add(myFilm);
                }
            }  catch (Exception e) {
                System.out.println("Error dato desconocido-> "+ e.getMessage());
                lectura.nextLine(); // Limpiar el buffer en caso de error
            }
        }

        lectura.close(); // <- Cerramos el Scanner fuera del ciclo

        FileWriter escritura = new FileWriter(peliculas.getFirst().getTitle()+".json");
        escritura.write(gson.toJson(peliculas));
        escritura.close();
        System.out.println("Finaliza ejecución del programa");
    }
}
public class ConsultaClientHTTP {
    //link dinamico

    public ConsultaClientHTTP() {
    }

    public FilmsOmdb solicitudHttp(int id) {
        String id1 = String.valueOf(id);
        String direccion = "https://swapi.py4e.com/api/films/" + id1 + "/";
        try {
            // Crear un cliente HTTP
            HttpClient client = HttpClient.newHttpClient();
            // Construir la solicitud HTTP
            HttpRequest request = HttpRequest.newBuilder()
                    .uri(URI.create(direccion)) // Establecer la URI de la solicitud
                    .build();
            // Enviar solicitud y recibir la respuesta
            HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
            // Imprimir el cuerpo de respuesta
            System.out.println(response.body());
            return new Gson().fromJson(response.body(),FilmsOmdb.class);
        } catch (IOException | InterruptedException e) {
            System.out.println("Error en la consulta cliente servidor");
            System.out.println(e.getMessage());
            return null; // Retornar null en caso de error
        }
    }

}
public record FilmsOmdb(String title, Integer episode_id, String opening_crawl, String release_date) {
}
public class Film {
   private String title;
   private String episode_id;
   private String opening_crawl;
   private String realease_date;

    public Film() {
    }

    public Film(FilmsOmdb myFlim) {
        this.title = myFlim.title();
        this.episode_id = String.valueOf(myFlim.episode_id());
        this.opening_crawl = myFlim.opening_crawl();
        this.realease_date = String.valueOf(myFlim.release_date());
    }

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

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

1 respuesta

Hola, Jonathan, espero que estés bien

Parece que tu código está funcionando bastante bien en términos de consumir la API y mostrar los datos. Sin embargo, he notado algunos puntos que podrías mejorar o corregir:

  1. Nombre del campo realease_date: En tu clase Film, el campo está escrito como realease_date, pero debería ser release_date. Esto podría causar inconsistencias o errores al manejar los datos.

  2. Manejo de errores: Aunque ya tienes un manejo básico de excepciones, podrías mejorar el feedback al usuario. Por ejemplo, podrías diferenciar entre errores de red y otros tipos de errores para proporcionar mensajes más específicos.

  3. Uso de FileWriter: Asegúrate de manejar posibles excepciones al escribir en el archivo. Podrías usar un bloque try-with-resources para asegurarte de que el FileWriter se cierra correctamente incluso si ocurre un error.

  4. Validación de entrada: Actualmente, si el usuario ingresa algo que no es un número, el programa lanzará una excepción. Podrías mejorar esto validando la entrada antes de intentar convertirla a un número.

Espero que estas sugerencias te sean útiles y puedas mejorar tu proyecto. ¡Bons estudios!