SafariBooks
Download and generate EPUB of your favorite books from Safari Books Online library.
I'm not responsible for the use of this program, this is only for personal and educational purpose.
Overview:
- Requirements & Setup
- Usage
- Example: Download Test-Driven Development with Python, 2nd Edition
- Example: Use or not the
--no-kindle
option - Example: Import cookies
Requirements & Setup:
$ git clone https://github.com/lorenzodifuccia/safaribooks.git
Cloning into 'safaribooks'...
$ cd safaribooks/
$ pip3 install -r requirements.txt
OR
$ pipenv install && pipenv shell
The program depends of only two Python 3 modules:
lxml>=4.1.1
requests>=2.18.4
Usage:
It's really simple to use, just choose a book from the library and replace in the following command:
- X-es with its ID,
email:password
with your own.
$ python3 safaribooks.py --cred "account_mail@mail.com:password01" XXXXXXXXXXXXX
The ID is the digits that you find in the URL of the book description page:
https://www.safaribooksonline.com/library/view/book-name/XXXXXXXXXXXXX/
Like: https://www.safaribooksonline.com/library/view/test-driven-development-with/9781491958698/
Program options:
$ python3 safaribooks.py --help
usage: safaribooks.py [--cred <EMAIL:PASS>] [--no-cookies] [--no-kindle]
[--preserve-log] [--help]
<BOOK ID>
Download and generate EPUB of your favorite books from Safari Books Online.
positional arguments:
<BOOK ID> Book digits ID that you want to download.
You can find it in the URL (X-es):
`https://www.safaribooksonline.com/library/view/book-
name/XXXXXXXXXXXXX/`
optional arguments:
--cred <EMAIL:PASS> Credentials used to perform the auth login on Safari
Books Online.
Es. ` --cred "account_mail@mail.com:password01" `.
--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
isn't any error.
--help Show this help message.
The first time you use the program, you'll have to specify your Safari Books Online account credentials (look here
for special character).
The next times you'll download a book, before session expires, you can omit the credential, because the program save your session cookies in a file called cookies.json
(for SSO see Example: Import cookies).
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
.
You can configure proxies by setting on your system the environment variables HTTP_PROXY
and HTTPS_PROXY
.
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.
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:
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:
-
Test-Driven Development with Python, 2nd Edition:
Download$ python3 safaribooks.py --cred "XXXX@gmail.com:XXXXX" 9781491958698 ____ ___ _ / __/__ _/ _/__ _____(_) _\ \/ _ `/ _/ _ `/ __/ / /___/\_,_/_/ \_,_/_/ /_/ / _ )___ ___ / /__ ___ / _ / _ \/ _ \/ '_/(_-< /____/\___/\___/_/\_\/___/ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [-] Logging into Safari Books Online... [*] Retrieving book info... [-] Title: Test-Driven Development with Python, 2nd Edition [-] Authors: Harry J.W. Percival [-] Identifier: 9781491958698 [-] ISBN: 9781491958704 [-] Publishers: O'Reilly Media, Inc. [-] Rights: Copyright © O'Reilly Media, Inc. [-] Description: By taking you through the development of a real web application from beginning to end, the second edition of this hands-on guide demonstrates the practical advantages of test-driven development (TDD) with Python. You’ll learn how to write and run tests before building each part of your app, and then develop the minimum amount of code required to pass those tests. The result? Clean code 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... [*] Output directory: /XXXX/XXXX/Books/Test-Driven Development with Python, 2nd Edition [-] Downloading book contents... (73 chapters) [#########################################----------------------------] 60% ... [-] Creating EPUB file... [*] Done: Test-Driven Development with Python, 2nd Edition.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/ [!] Bye!!
The result will be (opening the
EPUB
file with Calibre): -
Use or not the--no-kindle
option:$ python3 safaribooks.py --no-kindle 9781491958698
On the left book created with
--no-kindle
option, on the right without (default): -
Import cookies
To import cookies from a browser, which is especially useful for SSO users, log in to Safari Books Online and then open the Web Inspector. Click the Network panel and then click a request. Copy the value of the cookies header and pass it to the import_cookies.py script:
$ python3 import_cookies.py 'sessionid=28cb00fc5fefca1c33677383b7c2499f; salesforce_id=c22b5131a048c89949719ddfc77a9401; csrfsafari=NAowChgKB1Nwb3RpZnkSABoGmAEByAEB; BrowserCookie=c6691600-bbf6-4c96-b721-af081ff879d8; corp_sessionid=f2be05e433a0e5883920f34bcf3ce83a; logged_in=y;'
The import_cookies.py script will convert the header value into JSON and save it to cookies.json.
Thanks!!
For any kind of problem, please don't hesitate to open an issue here on GitHub.
Lorenzo Di Fuccia