Dentro de la clase 4 persistiendo datos en archivos cuando se termina el ultimo video de escribiendo la lista de peliculas en json, el instructor manda un desafio de refactorizar la clase main, estoy siguiendo las clases sugeridas:
- una encargada para obtener las peliculas
- otra para guardar las peliculas en JSON
- otra para transformar lo que viene del api de OMDB en la clase titulo
nada mas que me quede atorado en ideas :c, por ahora lo tengo asi comentado
package principal;
import com.aluracursos.screenmatch.modelos.Titulo;
import com.aluracursos.screenmatch.dto.TituloOmdb;
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.io.UnsupportedEncodingException;
import java.net.URI;
import java.net.URLEncoder;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class PrincipalConBusqueda {
static void main(String[] args) throws IOException, InterruptedException {
Scanner lectura = new Scanner(System.in);
List<Titulo> titulos = new ArrayList<>();
Gson gson = new GsonBuilder()
.setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)
.setPrettyPrinting()
.create();
String baseUrl = "http://www.omdbapi.com/?t=";
String apiKey = "&apikey=18fcf0c5";
while (true) {
System.out.println("Escribe el nombre de la pelicula que quieres buscar: ");
var busqueda = lectura.nextLine();
if (busqueda.equalsIgnoreCase("salir")){
break;
}
String direccionEncoder = URLEncoder.encode( busqueda, StandardCharsets.UTF_8 );
String direccion = baseUrl + direccionEncoder + apiKey;
try {
//clase encargada de guardar las peliculas en json
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();
System.out.println(json);
TituloOmdb miTituloOmdb = gson.fromJson(json, TituloOmdb.class);
System.out.println(miTituloOmdb);
Titulo miTitulo = new Titulo(miTituloOmdb);
System.out.println(miTitulo);
titulos.add(miTitulo);
//Exceptions
} catch (NumberFormatException e) {
System.out.println("La pelicula no cuenta con un valor valido 'runtime': " + e.getMessage());
} catch (RuntimeException e) {
System.out.println("Error, se malinterpreta: " + e.getMessage());
} catch (UnsupportedEncodingException e){
System.out.println("Error con la clase encoder: " + e.getMessage());
}
}
System.out.println(titulos);
//clase encargada de transformar lo que viene de omdb en la clase titulo
//FileWriter
FileWriter escritura = new FileWriter("Titulos.json");
escritura.write(gson.toJson(titulos));
//cerramos la escritura
escritura.close();
System.out.println("Fin del programa");
}
}
pero no se si sea suficiente, me hago bolas solo