【问题标题】:Google books API searching by ISBN按 ISBN 搜索的 Google 图书 API 搜索
【发布时间】:2011-10-26 21:09:31
【问题描述】:

我想弄清楚如何使用 Google Books API 按 ISBN 搜索图书。我需要编写一个程序来搜索 ISBN,然后打印出标题、作者和版本。我尝试使用List volumesList = books.volumes.list("");,但这不允许我按 ISBN 进行搜索,而且我没有看到获取所需信息的方法(当放入 ISBN 时没有结果)。我现在拥有的是:

    JsonFactory jsonFactory = new JacksonFactory();     
    final Books books = new Books(new NetHttpTransport(), jsonFactory);
    List volumesList = books.volumes.list("9780262140874");

    volumesList.setMaxResults((long) 2);

    volumesList.setFilter("ebooks");
    try
    {
        Volumes volumes = volumesList.execute();
        for (Volume volume : volumes.getItems()) 
        {
            VolumeVolumeInfo volumeInfomation = volume.getVolumeInfo();
            System.out.println("Title: " + volumeInfomation.getTitle());
            System.out.println("Id: " + volume.getId());
            System.out.println("Authors: " + volumeInfomation.getAuthors());
            System.out.println("date published: " + volumeInfomation.getPublishedDate());
            System.out.println();
        }

    } catch (Exception ex) {
        // TODO Auto-generated catch block
        System.out.println("didnt wrork "+ex.toString());
    }

如果有人对如何提高效率有任何建议,请告诉我。 新代码:

    String titleBook="";

    ////////////////////////////////////////////////
    try
    {                               
        BooksService booksService = new BooksService("UAH");
        String isbn = "9780262140874";
        URL url = new URL("http://www.google.com/books/feeds/volumes/?q=ISBN%3C" + isbn + "%3E");
        VolumeQuery volumeQuery = new VolumeQuery(url);
        VolumeFeed volumeFeed = booksService.query(volumeQuery, VolumeFeed.class);
        VolumeEntry bookInfo=volumeFeed.getEntries().get(0);

        System.out.println("Title: " + bookInfo.getTitles().get(0));
        System.out.println("Id: " + bookInfo.getId());
        System.out.println("Authors: " + bookInfo.getAuthors());
        System.out.println("Version: " + bookInfo.getVersionId());
        System.out.println("Description: "+bookInfo.getDescriptions()+"\n");
        titleBook= bookInfo.getTitles().get(0).toString();
        titleBook=(String) titleBook.subSequence(titleBook.indexOf("="), titleBook.length()-1);
    }catch(Exception ex){System.out.println(ex.getMessage());}
    /////////////////////////////////////////////////
    JsonFactory jsonFactory = new JacksonFactory();     
    final Books books = new Books(new NetHttpTransport(), jsonFactory);
    List volumesList = books.volumes.list(titleBook);   
    try
    {
        Volumes volumes = volumesList.execute();
        Volume bookInfomation= volumes.getItems().get(0);

        VolumeVolumeInfo volumeInfomation = bookInfomation.getVolumeInfo();
        System.out.println("Title: " + volumeInfomation.getTitle());
        System.out.println("Id: " + bookInfomation.getId());
        System.out.println("Authors: " + volumeInfomation.getAuthors());
        System.out.println("date published: " + volumeInfomation.getPublishedDate());
        System.out.println();

    } catch (Exception ex) {
        System.out.println("didnt wrork "+ex.toString());
    }

【问题讨论】:

    标签: java isbn google-books-api


    【解决方案1】:

    你在使用deprecated data API吗?

    使用Books API v1(来自 Labs),您可以使用查询

    https://www.googleapis.com/books/v1/volumes?q=isbn:<your_isbn_here>
    

    例如

    https://www.googleapis.com/books/v1/volumes?q=isbn:0735619670

    通过 ISBN 查询一本书。

    您可能想查看 Google 的示例代码:BooksSample.java

    【讨论】:

    • 您建议的方式是 HTML 而不是 java。 BooksSample 的方式与我上面的方式相同,并且不允许通过 ISBN.List volumesList = books.volumes.list(query) 进行搜索是他们使用的代码,也查询是一个字符串。
    • 查询使用HTTP GET请求,接收JSON格式的响应,与语言无关,Java中常用。不涉及 HTML。
    • 请注意:googleapis.com/books/v1/volumes?q=isbn0735619670 return "totalItems": 78 个冒号!不敢相信没有记录在某处(至少我没有找到它)googleapis.com/books/v1/volumes?q=isbn<0735619670> 返回“totalItems”:511 但googleapis.com/books/v1/volumes?q=isbn:0735619670 进行精确搜索并返回“totalItems”:1.冒号 FWD!不敢相信某处没有记录(至少我没找到)
    • @masi 谢谢。我相应地更改了查询字符串。
    • @masi:谢谢!请注意,它也是区分大小写的,因此q=ISBN:9780321694690 将返回长列表,而q=isbn:9780321694690 将返回特定匹配项。
    【解决方案2】:

    如果我确实理解您的任务,您不能像开发人员指南developer guide 中所说的那样尝试。你可以这样做:

    BooksService booksService = new BooksService("myCompany-myApp-1");
    myService.setUserCredentials("user@domain.com", "secretPassword");
    
    String isbn = "9780552152679";
    URL url = new URL("http://www.google.com/books/feeds/volumes/?q=ISBN%3C" + isbn + "%3E");
    VolumeQuery volumeQuery = new VolumeQuery(url);
    VolumeFeed volumeFeed = booksService.query(volumeQuery, VolumeFeed.class);
    
    // using an ISBN in query gives only one entry in VolumeFeed
    List<VolumeEntry> volumeEntries = volumeFeed.getEntries();
    VolumeEntry entry = volumeEntries.get(0);
    

    现在使用VolumeEntry api 查找您想要的 getXXXX() 并在您的代码中使用它。希望它可以帮助您解决问题。

    【讨论】:

    • 你的回答效果很好它让我得到了正确的书名和相应的 ISBN。然而,当我调用 bookInfo.getAuthors() 时,它返回了一个空白列表。打印时看起来像以下“作者:[]”
    • 可以做 bookInfo.getCreators() 吗?它应该返回一个创建者列表作为创建者的实例。然后你可以得到作者。可能它会起作用,因为我没有尝试过。试一试。
    • 我能够让它与上面的新代码一起工作。感谢您的帮助。
    • 我刚刚尝试了 getCreatos,它把我的代码减半,谢谢。
    • 我不确定 BooksService 类型是从哪里来的
    【解决方案3】:

    $("form").submit(
      function(e) {
        e.preventDefault();
        var isbn = $('#ISBN').val();
        var isbn_without_hyphens = isbn.replace(/-/g, "");
        var googleAPI = "https://www.googleapis.com/books/v1/volumes?q=" + isbn_without_hyphens;
        $.getJSON(googleAPI, function(response) {
          if (typeof response.items === "undefined") {
            alert("No books match that ISBN.")
          } else {
            $("#title").html(response.items[0].volumeInfo.title);
            $("#author").html(response.items[0].volumeInfo.authors[0]);
            $("#publishedDate").html(response.items[0].volumeInfo.publishedDate);
          }
        });
      }
    );
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <form>
      <strong>Enter ISBN:</strong> <input type="text" id="ISBN" value="9781407170671">
      <input type="submit" id="submit">
    </form>
    Title: <span id="title"></span>
    <br> Author: <span id="author"></span>
    <br> Publication date: <span id="publishedDate"></span>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-08
      • 2011-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-24
      • 1970-01-01
      相关资源
      最近更新 更多