npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

goodreads-api-node

v0.0.12

Published

Node.js wrapper for the Goodreads web API

Downloads

41

Readme

A Goodreads API wrapper for node.js

Goodreads

Installation

npm install --save goodreads-api-node
const goodreads = require('goodreads-api-node');

Usage

You need to register your app to get a goodreads developer key With the developer key and secret you can now call goodreads(). This will return an object which exposes the API methods.

const myCredentials = {
  key: 'MY_GOODREADS_KEY',
  secret: 'MY_GOODREADS_SECRET'
};

const gr = goodreads(myCredentials);

API

Some of those API methods just need your key/secret. To make API calls on behalf of your user, you need to get their permission using oAuth. All methods on the goodreads object return an promise. The following methods all work without oAuth:

getBooksByAuthor(authorID, [page])

// returns all books by an author given the authorID
gr.getBooksByAuthor('175417')
.then(console.log);

This prints the following result:

 { id: '175417',
   name: 'Bruce Schneier',
   link: 'https://www.goodreads.com/author/show/175417.Bruce_Schneier',
   books: { start: '1', end: '25', total: '25', book: [Object] }
 }

You can pass an optional page parameter specifying the result page you want to get.

getAuthorInfo(authorID)
getAllSeriesByAuthor(authorID)
getUserInfo(userID)
getUsersShelves(userID)
getUsersGroups(userID, [sort])
getGroupMembers(groupID, [params])
searchGroups(query, [page])
getGroupInfo(groupID, [params])
getRecentReviews()
getReview(reviewID, [page])
getUsersReviewForBook(userID, bookID)
getRecentStatuses()
showBook(bookID)
bookIDtoWorkID(bookId)
getSeries(seriesID)
getSeriesByWork(workID)

searchBooks([params]);

@param {object} params q: query, page: page of results, field: one of 'title', 'author' or 'all' (default)

Example Usage:

  const res = await goodreads.searchBooks( { q: 'A song of ice and fire', page: 2, field: 'title' } );

OAuth authentication and methods

If you want to make requests on behalf of your user (e.g. them marking a book as 'read') you need to get their permission. The Goodreads API uses OAuth for this.

There are two ways to initialize the oauth process. You can either pass a callbackURL to the goodreads() function (which then calls initOAuth() for you) or you just call gr.initOAuth() after setting up your credentials. The callbackURL is not required for oauth to work, it's just used for goodreads to be able to redirect your user after granting/denying access.

// set callbackURL together with your key/secret
const gr = goodreads(myCredentials, callbackURL);

// or call initOAuth(callbackURL) after setting up your key/secret
const gr = goodreads(myCredentials)
gr.initOAuth(callbackURL);

After this you should be able to call getRequestToken() to obtain a requestToken. You need the requestToken to inform your user about your app wanting to make requests with his account.

gr.getRequestToken()
.then(url => { /* redirect your user to this url to ask for permission */ });

getRequestToken() returns (a promise which resolves) a URL. You can now redirect your user to this URL to ask him for access to his account. The callbackURL provided in initOAuth() is then used to inform you about whether the user granted access. Goodreads will redirect to this url with the query params oauth_token and authorize.

http://yourapp.com/goodreads_oauth_callback?oauth_token=ezBHZc7C1SwvLGc646PEQ&authorize=1

For further information about the goodreads OAuth process: Goodreads API Documentation

If the user granted access you can now request an accessToken from the goodreadsAPI.

gr.getAccessToken()
.then(() => { /* you can now make authenticated requests */ });

That's it! You can now use the following methods:

getCurrentUserInfo()
followAuthor(authorID)
unfollowAuthor(authorID)
showFollowing(followingID)
getUserFollowings(userID)
addBooksToShelf(bookID, shelfName)
followUser(userID)
getRecommendation(recommendationID)
getFriendRequests([page])
answerFriendRecommendation(recommendationID, response)
answerFriendRequest(requestID, response)
addFriend(userID)
joinGroup(groupID)
getNotifications([page])
getOwnedBooks(userID, [page])
deleteOwnedBook(bookID)
unlikeResource(resourceID)
deleteReview(reviewID)
getBooksOnUserShelf(userID, shelfName, [queryOptions])
getCurrentUserInfo()

Contribute

  • coming soon