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