1
resposta

[Dúvida] API do Google Books

Não consigo rodar meu código, uando digito o nome de algum livro da bug

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 EscolhaDoTitulo {
    static void main(String[] args) throws IOException, InterruptedException {
        Scanner leitura = new Scanner(System.in);
        System.out.println("Digite o nome do livro para a busca: ");
        var titulodolivro = leitura.nextLine();

        String chave;
        String endereco =  "https://www.googleapis.com/books/v1/volumes?q=" + titulodolivro + "&key=";


        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());

    }
}
1 resposta

Olá, Laila, como vai?

No código apresentado há dois pontos que interferem na execução do programa. O primeiro está no método main. Em Java, para que a aplicação seja executada corretamente, o método precisa ser declarado como public static void main(String[] args). Quando ele é definido apenas como static void main, a JVM não reconhece como ponto de entrada do programa.

Outro detalhe envolve o texto digitado pelo usuário. Quando o título do livro possui espaços, como por exemplo Harry Potter ou Senhor dos Aneis, a URL formada fica com espaços no meio, o que não é permitido em endereços HTTP. Nesse caso, é necessário codificar o texto antes de enviá-lo na requisição.

Também é importante adicionar a chave da API na URL. No código atual existe o parâmetro &key=, mas nenhum valor foi atribuído a ele. A chave precisa ser informada para que a requisição seja completa.

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

String chave = "SUA_CHAVE_AQUI";
String tituloCodificado = URLEncoder.encode(titulodolivro, StandardCharsets.UTF_8);
String endereco = "https://www.googleapis.com/books/v1/volumes?q=" 
        + tituloCodificado + "&key=" + chave;
        

Código Java em uma IDE mostrando um método principal que recupera informações de um livro usando uma solicitação à API do Google Books com base na entrada do usuário

Espero ter ajudado.

Siga firme nos seus estudos e conte com o fórum sempre que precisar.

Abraços :)

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