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

Proyecto final

Principal.java

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

public class Principal {
    public static void main(String[] args) {
        Scanner lectura = new Scanner(System.in);
        System.out.println("Escribe el número de la película de Star Wars que quieres consultar");
        ConsultaPelicula consulta = new ConsultaPelicula();
        try {
            var numeroDePelicula = Integer.valueOf(lectura.nextLine());
            Pelicula pelicula = consulta.buscaPelicula(numeroDePelicula);
            System.out.println(pelicula);
            GeneradorDeArchivo generador = new GeneradorDeArchivo();
            generador.guardarJson(pelicula);
        } catch (NumberFormatException e){
            System.out.println("Número no econtrado " + e.getMessage());
        } catch (RuntimeException | IOException e){
            System.out.println(e.getMessage());
            System.out.println("Finalizando la aplicación.");
        }

    }
}

GeneradorDeArchivo.java

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

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

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

ConsultaPelicula.java

import com.google.gson.Gson;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class ConsultaPelicula {

    public Pelicula buscaPelicula(int numeroDePelicula) {
        URI direccion = URI.create("https://swapi.info/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 encontre esa película.");
        }

    }
}

Pelicula.java

public record Pelicula(String title,
                       int episode_id,
                       String opening_crawl,
                       String director,
                       String producer,
                       String realise_date) {
}
1 respuesta

Hola, Sebastian.

Parece que estás trabajando en un proyecto para consumir una API de Star Wars y guardar la información de las películas en un archivo JSON. Tu código se ve bastante bien estructurado, pero hay un pequeño detalle que podría estar causando problemas.

En tu clase ConsultaPelicula, estás utilizando la URL https://swapi.info/api/films/ para realizar la consulta. Sin embargo, la URL correcta para la API de Star Wars es https://swapi.dev/api/films/. Asegúrate de cambiar la URL en tu código para que las consultas funcionen correctamente.

Aquí tienes la corrección en tu método buscaPelicula:

public Pelicula buscaPelicula(int numeroDePelicula) {
    URI direccion = URI.create("https://swapi.dev/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 encontré esa película.");
    }
}

Además, asegúrate de que el número de película que introduces coincide con los disponibles en la API. Por ejemplo, para la API de Star Wars, los números válidos son del 1 al 6, que corresponden a las películas clásicas.

Espero que esta corrección te ayude a avanzar con tu proyecto. ¡Buenos estudios!