Skip to main content

Build Status Coverage Status Documentation Status Primary Code Style - Black Secondary Code Style - Prettier

http://s.gr-assets.com/assets/icons/goodreads_icon_50x50-823139ec9dc84278d3863007486ae0ac.png

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

Dependencies

This package depends on the following packages:

  • xmltodict

  • requests

  • rauth

  • backports-datetime-fromisoformat

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.

Installation

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

sudo python setup.py install

You can also install BetterReads using pip. The current version on PyPi is 0.4.1.

pip install betterreads

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.

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

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

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.

Examples

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

Books

Let’s access the first book added to Goodreads! It is the book with id 1.

book = gc.book(1)

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

>>> 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
u'4.49'

Authors

You can get information about an author as well.

>>> author = gc.author(2617)
>>> author.name
u'Jonathan Safran Foer'
>>> author.works_count
u'13'
>>> 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]

Users

User data can be retrieved by user id or username.

>>> user = gc.user(1)
>>> user.name
u'Otis Chandler'
>>> user.user_name
u'otis'
>>> user.small_image_url
u'http://d.gr-assets.com/users/1189644957p2/1.jpg'

Groups

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

>>> g = gc.find_groups("Python")
>>> g = groups[0]
>>> g['title']
u'The Computer Scientists'
>>> group = gc.group(g['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.'

Events

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

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

Documentation

Read more about this package here.

Contribution

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.

License

MIT License

Acknowledgment

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.

Release files for betterreads 0.4.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for betterreads 0.4.2
File Size Uploaded
betterreads-0.4.2.tar.gz 15.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for betterreads 0.4.2
File Interpreter ABI Platform
betterreads-0.4.2-py3-none-any.whl Python 3 none any Details

Total release size: 31.6 kB

Release files / betterreads-0.4.2.tar.gz

Download URL betterreads-0.4.2.tar.gz
Size 15.3 kB
Tags Source
SHA-256 checksum
How to use checksums
3340a44549fd1b9564d8093b9965d9382ba3c505ea113e51e1471d8d739cd4f6
BLAKE2b-256 checksum
How to use checksums
d8bcb35b484fb139e7bfc5ab8f5c5c246c62b205a26720e1fc7ed1f379f87243
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.7.0

Release files / betterreads-0.4.2-py3-none-any.whl

Download URL betterreads-0.4.2-py3-none-any.whl
Size 16.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
5121487eab82b1a4401910760b0d333637123338bb85eb46282633c1d4f79cea
BLAKE2b-256 checksum
How to use checksums
9dc4ed83eca2bc0dfcaa5f0b25f8ba250587eb156734a05516340d7ad81d3f87
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.7.0

Release history Release notifications | RSS feed

This release

0.4.2 This release

2 release files

0.4.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page