J'essaie de comprendre comment rechercher un livre par ISBN à l'aide de l'API Google Livres. Je dois écrire un programme qui recherche un ISBN puis en imprime le titre, l'auteur et l'édition. J'ai essayé d'utiliser List volumesList = books.volumes.list("");
mais cela ne me permettait pas de rechercher par ISBN et je ne voyais pas le moyen d'obtenir les informations dont j'avais besoin (lorsqu'un ISBN était placé dans celui-ci, il n'y avait aucun résultat). Ce que j'ai maintenant c'est:
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 quelqu'un a des suggestions sur la façon de rendre cela plus efficace, faites-le-moi savoir. Nouveau code:
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());
}
Utilisez-vous l’API de données obsolète ?
Avec Books API v1 (from Labs), vous pouvez utiliser la requête
https://www.googleapis.com/books/v1/volumes?q=isbn:<your_isbn_here>
par exemple
https://www.googleapis.com/books/v1/volumes?q=isbn:0735619670
interroger un livre par son ISBN.
Vous voudrez peut-être consulter l'exemple de code Googles: BooksSample.Java
Ne pouvez-vous pas essayer comme ceci, comme indiqué dans le guide du développeur guide du développeur si j’ai bien compris votre tâche. Vous pouvez faire comme ça:
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);
Maintenant, en utilisant VolumeEntry api, cherchez votre getXXXX () souhaité et utilisez-le dans votre code. J'espère que cela vous aidera à résoudre votre problème.
$("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>