2
respostas

Consumindo a API do OMDb

Passo 1: Preparação - Dependências e Chave da API

XML

<dependencies>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.17.1</version> </dependency>
</dependencies>

usando Gradle, adicione ao seu build.gradle:

Gradle

dependencies {
    implementation 'com.fasterxml.jackson.core:jackson-databind:2.17.1' // Use a versão mais recente
}

"[SUA_API_KEY]"

Passo 2: Criar a Classe TituloOmdb (DTO para o JSON da API)

import com.fasterxml.jackson.annotation.JsonAlias;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;

@JsonIgnoreProperties(ignoreUnknown = true) // Ignora campos JSON que não estão nesta classe
public class TituloOmdb {
    @JsonAlias("Title")
    private String titulo;

    @JsonAlias("Year")
    private String anoDeLancamento;

    @JsonAlias("Runtime")
    private String tempoDeDuracao;

    @JsonAlias("Plot")
    private String sinopse;

    @JsonAlias("Response") // Campo que indica se a busca foi bem-sucedida ("True"/"False")
    private String resposta;

    @JsonAlias("Error") // Campo de erro se a busca não for bem-sucedida
    private String erro;


    // Construtor padrão (necessário para Jackson deserializar)
    public TituloOmdb() {
    }

    // --- Getters ---
    public String getTitulo() {
        return titulo;
    }

    public String getAnoDeLancamento() {
        return anoDeLancamento;
    }

    public String getTempoDeDuracao() {
        return tempoDeDuracao;
    }

    public String getSinopse() {
        return sinopse;
    }

    public String getResposta() {
        return resposta;
    }

    public String getErro() {
        return erro;
    }

    // --- Setters (Jackson usa setters para preencher os campos) ---
    public void setTitulo(String titulo) {
        this.titulo = titulo;
    }

    public void setAnoDeLancamento(String anoDeLancamento) {
        this.anoDeLancamento = anoDeLancamento;
    }

    public void setTempoDeDuracao(String tempoDeDuracao) {
        this.tempoDeDuracao = tempoDeDuracao;
    }

    public void setSinopse(String sinopse) {
        this.sinopse = sinopse;
    }

    public void setResposta(String resposta) {
        this.resposta = resposta;
    }

    public void setErro(String erro) {
        this.erro = erro;
    }


    @Override
    public String toString() {
        return "Título: '" + titulo + '\'' +
               ", Ano: " + anoDeLancamento +
               ", Duração: " + tempoDeDuracao +
               "\nSinopse: " + sinopse;
    }
}
2 respostas

Passo 3: Criar a Classe PrincipalComBusca

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.Scanner;

import com.fasterxml.jackson.databind.ObjectMapper;

public class PrincipalComBusca {

    // **IMPORTANTE:** Substitua "[SUA_API_KEY_OMDB]" pela sua chave real do OMDb.
    private static final String API_KEY = "YOUR_OMDB_API_KEY_HERE"; // <-- Troque por sua chave!

    public static void main(String[] args) {
        Scanner leitura = new Scanner(System.in);
        String busca = "";

        while (true) { // Loop infinito para buscar vários títulos
            System.out.println("Digite o nome do filme/série para buscar (ou 'sair' para encerrar):");
            busca = leitura.nextLine();

            if (busca.equalsIgnoreCase("sair")) {
                break; // Sai do loop se o usuário digitar "sair"
            }

            // Codifica a busca para ser segura em URLs (ex: espaços viram %20)
            String endereco = "https://www.omdbapi.com/?t=" + busca.replace(" ", "+") + "&apikey=" + API_KEY;

            try {
                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();
                System.out.println("\nJSON Bruto Recebido:\n" + json + "\n");

                ObjectMapper mapper = new ObjectMapper();
                TituloOmdb meuTituloOmdb = mapper.readValue(json, TituloOmdb.class);

                // Verifica se a API retornou sucesso ou erro
                if (meuTituloOmdb.getResposta().equalsIgnoreCase("True")) {
                    System.out.println("--- Título Encontrado ---");
                    System.out.println(meuTituloOmdb); // Chama o toString() de TituloOmdb
                } else {
                    System.out.println("Erro: " + meuTituloOmdb.getErro());
                    System.out.println("Filme/Série não encontrado(a) para a busca: " + busca);
                }

            } catch (IOException e) {
                System.err.println("Erro de IO (entrada/saída) ao comunicar com a API: " + e.getMessage());
                e.printStackTrace();
            } catch (InterruptedException e) {
                System.err.println("A requisição foi interrompida: " + e.getMessage());
                e.printStackTrace();
            } catch (Exception e) { // Captura outras exceções genéricas
                System.err.println("Ocorreu um erro inesperado: " + e.getMessage());
                e.printStackTrace();
            }
            System.out.println("\n-------------------------------------------------\n");
        }
            System.out.println("Aplicação encerrada.");
        leitura.close();
    }
}

Como testar: Chave da API: Certifique-se de que você substituiu YOUR_OMDB_API_KEY_HERE no arquivo PrincipalComBusca.java pela sua chave real do OMDb. Organização: Salve TituloOmdb.java e PrincipalComBusca.java na mesma pasta (ou na estrutura de pacotes do seu projeto). Compilar (via terminal): Navegue até a pasta onde estão os arquivos e execute:

Bash

javac -cp ".;path/to/jackson-databind.jar;path/to/jackson-annotations.jar;path/to/jackson-core.jar" *.java

No Linux/macOS, use : em vez de ; para o classpath

javac -cp ".:path/to/jackson-databind.jar:path/to/jackson-annotations.jar:path/to/jackson-core.jar" *.java

Ou, se você configurou o Maven/Gradle, basta usar os comandos de build do seu gerenciador de dependências (mvn compile ou gradle build). Executar (via terminal):

Bash

java -cp ".;path/to/jackson-databind.jar;path/to/jackson-annotations.jar;path/to/jackson-core.jar" PrincipalComBusca

No Linux/macOS, use : em vez de ; para o classpath

java -cp ".:path/to/jackson-databind.jar:path/to/jackson-annotations.jar:path/to/jackson-core.jar" PrincipalComBusca

Se estiver usando Maven/Gradle/IDE, execute a classe PrincipalComBusca diretamente pela sua IDE.

Oii, Daiane!

Obrigada por compartilhar sua implementação da API do OMDb com a gente.

Sua solução tá muito bem estruturada! A criação da classe TituloOmdb com anotações do Jackson foi precisa, permitindo uma desserialização fluida do JSON. O tratamento de erros na PrincipalComBusca também tá bem completo, com mensagens claras para falhas comuns, o que é essencial para experiências reais de consumo de API.

Parabéns pelo cuidado nos detalhes e pela organização do código!

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!