AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / coding / Perguntas / 79574770
Accepted
Burgi
Burgi
Asked: 2025-04-15 17:12:59 +0800 CST2025-04-15 17:12:59 +0800 CST 2025-04-15 17:12:59 +0800 CST

Problemas ao recuperar livros por ISBN usando a API do Google Livros

  • 772

Estou criando meu próprio aplicativo de "biblioteca online" e recuperando dados de livros usando a API do Google Livros. A API funciona em geral, mas estou tendo problemas especificamente ao pesquisar por ISBN.

Para a maioria dos livros que tentei, a busca por ISBN não retorna resultados. No entanto, se eu usar o ID do livro do Google Livros, o livro é encontrado corretamente.

Gostaria de usar a busca por ISBN — por exemplo, escaneando um código de barras — mas, no momento, essa abordagem não é confiável. Alguém já passou por esse problema ou conhece uma solução alternativa?

Qualquer ajuda será apreciada!

PS: Também testei a API da Open Library e encontrei o mesmo problema com ISBNs que não retornavam resultados.

A função que estou usando:

def search_for_books(isbn, max_results=3):
    if not isinstance(max_results, int):
        max_results = 3
    API_ENDPOINT = 'https://www.googleapis.com/books/v1/volumes'
    params = {'q': f'isbn:{isbn}', 'maxResults': max_results}
    try:
        res = requests.get(API_ENDPOINT, params=params)
        return res.json()
    except requests.exceptions.RequestException:
        return []

Saída quando um ISBN não é encontrado:

{'kind': 'books#volumes', 'totalItems': 0}
python
  • 1 1 respostas
  • 46 Views

1 respostas

  • Voted
  1. Best Answer
    Hermann12
    2025-04-15T18:32:35+08:002025-04-15T18:32:35+08:00

    Isso funciona para mim:

    import requests
    from isbnlib import to_isbn13, to_isbn10
    
    def search_for_books(isbn): 
        API_ENDPOINT = 'https://www.googleapis.com/books/v1/volumes'
    
        headers = {
            "User-Agent": "YOUR_BROWSER_USER_AGENT_STRING", 
            "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
            "Accept-Language": "en-US,en;q=0.5",
            "Connection": "keep-alive",
            "Upgrade-Insecure-Requests": "1",
        }
    
        queries = [isbn]
        isbn13 = to_isbn13(isbn)
        if isbn13 and isbn13 != isbn:
            queries.append(isbn13)
        isbn10 = to_isbn10(isbn)
        if isbn10 and isbn10 != isbn:
            queries.append(isbn10)
    
        for query_isbn in queries:
            params = {'q': f'isbn:{query_isbn}'} 
            try:
                print(f"Trying ISBN: {query_isbn}")
                res = requests.get(API_ENDPOINT, params=params, headers=headers)
                # print(f"URL: {res.url}")
                # print(f"Status Code: {res.status_code}")
                # print(16*'#')
                # print(f"Response JSON: {res.json()}")
                data = res.json()
                if 'items' in data:
                    return data
            except requests.exceptions.RequestException as e:
                print(f"Request error: {e}")
    
        return {'items': []}
    
    result = search_for_books("3642388906")
    if result and 'items' in result and result['items']:
        book_info = result['items'][0]['volumeInfo']
        print(f"Title: {book_info.get('title')}")
        print(f"Authors: {book_info.get('authors')}")
        print(f"Publisher: {book_info.get('publisher')}")
        print(f"Description: {book_info.get('description')}")
        # ... and so on for other relevant fields
    
    else:
        print("No books found.")
    

    Saída:

    Trying ISBN: 3642388906
    Title: Dubbel
    Authors: ['Karl-Heinrich Grote', 'Jörg Feldhusen']
    Publisher: Springer Vieweg
    Description: 100 Jahre DUBBEL 1914 erschien die erste Auflage des Taschenbuch für den Maschinenbau, herausgegeben von Heinrich Dubbel. Seitdem ist der DUBBEL das Standardwerk der Ingenieure in Studium und Beruf mit den Schwerpunkten „Allgemeiner Maschinenbau“ sowie „Verfahrens- und Systemtechnik“. Die laufende Neubearbeitung garantiert die Dokumentation des aktuellen Stands der Technik. Dieses etablierte Referenzwerk mit „Norm-Charakter“ überzeugt durch - detaillierte Konstruktionszeichnungen - Tabellen und Diagramme mit quantitativen Angaben - Berechnungsverfahren - ein umfangreiches Literaturverzeichnis Der DUBBEL stellt das erforderliche Basis- und Detailwissen des Maschinenbaus zur Verfügung. Für die Jubiläumsauflage wurden alle Kapitel aktualisiert. Neu hinzugekommen ist die Medizintechnik, die fertigungstechnischen Kapitel wurden stark überarbeitet. Auch erhalten die Leser des Werkes Zugang zur MDesign Formelsammlung. Die ausführliche Darstellung der Mathematik ist als DUBBEL Mathematik separat erhältlich.
    
    • 0

relate perguntas

  • Como divido o loop for em 3 quadros de dados individuais?

  • Como verificar se todas as colunas flutuantes em um Pandas DataFrame são aproximadamente iguais ou próximas

  • Como funciona o "load_dataset", já que não está detectando arquivos de exemplo?

  • Por que a comparação de string pandas.eval() retorna False

  • Python tkinter/ ttkboostrap dateentry não funciona quando no estado somente leitura

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Reformatar números, inserindo separadores em posições fixas

    • 6 respostas
  • Marko Smith

    Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não?

    • 2 respostas
  • Marko Smith

    Problema com extensão desinstalada automaticamente do VScode (tema Material)

    • 2 respostas
  • Marko Smith

    Vue 3: Erro na criação "Identificador esperado, mas encontrado 'import'" [duplicado]

    • 1 respostas
  • Marko Smith

    Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores?

    • 1 respostas
  • Marko Smith

    Como faço para corrigir um erro MODULE_NOT_FOUND para um módulo que não importei manualmente?

    • 6 respostas
  • Marko Smith

    `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso?

    • 3 respostas
  • Marko Smith

    Um programa vazio que não faz nada em C++ precisa de um heap de 204 KB, mas não em C

    • 1 respostas
  • Marko Smith

    PowerBI atualmente quebrado com BigQuery: problema de driver Simba com atualização do Windows

    • 2 respostas
  • Marko Smith

    AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos

    • 1 respostas
  • Martin Hope
    Fantastic Mr Fox Somente o tipo copiável não é aceito na implementação std::vector do MSVC 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant Encontre o próximo dia da semana usando o cronógrafo 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor O inicializador de membro do construtor pode incluir a inicialização de outro membro? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul O C++20 mudou para permitir a conversão de `type(&)[N]` de matriz de limites conhecidos para `type(&)[]` de matriz de limites desconhecidos? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann Como/por que {2,3,10} e {x,3,10} com x=2 são ordenados de forma diferente? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller O ponto e vírgula agora é opcional em condicionais bash com [[ .. ]] na versão 5.2? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench Por que um traço duplo (--) faz com que esta cláusula MariaDB seja avaliada como verdadeira? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng Por que `dict(id=1, **{'id': 2})` às vezes gera `KeyError: 'id'` em vez de um TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos 2024-03-20 03:12:31 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve