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

GeminiAI & OMDB API´s Connection - Java Spring Boot

Principal

package com.aluracursos.screenmatch.principal;

import com.aluracursos.screenmatch.model.DatosSerie;
import com.aluracursos.screenmatch.model.DatosTemporadas;
import com.aluracursos.screenmatch.model.Serie;
import com.aluracursos.screenmatch.service.ConsultaGemini;
import com.aluracursos.screenmatch.service.ConsumoAPI;
import com.aluracursos.screenmatch.service.ConvierteDatos;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;

public class Principal {
    private Scanner teclado = new Scanner(System.in);
    private ConsumoAPI consumoApi = new ConsumoAPI();
    private final String URL_BASE = "https://www.omdbapi.com/?t=";
    private final String API_KEY = "&apikey=16e2879";
    private ConvierteDatos conversor = new ConvierteDatos();
    private List<DatosSerie> datosSeries = new ArrayList<>();
    public void muestraElMenu() {
        var opcion = -1;
        while (opcion != 0) {
            var menu = """
                    1 - Buscar series 
                    2 - Buscar episodios
                    3 - Mostrar series buscadas
                                  
                    0 - Salir
                    """;
            System.out.println(menu);
            opcion = teclado.nextInt();
            teclado.nextLine();

            switch (opcion) {
                case 1:
                    buscarSerieWeb();
                    break;
                case 2:
                    buscarEpisodioPorSerie();
                    break;
                case 3:
                    mostrarSeriesBuscadas();
                    break;

                case 0:
                    System.out.println("Cerrando la aplicación...");
                    break;
                default:
                    System.out.println("Opción inválida");
            }
        }

    }

    private DatosSerie getDatosSerie() {
        System.out.println("Escribe el nombre de la serie que deseas buscar");
        var nombreSerie = teclado.nextLine();
        var json = consumoApi.obtenerDatos(URL_BASE + nombreSerie.replace(" ", "+") + API_KEY);
        System.out.println(json);
        DatosSerie datos = conversor.obtenerDatos(json, DatosSerie.class);
        return datos;
    }
    private void buscarEpisodioPorSerie() {
        DatosSerie datosSerie = getDatosSerie();
        List<DatosTemporadas> temporadas = new ArrayList<>();

        for (int i = 1; i <= datosSerie.totalTemporadas(); i++) {
            var json = consumoApi.obtenerDatos(URL_BASE + datosSerie.titulo().replace(" ", "+") + "&season=" + i + API_KEY);
            DatosTemporadas datosTemporada = conversor.obtenerDatos(json, DatosTemporadas.class);
            temporadas.add(datosTemporada);
        }
        temporadas.forEach(System.out::println);
    }
    private void buscarSerieWeb() {
        DatosSerie datos = getDatosSerie();
        datosSeries.add(datos);
        System.out.println(datos);
    }

    private void mostrarSeriesBuscadas() {
        List<Serie> series = new ArrayList<>();
        series = datosSeries.stream()
                .map(d -> new Serie(d))
                .toList();

        series.stream()
                .sorted(Comparator.comparing(Serie::getGenero))
                .forEach(System.out::println);
    }
}

ConsultaGemini

package com.aluracursos.screenmatch.service;

import com.google.genai.Client;
import com.google.genai.types.GenerateContentResponse;

public class ConsultaGemini {
    public static String obtenerTraduccion(String texto) {
        String modelo = "gemini-2.0-flash-lite";
        String prompt = "Traduce el siguiente texto al español: " + texto;

        Client cliente = new Client.Builder().apiKey("API_KEY").build();

        try {
            GenerateContentResponse respuesta = cliente.models.generateContent(
                    modelo,
                    prompt,
                    null // Parámetro para configuraciones adicionales
            );

            if (!respuesta.text().isEmpty()) {
                return respuesta.text();
            }
        } catch (Exception e) {
            System.err.println("Error al llamar a la API de Gemini para traducción: " + e.getMessage());
        }

        return null;
    }
}

Implementación traducción con GEMINI

public Serie(DatosSerie datosSerie){
        this.titulo = datosSerie.titulo();
        this.totalTemporadas = datosSerie.totalTemporadas();
        this.evaluacion = String.valueOf(OptionalDouble.of(Double.valueOf(datosSerie.evaluacion())).orElse(0));
        this.poster = datosSerie.poster();
        this.genero = Categoria.fromString(datosSerie.genero().split(",")[0].trim());
        this.actores = datosSerie.actores();
        this.sinopsis = ConsultaGemini.obtenerTraduccion(datosSerie.sinopsis());
    }
1 respuesta

Hola Diego, espero que estés bien

Parece que estás trabajando en un proyecto que integra la API de OMDB con una funcionalidad de traducción usando la API de Gemini. Vamos a revisar algunos puntos que podrían ayudarte a avanzar:

  1. Conexión con la API de OMDB: En tu clase Principal, ya tienes configurado el método para buscar series y episodios. Asegúrate de que la clave de API de OMDB esté correcta y activa. Si encuentras algún problema al obtener datos, verifica que el formato de la URL sea correcto.

  2. Uso de la API de Gemini para traducción: En la clase ConsultaGemini, asegúrate de que la clave de API esté configurada correctamente. Si la traducción no funciona, revisa que el modelo y el prompt estén bien definidos. También, asegúrate de manejar adecuadamente las excepciones para detectar cualquier problema de conexión.

  3. Modelado de la clase Serie: Has implementado la traducción de la sinopsis al crear una instancia de Serie. Esto es una buena práctica para enriquecer los datos que obtienes. Asegúrate de que la clase Categoria y el método fromString estén correctamente implementados para evitar errores al asignar el género.

  4. Menú de interacción: Tu menú en la clase Principal parece estar bien estructurado. Si deseas expandirlo, podrías agregar más opciones, como buscar por género o actores. Esto haría el programa más interactivo.

  5. Manejo de datos: Cuando muestras las series buscadas, estás ordenando por género. Si quieres mejorar la visualización, podrías considerar mostrar más detalles o permitir filtros adicionales.

Recuerda siempre probar cada funcionalidad de manera individual para asegurarte de que todo esté funcionando correctamente antes de integrarlo todo junto.

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