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

En esta actividad integré mi proyecto con la API de OMDb API, realizando una solicitud HTTP desde Java para obtener información de películas en formato JSON.

Además, utilicé la librería Gson para convertir la respuesta en objetos dentro de mi aplicación y poder trabajar con los datos de manera estructurada.

PrincipalConBusqueda.java

package com.alura.screenmatch.principal;

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

import java.io.IOException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
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 PrincipalConBusqueda {
    public static void main(String[] args) throws IOException, InterruptedException {

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

        String direccion = "https://www.omdbapi.com/?t=" +
                URLEncoder.encode(busqueda, StandardCharsets.UTF_8) +
                "&apikey=ffedabb6";

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

        Titulo miTitulo = new Titulo(
                miTituloOmdb.title(),
                Integer.valueOf(miTituloOmdb.year())
        );

        System.out.println(miTitulo);
    }
}

Titulo.java

package com.alura.screenmatch.modelos;

import com.google.gson.annotations.SerializedName;

public class Titulo implements Comparable<Titulo> {

    @SerializedName("Title")
    private String nombre;

    @SerializedName("Year")
    private int fechaDeLanzamiento;

    private boolean incluidoEnElPlan;
    private double sumaDeLasEvaluaciones;
    private int totalDeEvaluaciones;

    @SerializedName("Runtime")
    private int duracionEnMinutos;

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

    // Getters
    public String getNombre() {
        return nombre;
    }

    public int getFechaDeLanzamiento() {
        return fechaDeLanzamiento;
    }

    public boolean isIncluidoEnElPlan() {
        return incluidoEnElPlan;
    }

    public int getDuracionEnMinutos() {
        return duracionEnMinutos;
    }

    public int getTotalDeEvaluaciones() {
        return totalDeEvaluaciones;
    }

    // Setters
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public void setFechaDeLanzamiento(int fechaDeLanzamiento) {
        this.fechaDeLanzamiento = fechaDeLanzamiento;
    }

    public void setIncluidoEnElPlan(boolean incluidoEnElPlan) {
        this.incluidoEnElPlan = incluidoEnElPlan;
    }

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

    // Métodos
    public void muestraFichaTecnica() {
        System.out.println("Nombre de la película: " + nombre);
        System.out.println("Año de lanzamiento: " + fechaDeLanzamiento);
    }

    public void evalua(double nota) {
        sumaDeLasEvaluaciones += nota;
        totalDeEvaluaciones++;
    }

    public double calculaMediaEvaluaciones() {
        return sumaDeLasEvaluaciones / totalDeEvaluaciones;
    }

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

    @Override
    public String toString() {
        return "nombre='" + nombre + '\'' +
                ", fechaDeLanzamiento=" + fechaDeLanzamiento;
    }
}
1 respuesta

¡Hola Estudiante, espero que estés bien!

Parece que has hecho un gran trabajo integrando tu proyecto con la API de OMDb y utilizando Gson para manejar los datos. Según el contexto de la actividad, parece que necesitas asegurarte de que estás siguiendo los pasos correctos para descargar e integrar la biblioteca Gson en tu proyecto, y también para estructurar tus clases correctamente.

Aquí tienes algunos puntos que podrías revisar para asegurarte de que tu implementación está alineada con lo que se hizo en clase:

  1. Descarga e integración de Gson: Asegúrate de haber descargado la versión correcta de Gson (2.10.1) desde el MVN Repository y de haberla agregado a tu proyecto en IntelliJ siguiendo los pasos de la actividad. Esto incluye ir a File > Project Structure > Modules > Dependencies y agregar el archivo JAR descargado.

  2. Uso del Record TituloOmdb: Verifica que has creado correctamente el record TituloOmdb con los campos title, year y runtime, como se muestra en el contexto de la actividad.

  3. Clase PrincipalConBusqueda: Asegúrate de que estás utilizando el código proporcionado para convertir la respuesta JSON en un objeto TituloOmdb y luego en un objeto Titulo. Esto incluye el uso de GsonBuilder con FieldNamingPolicy.UPPER_CAMEL_CASE.

  4. Clase Titulo: Revisa que tu clase Titulo tiene el constructor adicional que acepta un objeto TituloOmdb y que estás manejando correctamente la conversión de los datos, incluyendo el manejo del runtime.

Si ya has seguido estos pasos y aún tienes problemas, podrías verificar los mensajes de error en la consola para obtener más pistas sobre lo que podría estar fallando. También asegúrate de que tu clave de API de OMDb sea válida y que las solicitudes HTTP estén funcionando correctamente.

Espero que estas sugerencias te sean útiles. ¡Espero haber ayudado y buenos estudios!