Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

OBG. POR EXPLICAR Mª ISABEL-RESPONDI DE NOVO TBM EM 03.06.24!. 'FILME CRIADO NA APIKEY MOSTRA UM CÓDIGO E NÃO UM NOME DE FILME.

Olá. Ao me cadastrar na OMDb e criar minha ApiKey, me retornaram uma chave com um "código" como referênca ao filme aleatório de teste(A ApiKey da instrutora no vídeo tem o nome do filme Top Gun). E no PrincipalComBusca a resposta para a solictação "Digite um filme para busca" só aparece corretamente se digitar esse código que recebi no campo de resposta (no meu caso é** tt3896198**). E ao buscar o nome do filme "Dogville" como a instrutora faz no vídeo retornou um erro. Peço por favor uma orientação sobre isso. Porque não funcionou comigo? Agradeço.

MEU ENDEREÇO DA APIKEY: https://www.omdbapi.com/?i=tt3896198&apikey=48990729

Insira aqui a descrição dessa imagem para ajudar na acessibilidadeInsira aqui a descrição dessa imagem para ajudar na acessibilidade

EDIÇÃO DE 01.06.24

NÃO TINHA DEIXADO O PRINT MOSTRANDO O ERRO QUE DÁ AO DIGITAR O NOME DO FILME PARA A BUSCA. COMO DISSE ANTES, SÓ RETORNA O NOME DO FILME QUANDO DIGITA O CÓDIGO QUE VEIO NA APIKEY QUE MOSTRO NO PRIMEIRO PRINT. MAS SE O ENDEREÇO SOLICITADO NO CÓDIGO JAVA CORRESPONDE AO FILME GERADO PELO CÓDIGO DA CHAVE API, PORQUE A IDE NÃO RECONHECE AO DIGITAR O NOME DO FILME SE O CÓDIGO NÃO APRESENTA ERROS?

TEM 3 LINKS NO CAMPO DE ERRO QUE NÃO ENTENDI O QUE PODE ESTAR EXPLICANDO LÁ. AGRADEÇO A A TENÇÃO E ORIENTAÇÃO QUE PUDEREM DAR. Insira aqui a descrição dessa imagem para ajudar na acessibilidadeInsira aqui a descrição dessa imagem para ajudar na acessibilidade

4 respostas

Oii, Ana, tudo bem?

O problema está na forma como você está construindo a URL para fazer a solicitação à API.

Na URL, você está utilizando ?i= para buscar pelo ID do filme (IMDb ID). Quando você quer buscar pelo nome do filme, deve usar ?t=.

Vamos ajustar seu código para corrigir esses pontos. Veja como ele deve ficar:

import java.io.IOException;
import java.net.URI;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.Scanner;

public class PrincipalComBusca {
    public static void main(String[] args) throws IOException, InterruptedException {
        Scanner leitura = new Scanner(System.in);
        System.out.println("Digite um filme para busca: ");
        var busca = leitura.nextLine();
        
        // Codifica o nome do filme para a URL
        String buscaCodificada = URLEncoder.encode(busca, StandardCharsets.UTF_8);
        
        String endereco = "https://www.omdbapi.com/?t=" + buscaCodificada + "&apikey=48990729";
        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create(endereco))
                .build();
        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        System.out.println(response.body());
    }
}

Tente rodar o código novamente, por favor, e veja se o problema foi resolvido.

Se ainda der erro, pode nos retornar aqui. :)

Abraços!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Oi Maria Isabel, o código rodou com Dogville, Top Gun e também um filme dos Beatles de 1964, mas estou sem entender as 'novas classes' inseridas no código, a java.net.URLEncoder e a java.nio.charset.StandardCharsets . Elas não foram explicadas no vídeo da aula. O código que enviei foi o resultado de seguir à risca o passo a passo dado pela instrutora também com relação aos símbolos gerados na apykey. A minha api gerada foi com a letra i ao invés do t, ou seja, eu já a recebi por e-mail assim. Mas estou entendendo sua explicação de que a letra "i" está referenciando o ID que foi gerado na chave que no meu caso é o tt3896198 e a letra "t" referencia o título do filme que é o que eu quero buscar (seja qual for o filme - um filme real de fato). Então, se estou entendendo direito, DEVO MANTER A LETRA ** T** NO PEDAÇO DO ENDEREÇO DA URL (?t=) para que a minha chave api seja 'reconhecida' para retornar a busca do nome do filme? OK! SE FOR ISSO ESTÁ ENTENDIDO. Mas quanto as 'novas classes'? Como não houve no vídeo o passo a passo do uso delas, tipo: olhar na documentação, entender porque se deve usar nesse caso e etc.. vou ficar sem saber como usá-las e quando usá-las. Agradeço muito se puder me dar um exemplo de uso num outro código, com um passo a passo.

Insira aqui a descrição dessa imagem para ajudar na acessibilidadeInsira aqui a descrição dessa imagem para ajudar na acessibilidadeInsira aqui a descrição dessa imagem para ajudar na acessibilidade

Oii, Ana!

O java.net.URLEncoder transforma uma string em um formato seguro para URL.

Já o java.nio.charset.StandardCharsets serve para fornecer acesso a conjuntos de caracteres padrão usados pelo Java.

Na nova linha, a busca pega o texto digitado pelo usuário e codifica usando a URLEncoder. O segundo argumento especifica o conjunto de caracteres usado para interpretar a string.

Acredito que a questão da dúvida entre o i e o t já foi respondida aqui.

A implementação do código é apenas para deixar sua aplicação mais segura e padronizada. Você não precisa usar as classes se não tiver interesse, tá bem?

Abraços!

solução!

Olá Isabel,

Certo. Agradeço de novo.