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