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 en aula

package com.alura.screenmatch.principal;

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 com.google.gson.annotations.SerializedName;

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.NoSuchElementException; import java.util.Scanner;

public class PrincipalConBusqueda {

public static void main(String[] args) throws IOException, InterruptedException {


    Scanner lectura = new Scanner(System.in);
    System.out.println("Escriba el nombre de la pelicula: ");
    var busqueda = lectura.nextLine();

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

    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(json);

        Gson gson = new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)
                .create();

        TituloOmdb miTituloOmdb = gson.fromJson(json, TituloOmdb.class);
        System.out.println(miTituloOmdb);

        Titulo miTitulo = new Titulo(miTituloOmdb);
        System.out.println("Titulo ya convertido: "+miTitulo);
    } catch (NumberFormatException e) {
        System.out.println("Ocurrio un error: ");
        System.out.println(e.getMessage());
    } catch (IllegalArgumentException e){
        System.out.println("Error en la URI, veriifique la direccion ");
    } catch (ErrorEnConversionDeDuracionException e){
        System.out.println(e.getMessage());
    }
    System.out.println("Finalizo la ejecucion del programa!");

}

}

1 respuesta

Hola Albert, espero que estés bien

Parece que estás trabajando en un proyecto para consumir una API y manejar errores en Java. Según el contexto de la actividad, necesitas asegurarte de que tu código maneje adecuadamente los errores que puedan surgir al consumir la API de OMDb.

Aquí hay algunas cosas que podrías revisar y ajustar en tu código:

  1. Clase ErrorEnConversionDeDuracionException: Asegúrate de que esta clase esté correctamente implementada como se describe en el contexto. Debe extender RuntimeException y tener un constructor que acepte un mensaje.

  2. Constructor de la clase Titulo: Verifica que el constructor de Titulo esté validando correctamente la duración. Si el valor de runtime es "N/A", debe lanzar la excepción ErrorEnConversionDeDuracionException.

  3. Manejo de Excepciones: Asegúrate de que estás capturando las excepciones adecuadas. Tu código ya tiene bloques catch para NumberFormatException, IllegalArgumentException, y ErrorEnConversionDeDuracionException, lo cual es correcto según el contexto.

  4. Reemplazo de Espacios en Blanco: Tu código ya está reemplazando espacios en blanco en el nombre de la película con +, lo cual es necesario para formar correctamente la URL de la API.

  5. API Key: Asegúrate de que la API key que estás utilizando sea válida y que no haya restricciones en su uso.

Aquí tienes un ejemplo de cómo debería verse tu clase PrincipalConBusqueda después de hacer estas verificaciones:

public class PrincipalConBusqueda {
    public static void main(String[] args) throws IOException, InterruptedException {
        Scanner lectura = new Scanner(System.in);
        System.out.println("Escriba el nombre de la pelicula: ");
        var busqueda = lectura.nextLine();

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

        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(json);

            Gson gson = new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)
                    .create();

            TituloOmdb miTituloOmdb = gson.fromJson(json, TituloOmdb.class);
            System.out.println(miTituloOmdb);

            Titulo miTitulo = new Titulo(miTituloOmdb);
            System.out.println("Titulo ya convertido: " + miTitulo);
        } catch (NumberFormatException e) {
            System.out.println("Ocurrió un error: ");
            System.out.println(e.getMessage());
        } catch (IllegalArgumentException e) {
            System.out.println("Error en la URI, verifique la dirección.");
        } catch (ErrorEnConversionDeDuracionException e) {
            System.out.println(e.getMessage());
        }
        System.out.println("Finalizó la ejecución del programa!");
    }
}

Espero que estas sugerencias te ayuden a avanzar en tu proyecto. ¡Espero haber ayudado y buenos estudios!