1
resposta

Desafio: hora da prática

Resolução do desafio.
Classe ConsultaAPI:

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 ConsultaAPI {
    public String consultaAPI(String url) throws IOException, InterruptedException {
        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create(url)).build();
        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        return response.body();
    }
}

Classe UrlGoogleBooks:

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

public class UrlGoogleBooks {
    private String API_KEY;
    private String item;
    private String urlConsulta;
    public UrlGoogleBooks(String API_KEY) {
        this.API_KEY = API_KEY;
    }

    public String getAPI_KEY() {
        return API_KEY;
    }

    public void setAPI_KEY(String API_KEY) {
        this.API_KEY = API_KEY;
    }

    public void setItem(String item) {
        this.item = URLEncoder.encode(item, StandardCharsets.UTF_8);
        urlConsulta = "https://www.googleapis.com/books/v1/volumes?q=" +
                this.item +
                "&key=" + API_KEY +
                "&fields=items(volumeInfo(title,authors,publishedDate,description))";
    }

    public String getUrlConsulta() {
        return urlConsulta;
    }
}

Classe DesafioHoraDaPraticaAPI:

import java.io.IOException;
import java.util.Scanner;

public class DesafioHoraDaPraticaAPI {
    static void main(String[] args) throws IOException, InterruptedException {
        Scanner input = new Scanner(System.in);

        System.out.println("\nExercício 1: ");
        String API_KEY_GOOGLE_BOOKS = "api_key_pessoal";
        UrlGoogleBooks url = new UrlGoogleBooks(API_KEY_GOOGLE_BOOKS);

        System.out.println("Digite o nome do livro para pesquisa no Google Books: ");
        String livro = input.nextLine();

        url.setItem(livro);
        ConsultaAPI consulta = new ConsultaAPI();
        System.out.println(consulta.consultaAPI(url.getUrlConsulta()));

        System.out.println("\nExercício 2: ");
        //Consulta cotação do bitcoin em reais:
        String urlBitcoinReais = "https://api.coingecko.com/api/v3/simple/price?ids=bitcoin&vs_currencies=brl";
        System.out.println(consulta.consultaAPI(urlBitcoinReais));

        System.out.println("\nExercício 3: ");
        System.out.println("Digite o ingrediente de uma receita: ");
        String ingrediente = input.nextLine();
        String receita = "https://www.themealdb.com/api/json/v1/1/search.php?s=" + ingrediente;
        System.out.println(consulta.consultaAPI(receita));
    }
}

Output:

Exercício 1: 
Digite o nome do livro para pesquisa no Google Books: 
Piloto de Guerra Antoine de Saint-Exupéry
{
  "items": [
    //...,
    {
      "volumeInfo": {
        "title": "Piloto de guerra",
        "authors": [
          "Antoine de Saint-Exupéry"
        ],
        "publishedDate": "2015-08-21",
        "description": "Livro sobre a Segunda Guerra traz faceta menos
        conhecida do autor de O pequeno príncipe. O francês Antoine de
        Saint-Exupéry (1900-1944) consagrou-se como autor de O pequeno
        príncipe, um dos romances mais lidos do século XX. Mas seus
        demais livros deixam ver uma obra multifacetada e de alcance
        reflexivo surpreendente. É o caso de Piloto de guerra. Durante a
        Segunda Guerra Mundial, Saint-Exupéry serviu como piloto nas
        forças armadas francesas. Em 1940, foi designado para um
        sobrevoo da região de Arras, ao norte da França, numa missão de
        alto risco. Em parte relato dessa expedição, em parte indagação
        sobre o sentido da guerra - o conflito não é uma aventura, mas
        uma doença, afirma o narrador -, Piloto de guerra é um clássico a
        ser redescoberto por todas as gerações de leitores."
      }
    },
    //...
}


Exercício 2: 
{"bitcoin":{"brl":487967}}

Exercício 3: 
Digite o ingrediente de uma receita: 
vegetable
{"meals":[{"idMeal":"53000","strMeal":"Vegetable Shepherds Pie",
"strMealAlternate":null,"strCategory":"Beef","strArea":"Irish",
"strInstructions":"Add Ingredients:\r\n\r\n12 cups chopped 
mixed vegetables\r\n1   cup chopped fresh mushrooms \r\n1
cup pearl onions\r\n\r\nTOPPING:\r\n\r\nPreheat oven to 450
\u00b0. Bake potatoes on a foil-lined baking sheet until tender
, about 45minutes. Let cool slightly, then peel. Press potatoes 
through a ricer, food mill, or colander into a large bowl. Add 
butter; stir until well blended. Stir in milk. Season to taste with
salt.\r\n\r\nFILLING:\r\n\r\nSoak driedporcini in 3 cups hot water;
set aside. Combine lentils,...},...]}

Process finished with exit code 0
1 resposta

Oi, Raoni! Como vai?

Agradeço por compartilhar.

Gostei da sua organização em classes, do jeito que você explicou a separação entre ConsultaAPI, UrlGoogleBooks e a classe principal, isso deixou o código mais claro e fácil de manter. Importante também o uso correto do HttpClient e da codificação da URL com URLEncoder, o que evita problemas nas requisições.

Continue praticando essa divisão de responsabilidades, ela faz muita diferença em projetos maiores.

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