A simple node.js module that resolves books by ISBN using multiple services:
- Google Books API
- Open Library Books API
- WorldCat xISBN API
- ISBNdb API using API key in the environment variable
ISBNDB_API_KEY
$ npm install node-isbn
Supports Node.js versions 6.x and greater.
var isbn = require('node-isbn');
isbn.resolve('0735619670', function (err, book) {
if (err) {
console.log('Book not found', err);
} else {
console.log('Book found %j', book);
}
});
var isbn = require('node-isbn');
isbn.resolve('0735619670', { timeout: 15000 }, function (err, book) {
if (err) {
console.log('Book not found', err);
} else {
console.log('Book found %j', book);
}
});
var isbn = require('node-isbn');
isbn.resolve('0735619670').then(function (book) {
console.log('Book found %j', book);
}).catch(function (err) {
console.log('Book not found', err);
});
Response follows the same schema, but some fields could depend on the service that was used to find the book. In general, Google Books API returns more information.
{
"title": "Code Complete",
"authors": [
"Steve McConnell"
],
"publisher": "O'Reilly Media, Inc.",
"publishedDate": "2004",
"description": "Features the best practices in the art and...",
"industryIdentifiers": [
{
"type": "OTHER",
"identifier": "UCSC:32106018687688"
}
],
"readingModes": {
"text": false,
"image": false
},
"pageCount": 914,
"printType": "BOOK",
"categories": [
"Computers"
],
"averageRating": 4,
"ratingsCount": 123,
"contentVersion": "preview-1.0.0",
"imageLinks": {
"smallThumbnail": "http://books.google.com/books/content?id=QnghAQAAIAAJ&printsec=frontcover&img=1&zoom=5&source=gbs_api",
"thumbnail": "http://books.google.com/books/content?id=QnghAQAAIAAJ&printsec=frontcover&img=1&zoom=1&source=gbs_api"
},
"language": "en",
"previewLink": "http://books.google.es/books?id=QnghAQAAIAAJ&dq=isbn:0735619670&hl=&cd=1&source=gbs_api",
"infoLink": "http://books.google.es/books?id=QnghAQAAIAAJ&dq=isbn:0735619670&hl=&source=gbs_api",
"canonicalVolumeLink": "http://books.google.es/books/about/Code_Complete.html?hl=&id=QnghAQAAIAAJ"
}
You can optionally specify the providers that you want to use, in the order you need them to be invoked.
// This request will search first in the Open Library API and then in the Google Books API
isbn.provider(['openlibrary', 'google'])
.resolve('0735619670')
.then(function (book) {
console.log('Book found %j', book);
}).catch(function (err) {
console.log('Book not found', err);
});
// This request will search ONLY in the Google Books API
isbn.provider(['google'])
.resolve('0735619670')
.then(function (book) {
console.log('Book found %j', book);
}).catch(function (err) {
console.log('Book not found', err);
});
If you do not like using strings to specify the providers, you could grab the providers from isbn.PROVIDER_NAMES
constant that the library provides!
// This request will search ONLY in the Google Books API
isbn.provider([isbn.PROVIDER_NAMES.GOOGLE])
.resolve('0735619670')
.then(function (book) {
console.log('Book found %j', book);
}).catch(function (err) {
console.log('Book not found', err);
});
AGPL v3.0 LICENSE http://www.gnu.org/licenses/agpl-3.0.html
See also Google Books API Terms of Service, Open Library Licensing, WorldCat xISBN Terms of Service, ISBNdb Terms and Conditions.
- Ensure that you using Node 6 or greater.
- Tests use mocha. Feel free to contribute.
$ npm test