Skip to main content
Join the official 2020 Python Developers SurveyStart the survey!

Python 3 wrapper for Goodreads API

Project description


|Build Status| |Coverage Status| |Documentation Status| |Primary Code Style| |Secondary Code Style|

.. image:: :width: 100

This package provides a Python interface for the Goodreads API <>__. Using it, you can do pretty much anything that Goodreads allows through their public API.

This package is largely Python 2 compatible, but is only officially supported for Python 3.

Why BetterReads?

BetterReads is an expansion of the goodreads2 package available on PyPi. That package is no longer maintained and needed some updates to be usable. The name is just cheeky and cute, and not to imply that this project is substantially better than any other project. Someday I hope it's succeeded by a Python package called BestReads.

Major updates in this new project:

  • Use https for Oauth - goodreads now requires this and previous packages' Oauth requests always fail
  • Add convenience method to get all of a user's reviews for a specific shelf
  • Some opinionated development changes. For example
    • No longer making live API calls in unit tests
    • Using black code style <>__ across the board
    • More robust documentation <>__


This package depends on the following packages:

  • xmltodict
  • requests
  • rauth

They can be installed using pip.


sudo pip install -r requirements.txt

If you want to contribute to this package, you will need to install the packages in ``requirements-dev.txt` as well.


To install, run the following command from the top-level package directory.


sudo python install

Getting Started

The first thing is to request an API key from Goodreads here <>__. Once you have it, you can create a client instance to query Goodreads.

.. code:: python

from goodreads import client
gc = client.GoodreadsClient(<api_key>, <api_secret>)

To access some of the methods, you need OAuth <>__ for authorization.

.. code:: python

gc.authenticate(<access_token>, <access_token_secret>)

Note that access_token and access_token_secret are different from developer key and secret. For the development step, you can call the same function with no parameters to get authorization. It will open a URL pointing a Goodreads page for OAuth permission. For your application, you can direct the user to that particular URL, ask them to authorize your app and save the returning access_token and access_token_secret in your database.


This package provides a Python interface for most Goodreads API methods. Here are a few examples demonstrating how to access data on Goodreads.


Let's access the first book added to Goodreads! It is the book with id

.. code:: python

    book =

Once you have the ``GoodreadsBook`` instance for the book, you can
access data for the queried book.

.. code:: python

    >>> book.title
    u'Harry Potter and the Half-Blood Prince (Harry Potter, #6)'
    >>> authors = book.authors
    >>> authors[0].name
    u'J.K. Rowling'
    >>> book.average_rating


You can get information about an author as well.

.. code:: python

>>> author =
u'Jonathan Safran Foer'
>>> author.works_count
>>> author.books
[Extremely Loud and Incredibly Close, Everything Is Illuminated, Eating Animals, Tree of Codes, Everything is Illuminated & Extremely Loud and Incredibly Close, The unabridged pocketbook of lightning, The Future Dictionary of America, A Convergence of Birds: Original Fiction and Poetry Inspired by Joseph Cornell, New American Haggadah, The Sixth Borough]


User data can be retrieved by user id or username.

.. code:: python

    >>> user = gc.user(1)
    u'Otis Chandler'
    >>> user.user_name
    >>> user.small_image_url


Let's find a group discussing Python and get more information about it.

.. code:: python

>>> g = gc.find_groups("Python")
>>> g = groups[0]
>>> g['title']
u'The Computer Scientists'
>>> group =['id'])
>>> group.description
u'Only for Committed Self Learners and Computer Scientists Who are Starving for
Information, and Want to Advance their Skills Through: Reading, Practicing and
Discussion Computer Science and Programming Books.'


Goodreads API also allows to list events happening in an area.

.. code:: python

    >>> events = gc.list_events(21229)
    >>> event = events[0]
    >>> event.title
    u'Books and Cocktails'
    >>> event.address
    u'120 N. Front St.'


Read more about this package
`here <>`__.


If you find an API method that is not supported by this package, feel
free to create a Github issue. Also, you are more than welcome to submit
a pull request for a bug fix or additional feature. For more detail on
contributing to this project and setting up your local dev environment,
check out `our contribution guide <CONTRIBUTING.rst>`__.


`MIT License <>`__


Thanks to `Paul Shannon <>`__ and `Sefa Kilic <>`__
for providing 'goodreads' package at PyPI, and to `Tatiana <>`__ and
`Rehan Khwaja <>`__ for continuing the project as goodreads2. BetterReads couldn't exist
without all of you.

.. |Build Status| image::
   :alt: Build Status
.. |Coverage Status| image::
   :alt: Coverage Status
.. |Documentation Status| image::
   :alt: Documentation Status
.. |Primary Code Style| image::
    :alt: Primary Code Style - Black
.. |Secondary Code Style| image::
    :alt: Secondary Code Style - Prettier

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for betterreads, version 0.4.1
Filename, size File type Python version Upload date Hashes
Filename, size betterreads-0.4.1-py3-none-any.whl (15.7 kB) File type Wheel Python version py3 Upload date Hashes View
Filename, size betterreads-0.4.1.tar.gz (14.8 kB) File type Source Python version None Upload date Hashes View

Supported by

Pingdom Pingdom Monitoring Google Google Object Storage and Download Analytics Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page