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