2011-10-26 32 views
21

Estoy tratando de encontrar la manera de buscar un libro por ISBN usando la API de Google Books. Necesito escribir un programa que busque un ISBN e imprima el título, autor y edición. Intenté usar List volumesList = books.volumes.list("");, pero eso no me permitió buscar por ISBN y no vi la forma de obtener la información que necesitaba (cuando se colocaba un ISBN no tenía resultados). Lo que tengo en este momento es:Google books Búsqueda de API por 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()); 
    } 

Si alguien tiene alguna sugerencia sobre cómo hacer esto más eficiente que me haga saber. Nuevo Código:

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

Respuesta

39

¿Está utilizando el deprecated data API?

Con Books API v1 (de Laboratorios), puede utilizar la consulta

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

por ejemplo

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

para consultar un libro por su ISBN.

Es posible que desee ver en Googles código de ejemplo: BooksSample.java

+0

La forma en que sugirió es para HTML no Java. La forma en que lo hace BooksSample es el mismo que el anterior y no permite la búsqueda por ISBN.List volumesList = books.volumes.list (consulta) es el código que utilizaron también query es una cadena. –

+9

La consulta utiliza una solicitud HTTP GET y recibe la respuesta en formato JSON, que es independiente del lenguaje y se usa comúnmente en Java. No hay HTML involucrado. – Chris

+1

tenga en cuenta: https://www.googleapis.com/books/v1/volumes?q=isbn0735619670 return "totalItems": 78 colon fwd! no puede creer que no está documentado en algún lugar (al menos no lo encontré) https://www.googleapis.com/books/v1/volumes?q=isbn <0735619670> devuelve "totalItems": 511 pero https: //www.googleapis.com/books/v1/volumes?q=isbn:0735619670 realiza una búsqueda exacta y devuelve "totalItems": 1. Colon FWD! No puedo creer que no esté documentado en algún lugar (al menos no lo encontré) – masi

4

¿No puedes tratar como esto como se dice en los desarrolladores guiar developer guide si lo hiciera entender su tarea. Puede hacerlo de esta manera:

BooksService booksService = new BooksService("myCompany-myApp-1"); 
myService.setUserCredentials("[email protected]", "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); 

Ahora, utilizando el aspecto VolumeEntry API para su getXXXX deseada() y utilizarlo en sus code.I esperan que ayude a resolver su problema.

+1

Su respuesta funcionó bastante bien Me consiguió el título correcto del libro con el ISBN correspondiente. Sin embargo, cuando incluso llamé bookInfo.getAuthors(), devolvió una lista en blanco. Cuando se imprimió parecía lo siguiente "Autores: []" –

+1

puede hacer bookInfo.getCreators()? Debería devolver una lista de creadores como instancias del Creador. Entonces puedes obtener los autores. Puede ser que funcione ya que no lo probé. Pruebalo. – Shahriar

+0

Pude hacerlo funcionar con el nuevo código anterior. Gracias por tu ayuda. –

Cuestiones relacionadas