From b9d78bcd63c31e2b6106a88e5dd7ef1594494307 Mon Sep 17 00:00:00 2001 From: Lorenzo Di Fuccia Date: Wed, 20 May 2020 22:49:03 +0200 Subject: [PATCH] Improvement, `kindle` and README (thanks @nrenzoni) --- .gitignore | 3 ++ README.md | 78 ++++++++++++++++++++++++++++---------------------- safaribooks.py | 32 +++++++++------------ 3 files changed, 60 insertions(+), 53 deletions(-) diff --git a/.gitignore b/.gitignore index 260a1cc..90e00eb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,7 @@ .idea/ .vscode/ + +__pycache__/ .venv/ .env/ @@ -7,3 +9,4 @@ Books/ cookies.json *.log +*.txt diff --git a/README.md b/README.md index 964513e..cac2d92 100644 --- a/README.md +++ b/README.md @@ -7,9 +7,10 @@ Before any usage please read the *O'Reilly*'s [Terms of Service](https://learnin * [Requirements & Setup](#requirements--setup) * [Usage](#usage) * [Example: Download *Test-Driven Development with Python, 2nd Edition*](#download-test-driven-development-with-python-2nd-edition) - * [Example: Use or not the `--no-kindle` option](#use-or-not-the---no-kindle-option) + * [Example: Use or not the `--kindle` option](#use-or-not-the---kindle-option) ## Requirements & Setup: +First of all, it requires `python3` and `pip3` or `pipenv` to be installed. ```shell $ git clone https://github.com/lorenzodifuccia/safaribooks.git Cloning into 'safaribooks'... @@ -22,7 +23,7 @@ OR $ pipenv install && pipenv shell ``` -The program depends of only two **Python 3** modules: +The program depends of only two **Python _3_** modules: ```python3 lxml>=4.1.1 requests>=2.20.0 @@ -44,30 +45,30 @@ Like: `https://www.safaribooksonline.com/library/view/test-driven-development-wi #### Program options: ```shell $ python3 safaribooks.py --help -usage: safaribooks.py [--cred | --login] [--no-cookies] [--no-kindle] - [--preserve-log] [--help] +usage: safaribooks.py [--cred | --login] [--no-cookies] + [--kindle] [--preserve-log] [--help] -Download and generate EPUB of your favorite books from Safari Books Online. +Download and generate an EPUB of your favorite books from Safari Books Online. positional arguments: - Book digits ID that you want to download. - You can find it in the URL (X-es): - `https://www.safaribooksonline.com/library/view/book- + Book digits ID that you want to download. You can find + it in the URL (X-es): + `https://learning.oreilly.com/library/view/book- name/XXXXXXXXXXXXX/` optional arguments: --cred Credentials used to perform the auth login on Safari - Books Online. - Es. ` --cred "account_mail@mail.com:password01" `. + Books Online. Es. ` --cred + "account_mail@mail.com:password01" `. --login Prompt for credentials used to perform the auth login on Safari Books Online. --no-cookies Prevent your session data to be saved into `cookies.json` file. - --no-kindle Remove some CSS rules that block overflow on `table` - and `pre` elements. Use this option if you're not going - to export the EPUB to E-Readers like Amazon Kindle. - --preserve-log Leave the `info_XXXXXXXXXXXXX.log` file even if there + --kindle Add some CSS rules that block overflow on `table` and + `pre` elements. Use this option if you're going to + export the EPUB to E-Readers like Amazon Kindle. + --preserve-log Leave the `info_XXXXXXXXXXXXX.log` file even if there isn't any error. --help Show this help message. ``` @@ -77,21 +78,26 @@ The next times you'll download a book, before session expires, you can omit the For **SSO**, please use the `sso_cookies.py` program in order to create the `cookies.json` file from the SSO cookies retrieved by your browser session (please follow [`these steps`](/../../issues/150#issuecomment-555423085)). Pay attention if you use a shared PC, because everyone that has access to your files can steal your session. -If you don't want to cache the cookies, just use the `--no-cookies` option and provide all time your `--cred` to perform `--login`. +If you don't want to cache the cookies, just use the `--no-cookies` option and provide all time your credential through the `--cred` option or the more safe `--login` one: this will prompt you for credential during the script execution. -You can configure proxies by setting on your system the environment variable `HTTPS_PROXY`. +You can configure proxies by setting on your system the environment variable `HTTPS_PROXY` or using the `USE_PROXY` directive into the script. -The program default options are thought for ensure best compatibilities for who want to export the `EPUB` to E-Readers like Amazon Kindle. If you want to do it, I suggest you to convert the `EPUB` to `AZW3` with [Calibre](https://calibre-ebook.com/). -You can also convert the book to `MOBI` and if you'll do it with Calibre be sure to select `Ignore margins` in the conversion options: +**Important**: since the script only download HTML pages and create a row EPUB, many of the CSS and XML/HTML directives are wrong for an E-Reader. To ensure best quality of the output, I suggest you to always convert the `EPUB` obtained by the script to standard-`EPUB` with [Calibre](https://calibre-ebook.com/). +You can also use the command-line version of Calibre with `ebook-convert`, e.g.: +```bash +$ ebook-convert "XXXX/safaribooks/Books/Test-Driven Development with Python 2nd Edition (9781491958698)/9781491958698.epub" "XXXX/safaribooks/Books/Test-Driven Development with Python 2nd Edition (9781491958698)/9781491958698_CLEAR.epub" +``` +After the execution, you can read the `9781491958698_CLEAR.epub` in every E-Reader and delete all other files. + +The program offers also an option to ensure best compatibilities for who wants to export the `EPUB` to E-Readers like Amazon Kindle: `--kindle`, it blocks overflow on `table` and `pre` elements (see [example](#use-or-not-the---kindle-option)). +In this case, I suggest you to convert the `EPUB` to `AZW3` with Calibre or to `MOBI`, remember in this case to select `Ignore margins` in the conversion options: ![Calibre IgnoreMargins](https://github.com/lorenzodifuccia/cloudflare/raw/master/Images/safaribooks/safaribooks_calibre_IgnoreMargins.png "Select Ignore margins") - -In the other hand, if you're not going to export the `EPUB`, you can use the `--no-kindle` option to remove the CSS that blocks overflow on `table` and `pre` elements, see below in the examples. ## Examples: * ## Download [Test-Driven Development with Python, 2nd Edition](https://www.safaribooksonline.com/library/view/test-driven-development-with/9781491958698/): ```shell - $ python3 safaribooks.py --cred "XXXX@gmail.com:XXXXX" 9781491958698 + $ python3 safaribooks.py --cred "my_email@gmail.com:MyPassword1!" 9781491958698 ____ ___ _ / __/__ _/ _/__ _____(_) @@ -118,32 +124,36 @@ In the other hand, if you're not going to export the `EPUB`, you can use the `-- that works.In the process, you’ll learn the basics of Django, Selenium, Git, jQuery, and Mock, along with curre... [-] Release Date: 2017-08-18 - [-] URL: https://www.safaribooksonline.com/library/view/test-driven-development-with/9781491958698/ - [*] Retrieving book chapters... + [-] URL: https://learning.oreilly.com/library/view/test-driven-development-with/9781491958698/ + [*] Retrieving book chapters... [*] Output directory: - /XXXX/XXXX/Books/Test-Driven Development with Python, 2nd Edition - [-] Downloading book contents... (73 chapters) - [#########################################----------------------------] 60% - ... + /XXXX/safaribooks/Books/Test-Driven Development with Python 2nd Edition (9781491958698) + [-] Downloading book contents... (53 chapters) + [#####################################################################] 100% + [-] Downloading book CSSs... (2 files) + [#####################################################################] 100% + [-] Downloading book images... (142 files) + [#####################################################################] 100% [-] Creating EPUB file... - [*] Done: Test-Driven Development with Python, 2nd Edition.epub - + [*] Done: /XXXX/safaribooks/Books/Test-Driven Development with Python 2nd Edition + (9781491958698)/9781491958698.epub + If you like it, please * this project on GitHub to make it known: https://github.com/lorenzodifuccia/safaribooks e don't forget to renew your Safari Books Online subscription: - https://www.safaribooksonline.com/signup/ - + https://learning.oreilly.com + [!] Bye!! ``` The result will be (opening the `EPUB` file with Calibre): ![Book Appearance](https://github.com/lorenzodifuccia/cloudflare/raw/master/Images/safaribooks/safaribooks_example01_TDD.png "Book opened with Calibre") - * ## Use or not the `--no-kindle` option: + * ## Use or not the `--kindle` option: ```bash - $ python3 safaribooks.py --no-kindle 9781491958698 + $ python3 safaribooks.py --kindle 9781491958698 ``` - On the left book created with `--no-kindle` option, on the right without (default): + On the right, the book created with `--kindle` option, on the left without (default): ![NoKindle Option](https://github.com/lorenzodifuccia/cloudflare/raw/master/Images/safaribooks/safaribooks_example02_NoKindle.png "Version compare") diff --git a/safaribooks.py b/safaribooks.py index 642c9f9..b0bad40 100755 --- a/safaribooks.py +++ b/safaribooks.py @@ -239,11 +239,10 @@ class SafariBooks: "\n" \ "{0}\n" \ "