2
respostas

[Sugestão] Segue uma solução para este desafio - Pesquisar consumindo api's

package screenmatch.src;

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;

public class ExercicioBuscaAulaUm {
    static Scanner leitura = new Scanner(System.in);
    public static void main(String[] args) throws IOException, InterruptedException {
        String menu = """
                Escolha uma opção
                1 - Pesquisar Livro
                2 - Pesquisar cotação Criptomoeda
                3- Consultar receita no meal.com
                9- Sair
                """;
        int opcaoMenu = 0;
        while (opcaoMenu != 9) {
            System.out.println(menu);
            opcaoMenu = leitura.nextInt();
            switch (opcaoMenu) {
                case 1:
                    pesquisarLivro();
                    break;
                case 2:
                    pesquisarCotacao();
                    break;
                case 3:
                    pesquisarReceitas();
                    break;
                default:
                    System.out.println("Opção inválida!");
                    break;
            }
        }
    }

    public static void pesquisarLivro() throws IOException, InterruptedException {
        String filtroBusca;
        String endpoint;
        System.out.println("Qual livro deseja pesquisar pesquisar?");
        endpoint = "https://www.googleapis.com/books/v1/volumes?q=intitle:";
        filtroBusca = leitura.next();
        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create( endpoint+filtroBusca))
                .build();
        HttpResponse<String> response = client
                .send(request, HttpResponse.BodyHandlers.ofString());
        System.out.println(response.body());
    }

    public static void pesquisarCotacao() throws IOException, InterruptedException {
        System.out.println("Insert the name meal:");
        String endpoint = "https://api.coingecko.com/api/v3/simple/price?";
        System.out.println("Qual a Criptomoeda deseja pesquisar?");
        String filtroCriptomoeda = leitura.next();
        System.out.println("Qual tipo de moeda para verificar a cotação (BRL/USD/EUR)?");
        String moedaCotacao = leitura.next();
        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create(endpoint + "ids=" + filtroCriptomoeda + "&vs_currencies=" + moedaCotacao))
                .build();
        HttpResponse<String> response = client
                .send(request, HttpResponse.BodyHandlers.ofString());
        System.out.println(response.body());
    }

    public static void pesquisarReceitas() throws IOException, InterruptedException {

        System.out.println("Insert the name meal:");
        var filtroMeal = leitura.next();
        String endpoint = "https://www.themealdb.com/api/json/v1/1/search.php?s=" + filtroMeal;

        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request;
        request = HttpRequest.newBuilder()
                .uri(URI.create(endpoint))
                .build();
        HttpResponse<String> response = client
                .send(request, HttpResponse.BodyHandlers.ofString());
        System.out.println(response.body());
    }
}
2 respostas

Olá Marcus, tudo bem?

Obrigado por compartilhar sua solução para o desafio! Seu código parece estar bem estruturado e faz bom uso das APIs HTTP para buscar informações de livros, cotações de criptomoedas e receitas.

Aqui estão algumas observações sobre seu código:

Você criou um menu interativo que permite ao usuário escolher o tipo de pesquisa que deseja realizar. Isso é uma ótima maneira de tornar seu programa mais interativo e fácil de usar. Para cada tipo de pesquisa, você criou uma função separada (pesquisarLivro, pesquisarCotacao e pesquisarReceitas). Isso ajuda a manter seu código organizado e fácil de entender. Dentro de cada função, você está usando a classe HttpClient para enviar uma solicitação HTTP para a API relevante e imprimir a resposta. Isso é uma boa prática ao trabalhar com APIs HTTP. Você está usando o método next() do objeto Scanner para ler a entrada do usuário. Isso funciona bem para entradas de uma única palavra, mas pode não funcionar como esperado para entradas de várias palavras (por exemplo, se o usuário quiser pesquisar por um livro com um título de várias palavras). Para ler uma linha inteira de entrada, você pode usar o método nextLine() em vez de next(). Espero que isso ajude! Se você tiver mais perguntas ou precisar de mais feedback, fique à vontade para perguntar.

Olá, Pablo. Essa questão do next() e do nextLine() é um assunto que vem me gerando dificuldades, mesmo. Inclusive eu tenho pesquisado e buscado ajuda para entender como fazer, pois o next(), como você disse, dá erro quando insiro mais de uma palavra, mas ocorre que, com o nextLine, muitas vezes o comando já pula para a próxima inserção, ignorando a que eu desejo lançar e daí também não sei como aplicar corretamente. Eu, no projeto de trabalho, dificilmente terei que fazer um input de dados manual, porém, por questão pessoa, gostaria muito de entender como usar corretamente esses comandos. Se tiver algum exemplo prático eu ficaria feliz em testar por aqui.

Grande abraço e Obrigado.