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

Haga lo que hicimos en aula

Clase PrincipalConBusqueda

import com.alura.screenmatch.excepcion.ErrorEnConversionDeDuracionException;
import com.alura.screenmatch.modelos.Titulo;
import com.alura.screenmatch.modelos.TituloOmdb;
import com.google.gson.FieldNamingPolicy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

import java.io.FileWriter;
import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class PrincipalConBusqueda {
    public static void main(String[] args) throws IOException, InterruptedException {
        Scanner lectura = new Scanner(System.in);
        List<Titulo> titulos = new ArrayList<>();
        
        // Configuramos GSON con Pretty Printing para que el JSON se vea ordenado
        Gson gson = new GsonBuilder()
                .setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)
                .setPrettyPrinting()
                .create();

        while (true) {
            System.out.println("Escriba el nombre de una película (o 'salir' para terminar): ");
            var busqueda = lectura.nextLine();

            if (busqueda.equalsIgnoreCase("salir")) {
                break;
            }

            String direccion = "https://www.omdbapi.com/?t=" +
                    busqueda.replace(" ", "+") +
                    "&apikey=a9f38ea0";

            try {
                HttpClient client = HttpClient.newHttpClient();
                HttpRequest request = HttpRequest.newBuilder()
                        .uri(URI.create(direccion))
                        .build();
                HttpResponse<String> response = client
                        .send(request, HttpResponse.BodyHandlers.ofString());

                String json = response.body();
                System.out.println("Respuesta JSON: " + json);

                // Convertimos el JSON a nuestro Record TituloOmdb
                TituloOmdb miTituloOmdb = gson.fromJson(json, TituloOmdb.class);
                
                // Convertimos el Record a nuestra clase Titulo (donde validamos duración)
                Titulo miTitulo = new Titulo(miTituloOmdb);
                System.out.println("Título convertido: " + miTitulo);

                // Guardamos en la lista
                titulos.add(miTitulo);

            } catch (NumberFormatException e) {
                System.out.println("Error de formato: " + e.getMessage());
            } catch (IllegalArgumentException e) {
                System.out.println("Error en la dirección URI.");
            } catch (ErrorEnConversionDeDuracionException e) {
                System.out.println(e.getMessage());
            } catch (Exception e) {
                System.out.println("Ocurrió un error inesperado.");
            }
        }

        // Al salir del while, guardamos toda la lista en un archivo .json
        if (!titulos.isEmpty()) {
            FileWriter escritura = new FileWriter("peliculas.json");
            escritura.write(gson.toJson(titulos));
            escritura.close();
            System.out.println("Archivo 'peliculas.json' creado con éxito.");
        }

        System.out.println("Finalizó la ejecución del programa!");
    }
}
1 respuesta

¡Hola Mario, espero que estés bien!

Parece que ya has implementado la mayoría de los pasos necesarios para completar la actividad. Tu código en la clase PrincipalConBusqueda sigue correctamente el flujo que vimos en clase. Aquí hay algunos puntos clave que debes verificar para asegurarte de que todo funcione como se espera:

  1. API Key: Asegúrate de que la API key que estás utilizando (apikey=a9f38ea0) sea válida y tenga acceso a los datos. Si no, puede que necesites obtener una nueva API key desde OMDb.

  2. Manejo de Excepciones: Has incluido un manejo de excepciones robusto, lo cual es excelente para capturar posibles errores durante la ejecución del programa. Asegúrate de que las clases de excepción como ErrorEnConversionDeDuracionException estén correctamente definidas en tu proyecto.

  3. Formato del Archivo JSON: Estás utilizando Gson con setPrettyPrinting(), lo cual es perfecto para que el archivo peliculas.json sea legible y esté bien formateado.

  4. Verificación de la Lógica: Revisa que la lógica de búsqueda y almacenamiento de títulos funcione correctamente. Puedes hacer esto probando el programa con varios títulos de películas y verificando el contenido del archivo peliculas.json.

  5. Pruebas: Realiza pruebas ingresando diferentes nombres de películas y verifica que el archivo JSON se genere correctamente con los datos esperados.

Si has seguido todos estos pasos, deberías estar en buen camino para completar la actividad. Si encuentras algún error específico, no dudes en revisarlo paso a paso o compartir más detalles para que podamos ayudarte mejor.

Espero que esto te sea de ayuda y ¡buenos estudios!