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

desafio API star war

Clase principal.

import java.io.IOException;
import java.util.Scanner;

public class Principal {
    public static void main(String[] args) {
        Scanner lectura = new Scanner(System.in);
        ConsultaApi consulta = new ConsultaApi();
        System.out.println("Escribe el numero de la pelicula de Star war que buscas: ");
        try{
            var numeroPelicula = Integer.valueOf(lectura.nextLine());
            Pelicula pelicula =  consulta.buscaPelicula(numeroPelicula);
            System.out.println(pelicula);

            GeneradorDeArchivos generar = new GeneradorDeArchivos();
            generar.guardarJson(pelicula);
        }catch (NumberFormatException e){
            System.out.println("Numero no encontrado" + e.getMessage());
        } catch (RuntimeException | IOException e){
            System.out.println(e.getMessage());
            System.out.println("Finalizando la ejecucion...");
        }


        /**System.out.println("Título: " + pelicula.titulo());
        System.out.println("Episodio: " + pelicula.id_episodio());
        System.out.println("Director: " + pelicula.director());
        System.out.println("Fecha: " + pelicula.fechaLanzamiento());*/
    }
}

Clase que genera archivo

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

import java.io.FileWriter;
import java.io.IOException;

public class GeneradorDeArchivos {
    public void guardarJson(Pelicula pelicula) throws IOException {
        Gson gson = new GsonBuilder().setPrettyPrinting().create();
        FileWriter archivo = new FileWriter(pelicula.titulo() + ".json");
        archivo.write(gson.toJson(pelicula));
        archivo.close();
    }
}

clase para consultar la SWAPI

import com.google.gson.Gson;

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 {

    Pelicula buscaPelicula(int numeroDePelicula){
        URI direccion = URI.create("https://swapi.py4e.com/api/films/" + numeroDePelicula + "/");

        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder().uri(direccion).build();

        try {
            HttpResponse<String> response = client.send(
                    request, HttpResponse.BodyHandlers.ofString()
            );
            return new Gson().fromJson(response.body(), Pelicula.class);
        } catch (Exception e) {
            throw new RuntimeException("No se encontro esa pelicula", e);
        }
    }
}

records

import com.google.gson.annotations.SerializedName;

public record Pelicula(
        @SerializedName("title")
        String titulo,
        @SerializedName("episode_id")
        int id_episodio,
        @SerializedName("opening_crawl")
        String opening,
        String director,
        @SerializedName("producer")
        String productor,
        @SerializedName("release_date")
        String fechaLanzamiento
)
{

}
1 respuesta

Hola Jose, espero que estés bien

Parece que estás trabajando en un proyecto que consume datos de la API de Star Wars y genera archivos JSON a partir de la información obtenida. Tu código se ve bastante bien estructurado, pero hay algunas cosas que podrías revisar para asegurarte de que todo funcione correctamente.

  1. Validación del número de película: Asegúrate de que el número de película que ingresas esté dentro del rango válido de la API de Star Wars. Por ejemplo, si ingresas un número que no corresponde a ninguna película existente, la API podría devolver un error.

  2. Manejo de excepciones: Estás manejando bien las excepciones, pero podrías considerar agregar más detalles en los mensajes de error para facilitar la depuración. Por ejemplo, podrías imprimir el código de estado HTTP si la respuesta no es exitosa.

  3. Cerrar recursos: Aunque estás cerrando el FileWriter correctamente, es una buena práctica utilizar un bloque try-with-resources para manejar automáticamente el cierre de recursos. Esto también se aplica al Scanner.

Aquí tienes un ejemplo de cómo podrías modificar el código para el manejo de recursos:

try (Scanner lectura = new Scanner(System.in)) {
    System.out.println("Escribe el numero de la pelicula de Star war que buscas: ");
    var numeroPelicula = Integer.valueOf(lectura.nextLine());
    Pelicula pelicula = consulta.buscaPelicula(numeroPelicula);
    System.out.println(pelicula);

    try (FileWriter archivo = new FileWriter(pelicula.titulo() + ".json")) {
        Gson gson = new GsonBuilder().setPrettyPrinting().create();
        archivo.write(gson.toJson(pelicula));
    }
} catch (NumberFormatException e) {
    System.out.println("Numero no encontrado: " + e.getMessage());
} catch (RuntimeException | IOException e) {
    System.out.println(e.getMessage());
    System.out.println("Finalizando la ejecucion...");
}

Espero que estas sugerencias te ayuden a mejorar tu aplicación. ¡Bons estudios!