Consumo de API y guardado en .JSON
package com.diego.screenmatch.api;
import com.diego.screenmatch.modelos.Titulo;
import com.diego.screenmatch.modelos.TituloSw;
import com.google.gson.FieldNamingPolicy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonSyntaxException;
import java.io.FileWriter;
import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.List;
public class SWAPI {
private final HttpClient client = HttpClient.newHttpClient();
public Titulo obtenerDatos(String busqueda) throws IOException, InterruptedException {
String url = "https://swapi.py4e.com/api/films/" + busqueda + "/";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.build();
HttpResponse<String> response = client.send(
request,
HttpResponse.BodyHandlers.ofString()
);
if (response.statusCode() != 200) {
throw new RuntimeException("Error API: " + response.statusCode());
}
return parsearJsonSw(response.body());
}
private Titulo parsearJsonSw(String json) {
Gson gson = new GsonBuilder()
.setPrettyPrinting()
.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
.create();
try {
TituloSw tituloSw = gson.fromJson(json, TituloSw.class);
return new Titulo(tituloSw);
} catch (JsonSyntaxException e) {
throw new RuntimeException("Error en la sintaxis JSON: " + e.getMessage(), e);
}
}
public void GuardarJson(List<Titulo> titulos) throws IOException {
Gson gson = new GsonBuilder()
.setPrettyPrinting()
.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
.create();
FileWriter escritura = new FileWriter("titulos.json");
escritura.write(gson.toJson(titulos));
escritura.close();
}
}
Main y menú
package com.diego.screenmatch.principal;
import com.diego.screenmatch.api.SWAPI;
import com.diego.screenmatch.modelos.Titulo;
import com.diego.screenmatch.ui.Menu;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class PrincipalSWAPI {
public static void main(String[] args) throws IOException {
Menu menu = new Menu();
SWAPI api = new SWAPI();
Titulo tituloSw;
List<Titulo> titulos = new ArrayList<>();
while (true) {
System.out.println("\n1. A New Hope");
System.out.println("2. The Empire Strikes Back");
System.out.println("3. Return of the Jedi");
System.out.println("4. The Phantom Menace");
System.out.println("5. Attack of the Clones");
System.out.println("6. Revenge of the Sith");
System.out.println("7. The Force Awakens");
String busqueda = menu.solicitarBusqueda();
if (busqueda == null) {
System.out.println("\nSaliendo del programa...");
break;
}
try{
tituloSw = api.obtenerDatos(busqueda);
System.out.println("\n" + tituloSw);
titulos.add(tituloSw);
}catch (Exception e) {
System.out.println("Error: " + e.getMessage());
}
}
api.GuardarJson(titulos);
System.out.println(titulos);
}
}
modelo
package com.diego.screenmatch.modelos;
public record TituloSw(String title, String release_date, String producer) {
@Override
public String toString() {
return "(nombre=" + title +
", producer= " + producer +
", fechaDeLanzamiento=" + release_date + ")";
}
}
Titulo
public class Titulo implements Comparable<Titulo>{
private String nombre;
private String producer;
private String release_date;
public Titulo(TituloSw tituloSw) {
this.nombre = tituloSw.title();
this.producer = tituloSw.producer();
this.release_date = tituloSw.release_date();
}
@Override
public String toString() {
return "(nombre=" + nombre +
", fechaDeLanzamiento=" + fechaDeLanzamiento +
", duracionEnMinutos=" + duracionEnMinutos + ")";
}