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

[Sugerencia] Solución al Desafio

Dejo mi propuesta, escucho puntos de mejora.

package com.alura.screenmatch.principal;

import com.alura.screenmatch.modelos.DatosPeliculaStarWars;
import com.alura.screenmatch.modelos.PeliculaStarWars;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

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.ArrayList;
import java.util.InputMismatchException;
import java.util.List;
import java.util.Scanner;

public class PrincipalStarWars {

    private final String baseUrl = "https://swapi.py4e.com/api/films/";

    public void datosPelicula() throws IOException, InterruptedException {
        Scanner busqueda = new Scanner(System.in);
        int opcionElegida=0;
        String menu= """
                ********************
                1. Busqueda de Pelicula
                2. Salir
                """;
        List<PeliculaStarWars> listaDePeliculas = new ArrayList<>();
        Gson gson = new GsonBuilder()
                .setPrettyPrinting()
                .create();
            while (opcionElegida != 2) {
                try {
                    System.out.println(menu);
                    System.out.println("Por favor ingrese una opción: ");
                    opcionElegida = busqueda.nextInt();
                    busqueda.nextLine();
                    if (opcionElegida!=1&&opcionElegida!=2){
                        System.out.println("Opción inválida, intente nuevamente\n");
                        System.out.println(menu);
                        System.out.println("Por favor ingrese una opción: ");
                        opcionElegida = busqueda.nextInt();
                        busqueda.nextLine();
                    }
                    if (opcionElegida == 1) {
                        int numeroPelicula=0;
                        boolean validacion=false;
                        while (!validacion) {
                            System.out.println("Por favor ingrese el # de película:  ");
                            if (busqueda.hasNextInt()) {
                                numeroPelicula = busqueda.nextInt();
                                validacion= true;
                            } else {
                                System.out.println("Por favor ingrese un número válido.");
                                busqueda.nextLine();
                            }
                        }
                        String direccion = baseUrl + numeroPelicula + "/";
                        HttpClient client = HttpClient.newHttpClient();
                        HttpRequest request = HttpRequest.newBuilder()
                                .uri(URI.create(direccion))
                                .build();
                        HttpResponse<String> response = client
                                .send(request, HttpResponse.BodyHandlers.ofString());
                        int codigo = response.statusCode();
                        if (codigo == 404) { // URL no encontrada
                            System.out.println("Dirección de URL no encontrada. Código de estado: 404");
                            break;
                        }
                        String json = response.body();
                        DatosPeliculaStarWars datosPeliculaStarWars = gson
                                .fromJson(json, DatosPeliculaStarWars.class);
                        PeliculaStarWars peliculaStarWars = new PeliculaStarWars(datosPeliculaStarWars);
                        System.out.println(peliculaStarWars);
                        System.out.println("");
                        listaDePeliculas.add(peliculaStarWars);
                    }
                }catch (InputMismatchException e) {
                    System.out.println("Opción inválida, intente nuevamente");
                    busqueda.nextLine();
                }
            }
            System.out.println(listaDePeliculas);
            FileWriter escritura =new FileWriter("Películas Star Wars.json");
            escritura.write(gson.toJson(listaDePeliculas));
            escritura.close();
            System.out.println("Cerrando aplicación...");
        }
    }

screen

1 respuesta

¡Hola Daniel! Espero te encuentres bien.

Gracias por tu aporte en el foro. Su contribución es esencial para el crecimiento de nuestra comunidad en Alura.

Sigue así y no dudes en volver al foro si tienes alguna pregunta o dificultad.

Abrazos y buenos estudios!

Si este post te ayudó, por favor, marca como solucionado ✓. Continúa con tus estudios!