1
resposta

[FAÇA COMO EU FIZ] MINHA VERSÅO DO CODIGO

Codigo da minha classe principal

package br.com.alura.screenmatch.Main;
import br.com.alura.screenmatch.Excecao.ErroDeFormatacao;
import br.com.alura.screenmatch.Modelos.Filme;
import br.com.alura.screenmatch.Modelos.Titulo;
import br.com.alura.screenmatch.Modelos.TituloOmdb;
import br.com.alura.screenmatch.Static.Encoder;
import br.com.alura.screenmatch.Static.RequestHttp;
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.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 MainSearch {
    public static void main(String[] args) throws IOException, InterruptedException {
        //DEFININDO VARIAVEL DE AMBIENTE
        String API = System.getenv("OMDB_API_KEY");
        List<Titulo> meusFilmes = new ArrayList<>();
//        CRIANDO O SCANNER
        Scanner query = new Scanner(System.in);

        var busca = "";
//        CRIANDO NOSSO OBJETO GSON PARA SERIALIZAÇÃO E DESSERIALIZAÇÃO
        Gson gson = new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE).setPrettyPrinting().create();
        do {
            try {
                System.out.println("Digite o filme que você deseja buscar: ");
//               BUSCANDO E ENCODANDO A NOSSA BUSCA PARA ESTAR DE ACORDO COM OS PADROES DO NAVEGADOR
                busca = query.nextLine();
                if(busca.equalsIgnoreCase("sair")) {
                    break;
                }
                String endereco = "https://www.omdbapi.com/?t=" + Encoder.EncodeString(busca) + "&apikey="+API;
                TituloOmdb meuFilmeOmdb = gson.fromJson(RequestHttp.CreateRequest(endereco), TituloOmdb.class);
                Titulo meuTitulo = new Titulo(meuFilmeOmdb);
                System.out.println(meuTitulo);
                meusFilmes.add(meuTitulo);

            } catch (NumberFormatException e) {
                System.out.println("Erro na formataçåo de um número");
                System.out.println(e.getMessage());
                break;
            } catch (ErroDeFormatacao e) {
                System.out.println(e.getMessage());
                break;
            } catch (IllegalArgumentException e) {
                System.out.println("Problema com a url, corrija ela!");
                System.out.println(e.getMessage());
                break;
            }
        }
        while(!busca.equalsIgnoreCase("sair"));
        FileWriter escrita = new FileWriter("filmes.json");
        escrita.write(gson.toJson(meusFilmes));
        escrita.close();
    }
}

Codigo de algumas classes com metodos estaticos que eu criei pra tentar delegar outras funções, tentei enxugar o máximo possível, mas voltarei nesse codigo daqui uns meses pra rever.

package br.com.alura.screenmatch.Static;

import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;

public class Encoder {

    public static String EncodeString(String query) {
        return URLEncoder.encode(query, StandardCharsets.UTF_8);
    }
}
package br.com.alura.screenmatch.Static;

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 RequestHttp {
    private String json;

    public static String CreateRequest(String endereco) throws IOException, InterruptedException {
        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create(endereco))
                .build();

        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        String json = response.body();
        return json;
    }
}
1 resposta

Olá, Daniel, como vai?

Muito bom ver sua iniciativa em compartilhar a versão do seu código! Seu esforço em organizar e delegar funções para métodos estáticos demonstra um bom entendimento dos conceitos abordados na aula, especialmente na parte de consumir APIs e manipular arquivos.

Continue assim! Rever o código após alguns meses é uma excelente prática para identificar melhorias e aperfeiçoar suas habilidades. O fórum está sempre à disposição para qualquer dúvida.

Abraços e bons estudos!