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

package com.entronomia.aplicaciones.excepciones;

public class ErrorEnConversionADuracionEnMinutosException extends RuntimeException {
    private String mensaje;

    public ErrorEnConversionADuracionEnMinutosException(String mensaje) {
        this.mensaje = mensaje;
    }

    @Override
    public String getMessage() {
        return this.mensaje;
    }
}
package com.entronomia.aplicaciones.modelos;

import com.entronomia.aplicaciones.excepciones.ErrorEnConversionADuracionEnMinutosException;
import com.google.gson.annotations.SerializedName;

public class Titulo implements Comparable<Titulo>{

    @SerializedName("Title")
    private String nombre;
    @SerializedName("Year")
    private int fechaDeLanzamiento;
    private int duracionEnMinutos;
    private boolean incluidaEnElPlan;
    private double sumaDeLasEvaluaciones = 0;
    private int numeroDeEvaluaciones = 0;
    private double mediaDeLasEvaluaciones = 0;

    public Titulo(String nombre, int fechaDeLanzamiento) {
        this.nombre = nombre;
        this.fechaDeLanzamiento = fechaDeLanzamiento;
    }

    public Titulo(TituloOmbd tituloOmbd) {
        this.nombre = tituloOmbd.title();
        this.fechaDeLanzamiento = Integer.valueOf(tituloOmbd.year());
        if (tituloOmbd.runtime().contains("N/A")) {
            throw new ErrorEnConversionADuracionEnMinutosException("En la variable runtime se tiene el valor N/A");
        }
        this.duracionEnMinutos = Integer.valueOf(tituloOmbd.runtime().substring(0,3).replace(" ", ""));
    }

    public String getNombre() {
        return nombre;
    }

    public int getFechaDeLanzamiento() {
        return fechaDeLanzamiento;
    }

    public int getDuracionEnMinutos() {
        return duracionEnMinutos;
    }

    public void setDuracionEnMinutos(int duracionEnMinutos) {
        this.duracionEnMinutos = duracionEnMinutos;
    }

    public double getMediaDeLasEvaluaciones() {
        return mediaDeLasEvaluaciones;
    }

    public void evaluaPelicula(double nota) {
        sumaDeLasEvaluaciones = sumaDeLasEvaluaciones + nota;
        numeroDeEvaluaciones = numeroDeEvaluaciones +1;
    }

    public double calculaMediaDeLasEvaluaciones() {
        mediaDeLasEvaluaciones = sumaDeLasEvaluaciones / numeroDeEvaluaciones;
        return mediaDeLasEvaluaciones;
    }

    public int getClasificacion() {
        return (int) (calculaMediaDeLasEvaluaciones() / 2);
    }

    @Override
    public int compareTo(Titulo titulo) {
        return this.getNombre().compareTo(titulo.getNombre());
    }

    @Override
    public String toString() {
        return  "nombre= " + nombre +
                ", fechaDeLanzamiento= " + fechaDeLanzamiento +
                ", duración en minutos= " + duracionEnMinutos;
    }
}
package com.entronomia.aplicaciones.principal;

import com.entronomia.aplicaciones.excepciones.ErrorEnConversionADuracionEnMinutosException;
import com.entronomia.aplicaciones.modelos.Titulo;
import com.entronomia.aplicaciones.modelos.TituloOmbd;
import com.google.gson.FieldNamingPolicy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

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.Scanner;

public class InventarioDos {
    public static void main(String[] args) throws IOException, InterruptedException  {
        Scanner entrada = new Scanner(System.in);
        System.out.println("Nombre del título a buscar:");
        String titulo = entrada.nextLine();
        String url = "http://www.omdbapi.com/?t=" + titulo + "&apikey=d2b017ac";
        try {
            HttpClient cliente = HttpClient.newHttpClient();
            HttpRequest requerimiento = HttpRequest.newBuilder().uri(URI.create(url)).GET().build();
            HttpResponse<String> respuesta = cliente.send(requerimiento, HttpResponse.BodyHandlers.ofString());
            String json = respuesta.body();
            System.out.println(json);
            Gson gson = new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE).create();
            TituloOmbd nuevoTituloOmbd = gson.fromJson(json, TituloOmbd.class);
            System.out.println(nuevoTituloOmbd);
            Titulo nuevoTitulo = new Titulo(nuevoTituloOmbd);
            System.out.println(nuevoTitulo);
        } catch (NumberFormatException e) {
            System.out.println("Error de formato numérico");
        } catch (IllegalArgumentException e) {
            System.out.println("Error en la dirección uri");
        } catch (ErrorEnConversionADuracionEnMinutosException e) {
            System.out.println(e.getMessage());
        } finally {
            System.out.println("Fin del programa");
        }
    }
}
1 respuesta

¡Hola Roberto, espero que estés bien!

En el código proporcionado, veo que estás tratando de consumir la API de OMDb para obtener información sobre una película y manejar posibles errores, como la conversión de la duración a minutos.

Para solucionar los errores que puedan surgir al utilizar la API de OMDb, es importante que sigas los pasos indicados en la actividad. Aquí tienes algunas recomendaciones:

  1. Crea el nuevo paquete llamado "excepcion" dentro del paquete "com.alura.screenmatch" y dentro de él crea la clase "ErrorEnConversionDeDuracionException.java" tal como se indica en el ejercicio.

  2. Necesitarás cambiar el constructor de la clase "Título" para validar la duración, asegurándote de manejar la excepción "ErrorEnConversionDeDuracionException" correctamente.

  3. Finalmente, asegúrate de cambiar el código de la clase "PrincipalConBusqueda" para realizar el tratamiento de errores y buscar películas que contengan espacios en blanco en el nombre.

Recuerda que es importante manejar adecuadamente las excepciones y errores que puedan surgir al consumir la API y realizar las conversiones necesarias.

Espero que estas recomendaciones te ayuden a resolver los problemas que estás enfrentando al seguir el procedimiento de la clase. ¡Mucho ánimo y sigue adelante!

Espero haber ayudado y buenos estudios!