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

Haga lo que hicimos en aula

Se crea una clase

package co.ancabu.test;

import co.ancabu.excepcion.ErrorEnConversionDeDuracionException;
import com.google.gson.FieldNamingPolicy;
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.List;

public class Api_movie {
    private static String json;
    private static List listPeliculas=new ArrayList();
    public static String getmovie(String pelicula){

        try {
            HttpClient client = HttpClient.newHttpClient();
            HttpRequest request = HttpRequest.newBuilder().uri(URI.create("http://www.omdbapi.com/?apikey=5b7d7608&t=" + pelicula)).build();
            HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
            json = response.body();
            System.out.println(json);
            return json;
        } catch (NumberFormatException e) {
            System.out.println("Ocurrio un error");
            System.out.println(e.getMessage());
        } catch (IllegalArgumentException e) {
            System.out.println("Error en la URI, verifique la direccion");
        } catch (ErrorEnConversionDeDuracionException e) {
            System.out.println(e.getMessage());
        } catch (Exception e) {
            System.out.println("Ocurrio un error inesperado");
        }
        return null;
    }

    public static List saveListMovie(String movie){

        Gson gson = new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE).setPrettyPrinting().create();
        TitleOmdb myTitle = gson.fromJson(movie, TitleOmdb.class);
        System.out.println(myTitle);

        Title myTitles = new Title(myTitle);
        System.out.println(myTitles);

        listPeliculas.add(myTitles);

        return listPeliculas;
    }

    public static void exportMovies(List listPeliculas,String formato) throws IOException {
        Gson gson = new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE).setPrettyPrinting().create();
        FileWriter escribirFile = new FileWriter("Peluculas"+formato);
        escribirFile.write(gson.toJson(listPeliculas));
        escribirFile.close();
    }

}

main

package principal;
import co.ancabu.test.Api_movie;
import java.io.IOException;
import java.util.List;
import java.util.Scanner;

public class MainSearch {
    public static void main(String[] args) throws IOException, InterruptedException {
        Scanner teclado=new Scanner(System.in);
        List listPeliculas=null;
        String movies;
        while (true) {
            System.out.println("Escriba el nombre de la pelicula");
            String pelicula = teclado.next();
            if(pelicula.equals("Salir")){
                break;
            }
            movies=Api_movie.getmovie(pelicula);
            listPeliculas=Api_movie.saveListMovie(movies);
        }
        if(listPeliculas.size()>0) {
            System.out.println("En que formato desea exportar 1) .txt 2) .json");
            int selectFormato=teclado.nextInt();
            String format=selectFormato==1?".txt":".json";
            Api_movie.exportMovies(listPeliculas,format);
            System.out.println("Finalizo la ejecucion");
        }

    }
}
1 respuesta

¡Hola Estudiante, espero que estés bien!

Parece que estás trabajando en un proyecto para consumir una API de películas y guardar los resultados en un archivo. A partir del código que compartiste, parece que ya tienes una buena base, pero te puedo dar algunos consejos para asegurarte de que estás siguiendo el procedimiento que se hizo en clase.

  1. Uso de Scanner y Loop: Asegúrate de que el Scanner está leyendo correctamente los nombres de las películas y que el while loop está configurado para salir correctamente cuando el usuario escribe "Salir". En el código que compartiste, parece que esto ya está bien implementado.

  2. Construcción de la URL: Asegúrate de que la URL está siendo construida correctamente. En el ejemplo de clase, se usó busqueda.replace(" ", "+") para manejar los espacios en los nombres de las películas. Esto es importante para evitar errores en la solicitud HTTP.

  3. Uso de Gson para Conversión: Parece que ya estás usando Gson para convertir el JSON de la API en objetos Java. Asegúrate de que las clases TitleOmdb y Title están correctamente definidas para que Gson pueda mapear los datos correctamente.

  4. Exportación de Archivos: Tu método exportMovies parece estar configurado para escribir en un archivo con el formato especificado por el usuario. Asegúrate de que el nombre del archivo incluye la extensión correcta y que el archivo se cierra adecuadamente después de escribir.

  5. Manejo de Excepciones: Es importante manejar las excepciones adecuadamente para que el programa no se detenga de manera inesperada. Ya tienes varios bloques catch para manejar diferentes tipos de excepciones, lo cual es excelente.

Aquí tienes un ejemplo de cómo podrías estructurar parte de tu código basándote en lo que se hizo en clase:

if(busqueda.equalsIgnoreCase("salir")){
    break;
}

String direccion = "https://www.omdbapi.com/?t=" +
        busqueda.replace(" ", "+") +
        "&apikey=tu_apikey";

try {
    HttpClient client = HttpClient.newHttpClient();
    HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create(direccion))
            .build();
    HttpResponse<String> response = client
            .send(request, HttpResponse.BodyHandlers.ofString());

    String json = response.body();
    TituloOmdb miTituloOmdb = gson.fromJson(json, TituloOmdb.class);
    Titulo miTitulo = new Titulo(miTituloOmdb);
    titulos.add(miTitulo);
} catch (Exception e) {
    System.out.println("Ocurrió un error inesperado: " + e.getMessage());
}

Espero que estos consejos te sean útiles. ¡Buena suerte con tu proyecto! Espero haber ayudado y buenos estudios!