首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按ISBN搜索Google图书API

按ISBN搜索Google图书API
EN

Stack Overflow用户
提问于 2011-10-27 05:09:32
回答 3查看 51.9K关注 0票数 31

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

代码语言:javascript
复制
    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());
    }

如果任何人有任何关于如何使其更有效的建议,请让我知道。新代码:

代码语言:javascript
复制
    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());
    }
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-27 05:54:22

您是否在使用deprecated data API

对于Books API v1 (来自实验室),您可以使用以下查询

代码语言:javascript
复制
https://www.googleapis.com/books/v1/volumes?q=isbn:<your_isbn_here>

例如

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

按ISBN查询图书。

你可能想看看谷歌的例子代码:BooksSample.java

票数 54
EN

Stack Overflow用户

发布于 2011-10-27 05:52:56

如果我理解你的任务,你就不能像开发人员指南developer guide中所说的那样尝试一下吗?你可以这样做:

代码语言:javascript
复制
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(),并在您的代码中使用它,我希望它能帮助您解决问题。

票数 4
EN

Stack Overflow用户

发布于 2019-01-07 06:08:11

代码语言:javascript
复制
$("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);
      }
    });
  }
);
代码语言:javascript
复制
<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>

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7908954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档