{ "info": { "author": "Tobias Kunze", "author_email": "r@rixx.de", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Console", "License :: OSI Approved", "License :: OSI Approved :: Apache Software License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Database" ], "description": "# goodreads-to-sqlite\n\n[![PyPI](https://img.shields.io/pypi/v/goodreads-to-sqlite.svg)](https://pypi.org/project/goodreads-to-sqlite/)\n[![License](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](https://github.com/rixx/goodreads-to-sqlite/blob/master/LICENSE)\n\nSave data from Goodreads to a SQLite database. Can save all your public shelves and reviews, and also the public reviews\nand shelves of other people.\n\n![Demo](./assets/demo.gif)\n\n## How to install\n\n $ pip install goodreads-to-sqlite\n\n## Authentication\n\nCreate a Goodreads developer token: https://www.goodreads.com/api/keys\n\nRun this command and paste in your token and your profile URL:\n\n $ goodreads-to-sqlite auth\n\nThis will create a file called `auth.json` in your current directory containing the required value. To save the file at\na different path or filename, use the `--auth=myauth.json` option.\n\n## Retrieving books\n\nThe `books` command retrieves all of the books and reviews/ratings belonging to you:\n\n $ goodreads-to-sqlite books goodreads.db rixx\n\nYou can specify the user to target, to fetch books on public shelves of other users. Please provide either the user ID\n(the numerical part of a user's profile URL), or the name of their vanity URL.\n\n $ goodreads-to-sqlite books goodreads.db rixx\n\nSometime in 2018 or 2017, Goodreads started leaving out some \"read_at\" timestamps in their API. If you want to include\nthese datapoints regardless, you can add the `--scrape` parameter, and the dates will be scraped from the website.\nThis will take a bit longer, by maybe a minute depending on the size of your library.\n\n $ goodreads-to-sqlite books goodreads.db --scrape\n\nThe `auth.json` file is used by default for authentication. You can point to a different location of `auth.json` using\n`-a`:\n\n $ goodreads-to-sqlite books goodreads.db rixx -a /path/to/auth.json\n\n## Limitations\n\n- The order of books in shelves is not exposed in the API, so we cannot determine the order of the to-read list.\n- Goodreads also offers a CSV export, which is currently not supported as an input format.\n- Since the Goodreads API is a bit slow, and we are restricted to one request per second, for larger libraries the\n import can take a couple of minutes.\n- The script currently re-syncs the entire library instead of just looking at newly changed data, to make sure we don't\n lose information after aborted syncs.\n\n## Thanks\n\nThis package is heavily inspired by [github-to-sqlite](https://github.com/dogsheep/github-to-sqlite/) by [Simon\nWillison](https://simonwillison.net/2019/Oct/7/dogsheep/).\n\nThe terminal recording above was made with [ASCIInema](https://asciinema.org/a/WT6bfxoFP3IlgeX8PO6FHDdDx).\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/rixx/goodreads-to-sqlite", "keywords": "goodreads books sqlite export dogsheep", "license": "Apache License, Version 2.0", "maintainer": "", "maintainer_email": "", "name": "goodreads-to-sqlite", "package_url": "https://pypi.org/project/goodreads-to-sqlite/", "platform": "", "project_url": "https://pypi.org/project/goodreads-to-sqlite/", "project_urls": { "Homepage": "https://github.com/rixx/goodreads-to-sqlite", "Issues": "https://github.com/rixx/goodreads-to-sqlite/issues", "Source": "https://github.com/rixx/goodreads-to-sqlite" }, "release_url": "https://pypi.org/project/goodreads-to-sqlite/0.3/", "requires_dist": [ "beautifulsoup4 (~=4.8)", "click", "python-dateutil", "requests", "sqlite-utils (~=1.11)", "tqdm (~=4.36)", "pytest ; extra == 'test'" ], "requires_python": "", "summary": "Save data from Goodreads to a SQLite database", "version": "0.3" }, "last_serial": 5967285, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "db7f4d0b540a5b6061169623fa9bc241", "sha256": "a0845afe49916dfa73f5c8736c9f4559edf7f394bfc1b51a0377599a014d9714" }, "downloads": -1, "filename": "goodreads_to_sqlite-0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "db7f4d0b540a5b6061169623fa9bc241", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7434, "upload_time": "2019-10-11T00:29:00", "url": "https://files.pythonhosted.org/packages/8e/95/904baebb7690d4731be49c197caabb0d80a74c0c55746713eed02a823926/goodreads_to_sqlite-0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c2e542f08f5996c974a8a0f8edea6854", "sha256": "a4e1c3ff258063f477cc70e7df31816b1db5d3498ad287fb32f91204b93afacc" }, "downloads": -1, "filename": "goodreads-to-sqlite-0.1.tar.gz", "has_sig": false, "md5_digest": "c2e542f08f5996c974a8a0f8edea6854", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6007, "upload_time": "2019-10-11T00:29:03", "url": "https://files.pythonhosted.org/packages/a3/52/a79ca4347e8d73337f531f422eff8f2a775a76e4d5e012f056c721f71f52/goodreads-to-sqlite-0.1.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "40928222eaa8244700b77e14888c36cc", "sha256": "82cefff1e02910df80bbd2849b9fd7afaa98d054bda78d2ee151c09da4a990a0" }, "downloads": -1, "filename": "goodreads_to_sqlite-0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "40928222eaa8244700b77e14888c36cc", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8006, "upload_time": "2019-10-11T10:31:53", "url": "https://files.pythonhosted.org/packages/0e/33/fef8a85badc78490ec7838a3c62dcaff97e274271f89ac6e30ad5eedf217/goodreads_to_sqlite-0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f98a1ff5647b8eaabaa69a9f7fa0b3ad", "sha256": "a130877504393c3847b7136b0a840528b0ec9f1431b1f78c17e864629e25a27e" }, "downloads": -1, "filename": "goodreads-to-sqlite-0.2.tar.gz", "has_sig": false, "md5_digest": "f98a1ff5647b8eaabaa69a9f7fa0b3ad", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6559, "upload_time": "2019-10-11T10:31:54", "url": "https://files.pythonhosted.org/packages/82/1a/def0d2bf135afd5e37d09ac011a3664fa0ddeed74b7c165d0f35175b61a7/goodreads-to-sqlite-0.2.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "1a3bbda5be8028c6a9bb82e6bb8232bf", "sha256": "2b0291e279fd0919accf15f5158e35b6a4d4067e92c323b47f3bae355d2e20a2" }, "downloads": -1, "filename": "goodreads_to_sqlite-0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "1a3bbda5be8028c6a9bb82e6bb8232bf", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8185, "upload_time": "2019-10-13T12:39:47", "url": "https://files.pythonhosted.org/packages/c7/8e/3d2304b2aab15d01fef1092311986db1305a8182fcc05ec651f55819284f/goodreads_to_sqlite-0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "57813cddced5a80b987d318002a79370", "sha256": "c3bb23ce90a33ee94edb08e89a316ea57bce6be466607732a65e6536a0c14eb2" }, "downloads": -1, "filename": "goodreads-to-sqlite-0.3.tar.gz", "has_sig": false, "md5_digest": "57813cddced5a80b987d318002a79370", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6702, "upload_time": "2019-10-13T12:39:48", "url": "https://files.pythonhosted.org/packages/f1/44/ec0ee5e5eb8a87b36b9e93d93ef597f6e4f33f7e83fd888a873a60cc33c0/goodreads-to-sqlite-0.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "1a3bbda5be8028c6a9bb82e6bb8232bf", "sha256": "2b0291e279fd0919accf15f5158e35b6a4d4067e92c323b47f3bae355d2e20a2" }, "downloads": -1, "filename": "goodreads_to_sqlite-0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "1a3bbda5be8028c6a9bb82e6bb8232bf", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8185, "upload_time": "2019-10-13T12:39:47", "url": "https://files.pythonhosted.org/packages/c7/8e/3d2304b2aab15d01fef1092311986db1305a8182fcc05ec651f55819284f/goodreads_to_sqlite-0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "57813cddced5a80b987d318002a79370", "sha256": "c3bb23ce90a33ee94edb08e89a316ea57bce6be466607732a65e6536a0c14eb2" }, "downloads": -1, "filename": "goodreads-to-sqlite-0.3.tar.gz", "has_sig": false, "md5_digest": "57813cddced5a80b987d318002a79370", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6702, "upload_time": "2019-10-13T12:39:48", "url": "https://files.pythonhosted.org/packages/f1/44/ec0ee5e5eb8a87b36b9e93d93ef597f6e4f33f7e83fd888a873a60cc33c0/goodreads-to-sqlite-0.3.tar.gz" } ] }