Download each and every xkcd comic uploaded! Like ever!
Author: | Tasdik Rahman |
---|
Contents
1 Features
- Can download all the xkcd's uploaded till date(1603 as I am writing this!).
- Download individual xkcd's and store them
- Download ranges of xkcd's and store them
- Download the latest issue xkcd
- Download the meta text inside each xkcd and store it
- No duplicacy in your XKCD database.
- Stores each xkcd in a separate file named as the
title
of the xkcd at your home directory - Writes a
description.txt
for each xkcd. Storing meta-data likedate-publised
- url value
- a small description of that xkcd
- The alt text on the comic
- written in uncomplicated
python
.
2 Demo
Each Comic is stored in it's own individual folder with a
description.txt
placed in it. It contains meta-data like -
img-link
- title
- date-published
- alt
Here's a little example for the same
3 Usage
When running for the first time, do a xkcd-dl --update-db
$ xkcd-dl --update-db
XKCD link database updated
Stored it in 'xkcd_dict.json'. You can start downloading your XKCD's!
Run 'xkcd-dl --help' for more options
$
--help
3.1 $ xkcd-dl --help
usage: xkcd-dl [-h] [-u] [-l] [-d XKCD_NUM | -a]
[-r [DOWNLOAD_RANGE [DOWNLOAD_RANGE ...]]] [-v] [-P PATH]
[-s XKCD_NUM]
Run `xkcd-dl --update-db` if running for the first time.
optional arguments:
-h, --help show this help message and exit
-u, --update-db Update the database
-l, --download-latest
Download most recent comic
-d XKCD_NUM, --download XKCD_NUM
Download specified comic by number
-a, --download-all Download all comics
-r [DOWNLOAD_RANGE [DOWNLOAD_RANGE ...]], --download-range [DOWNLOAD_RANGE [DOWNLOAD_RANGE ...]]
Download specified range
-v, --version show program's version number and exit
-P PATH, --path PATH set path
-s XKCD_NUM, --show XKCD_NUM
Show specified comic by number
--download-latest
3.2 This downloads the last uploaded xkcd comic and stores under the home directory of the user with a brief description
$ xkcd-dl --download-latest
Downloading xkcd from 'http://imgs.xkcd.com/comics/flashlights.png' and storing it under '/home/tasdik/xkcd_archive/1603'
$
If it has been downloaded, will not do anything
This command will work even if you have not run --update-db yet.
--download=XKCDNUMBER
3.3 Downloads the particular XKCDNUMBER
(given that it exists and has
not been downloaded already) and stores it in the home directory
$ xkcd-dl --download=143
Downloading xkcd from 'http://xkcd.com/143/' and storing it under '/home/tasdik/xkcd_archive/143'
$ xkcd-dl --download=1603
Downloading xkcd from 'http://xkcd.com/1603/' and storing it under '/home/tasdik/xkcd_archive/1603'
xkcd number '1603' has already been downloaded!
$
--download-range <START> <END>
3.4 Will take two number parameters and download all the xkcd's between the two, inclusive.
$ xkcd-dl --download-range 32 36
Downloading xkcd from 'http://xkcd.com/32/' and storing it under '/home/tasdik/xkcd_archive/32'
Downloading xkcd from 'http://xkcd.com/33/' and storing it under '/home/tasdik/xkcd_archive/33'
Downloading xkcd from 'http://xkcd.com/34/' and storing it under '/home/tasdik/xkcd_archive/34'
Downloading xkcd from 'http://xkcd.com/35/' and storing it under '/home/tasdik/xkcd_archive/35'
Downloading xkcd from 'http://xkcd.com/36/' and storing it under '/home/tasdik/xkcd_archive/36'
--download-all
3.5 As the name suggests, will download all the xkcd's uploaded till date and store them under the home directory of the user.
$ xkcd-dl --download-all
Downloading all xkcd's Till date!!
Downloading xkcd from 'http://xkcd.com/1466' and storing it under '/home/tasdik/xkcd_archive/1466'
Downloading xkcd from 'http://xkcd.com/381' and storing it under '/home/tasdik/xkcd_archive/381'
Downloading xkcd from 'http://xkcd.com/198' and storing it under '/home/tasdik/xkcd_archive/198'
Downloading xkcd from 'http://xkcd.com/512' and storing it under '/home/tasdik/xkcd_archive/512'
Downloading xkcd from 'http://xkcd.com/842' and storing it under '/home/tasdik/xkcd_archive/842'
Downloading xkcd from 'http://xkcd.com/920' and storing it under '/home/tasdik/xkcd_archive/920'
....
....
--path=PATH
3.6 To use a custom directory to store your xkcd_archive, you can append --path=./any/path/here to the end of any download method. Absolute and relative paths work, but the directory must already exist.
$ xkcd-dl --download=3 --path=comic
Downloading xkcd from 'http://xkcd.com/3/' and storing it under '/home/tasdik/comic/xkcd_archive/3'
$ xkcd-dl --download-range 54 56 --path=/home/tasdik/xkcd
Downloading xkcd from 'http://xkcd.com/54/' and storing it under '/home/tasdik/xkcd/xkcd_archive/54'
Downloading xkcd from 'http://xkcd.com/55/' and storing it under '/home/tasdik/xkcd/xkcd_archive/55'
Downloading xkcd from 'http://xkcd.com/56/' and storing it under '/home/tasdik/xkcd/xkcd_archive/56'
--show XKCD_NUM
3.7 Opens the specified comic. Downloads it, if not downloaded already. Prints the alt text and metadata to stdout.
$ xkcd-dl --show 32
Downloading xkcd from 'http://xkcd.com/32/' and storing it under '/home/bk/Documents/xkcd-dl/xkcd_dl/xkcd_archive/32'
title : Pillar
date-publised: 2006-1-1
url: http://xkcd.com/32/
alt: A comic by my brother Doug, redrawn and rewritten by me
$ xkcd-dl -s 1000
Downloading xkcd from 'http://xkcd.com/1000/' and storing it under '/home/bk/Documents/xkcd-dl/xkcd_dl/xkcd_archive/1000'
xkcd number '1000' has already been downloaded!
title : 1000 Comics
date-publised: 2012-1-6
url: http://xkcd.com/1000/
alt: Thank you for making me feel less alone.
4 Installation
pip (Suggested way)
4.1 Option 1: installing through$ pip3 install xkcd-dl
If you are behind a proxy
$ pip3 --proxy [username:password@]domain_name:port install xkcd-dl
Note: If you get command not found
then
$ sudo apt-get install python3-pip
should fix that
4.2 Option 2: installing from source
$ git clone https://github.com/tasdikrahman/xkcd-dl.git
$ cd xkcd-dl/
$ pip3 install -r requirements.txt
$ python3 setup.py install
4.3 Upgrading
$ pip3 install -U xkcd-dl
4.4 Uninstalling
$ pip3 uninstall xkcd-dl
Arch
distributions
4.5 For Here is the AUR
link for you
5 Contributing
I hacked this up in one night, so its a little messy up there. Feel free to contribute.
- Fork it.
- Create your feature branch
(
git checkout -b my-new-awesome-feature
) - Commit your changes (
git commit -am 'Added <xyz> feature'
) - Push to the branch (
git push origin my-new-awesome-feature
) - Create new Pull Request
5.1 Contributors
Big shout out to
- Ian C for fixing issue #2 which stopped the download if a title of a comic had a special character in it and BlitzKraft for pointing it out.
- BlitzKraft for adding the feature to download the alt-text from the the xkcd and major clean ups!
- Braden Best for pointing out the issues when installing from source apart from his valuable input.
5.2 To-do
- [x] add
xkcd-dl --download-latest
- [x] add
xkcd-dl --download=XKCDNUMBER
- [x] add
xkcd-dl --download-all
- [x] add
xkcd-dl download-range <START> <END>
- [x] add path setting with
[--path=/path/to/directory]
option - [x] add exclude list to easily recognize and ignore dynamic comics i.e. comics without a default image.
- [x] Remove redundant code in
download_xkcd_number()
,download_latest()
anddownload_all()
(Refactoring!!) - [x] Adding support to open a particular xkcd at the CLI itself. Implemented using xdg-open. Opens using your default image viewer.
- [x] Add tests
5.3 Known Issues
- There have been issues when installed from source if you are using
python 2.*
as discussed in #5. So usingpython3.*
is suggested. - If you get
command not found
when installing, it may mean that you don't havepip3
installed.$ sudo apt-get install python3-pip
should fix that. To check your version of pip - Dynamic comics have to be added manually using the excludeList
$ pip3 --version
pip 1.5.6 from /usr/lib/python3/dist-packages (python 3.4)
$
5.4 Bugs
Please report the bugs at the issue tracker
OR
You can tweet me at @tasdikrahman if you can't get it to work. In fact, you should tweet me anyway.
6 Changelog
0.1.2
:- bug: fixed relative import error in setup.py added support for gif files when renaming downloaded image (#38)
7 Motivation
xkcd-dl
is inspired by an awesome package called youtube-dl written by Daniel Bolton (Much respect!)
How about you get to download all of the xkcd which have been uploaded till date? This does just that!
Now I don't know about you, but I just love reading xkcd
's! Had a boring Sunday night looming over, thought why not create something like youtube-dl
but for downloading xkcd
's!
And hence xkcd-dl
Cheers to a crazy night!
8 Legal stuff
Built with
You can find a copy of the License at http://prodicus.mit-license.org/
9 Donation
If you have found my little bits of software of any use to you, you can help me pay my internet bills :)