Segue a resolução do exercício:
Record TituloOmdb:
package br.com.alura.screenmatch.modelos;
public record TituloOmdb(String title, String year, String runtime) {
}
Classe Título:
package br.com.alura.screenmatch.modelos;
import br.com.alura.screenmatch.calculos.Classificavel;
public class Titulo implements Comparable<Titulo>{
private String nome;
private int anoDeLancamento;
private int duracaoEmMinutos;
private boolean incluidoNoPlano;
private double somaDasAvaliacoes;
private int totalDeAvaliacoes;
public Titulo(String nome, int anoDeLancamento) {
this.nome = nome;
this.anoDeLancamento = anoDeLancamento;
}
public Titulo(TituloOmdb tituloOmdb) {
this.nome = tituloOmdb.title();
this.anoDeLancamento = Integer.parseInt(tituloOmdb.year().
replace("-", ""));
this.duracaoEmMinutos = Integer.parseInt(tituloOmdb.runtime().
replace(" min", ""));
}
// Getters and Setters
public double pegaMedia() {
if (totalDeAvaliacoes != 0) {
return somaDasAvaliacoes/totalDeAvaliacoes;
} else {
return 0.0;
}
}
public void avalia(double avaliacao){
somaDasAvaliacoes += avaliacao;
totalDeAvaliacoes++;
}
@Override
public String toString() {
return "[" + this.getNome() + " (" + this.getAnoDeLancamento() + ")" +
", duração: " + this.getDuracaoEmMinutos() + " minutos]";
}
@Override
public int compareTo(Titulo o) {
return this.getNome().compareTo(o.getNome());
}
}
Classe ConsultaAPI:
package br.com.alura.screenmatch.modelos;
import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class ConsultaAPI {
public String consultaAPI(String url) throws IOException, InterruptedException {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url)).build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
return response.body();
}
}
Classe PrincipalComBusca:
package br.com.alura.screenmatch.principal;
import br.com.alura.screenmatch.modelos.ConsultaAPI;
import br.com.alura.screenmatch.modelos.Titulo;
import br.com.alura.screenmatch.modelos.TituloOmdb;
import com.google.gson.FieldNamingPolicy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.io.IOException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.Scanner;
public class PrincipalComBusca {
public static void main(String[] args) throws IOException, InterruptedException {
Scanner sc = new Scanner(System.in);
System.out.println("Digite o nome do filme: ");
String nomeFilme = sc.nextLine();
String nomeFilmeCodificado = URLEncoder.encode(nomeFilme, StandardCharsets.UTF_8);
String OMDB_API_KEY = "api_key_pessoal";
String endereco = "https://www.omdbapi.com/?t=" + nomeFilmeCodificado + "&apikey=" + OMDB_API_KEY;
ConsultaAPI consulta = new ConsultaAPI();
consulta.consultaAPI(endereco);
System.out.println(consulta.consultaAPI(endereco));
String json = consulta.consultaAPI(endereco);
Gson gson = new GsonBuilder()
.setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)
.create();
TituloOmdb tituloOmdb = gson.fromJson(json, TituloOmdb.class);
System.out.println(tituloOmdb);
Titulo meuTitulo = new Titulo(tituloOmdb);
System.out.println(meuTitulo);
sc.close();
}
}
Output:
Digite o nome do filme:
matrix
Json de retorno da API: {"Title":"Matrix","Year":"1993",...,"Runtime":"60 min",...}
TítuloOmdb: TituloOmdb[title=Matrix, year=1993, runtime=60 min]
Título convertido: [Matrix (1993), duração: 60 minutos]
Process finished with exit code 0