bandcamp-dl/bandcamp_dl/__main__.py

107 lines
3.7 KiB
Python
Raw Normal View History

"""bandcamp-dl
Usage:
bandcamp-dl [url]
bandcamp-dl [--template=<template>] [--base-dir=<dir>]
[--full-album]
(<url> | --artist=<artist> --album=<album> | --artist=<artist> --track=<track>)
[--overwrite]
[--no-art]
[--embed-lyrics]
[--group]
[--embed-art]
[--no-slugify]
bandcamp-dl (-h | --help)
bandcamp-dl (--version)
2013-04-29 23:59:57 -07:00
Options:
-h --help Show this screen.
-v --version Show version.
-a --artist=<artist> The artist's slug (from the URL)
-s --track=<track> The track's slug (from the URL)
-b --album=<album> The album's slug (from the URL)
-t --template=<template> Output filename template.
[default: %{artist}/%{album}/%{track} - %{title}]
-d --base-dir=<dir> Base location of which all files are downloaded.
-f --full-album Download only if all tracks are available.
-o --overwrite Overwrite tracks that already exist. Default is False.
-n --no-art Skip grabbing album art
-e --embed-lyrics Embed track lyrics (If available)
-g --group Use album/track Label as iTunes grouping
-r --embed-art Embed album art (If available)
-n --no-slugify Disable slugification of track, album, and artist names.
"""
"""
Coded by:
2013-04-29 23:59:57 -07:00
Iheanyi Ekechukwu
http://twitter.com/kwuchu
http://github.com/iheanyi
2013-04-29 18:57:50 -07:00
Simon W. Jackson
http://miniarray.com
http://twitter.com/miniarray
http://github.com/miniarray
2013-04-29 18:57:50 -07:00
Anthony Forsberg:
http://evolution0.github.io
http://github.com/evolution0
Iheanyi:
Feel free to use this in any way you wish. I made this just for fun.
Shout out to darkf for writing the previous helper function for parsing the JavaScript!
"""
2013-04-29 18:57:50 -07:00
import os
import ast
from docopt import docopt
from bandcamp_dl.bandcamp import Bandcamp
from bandcamp_dl.bandcampdownloader import BandcampDownloader
from bandcamp_dl.__init__ import __version__
def main():
arguments = docopt(__doc__, version='bandcamp-dl {}'.format(__version__))
2017-02-27 05:02:24 -08:00
bandcamp = Bandcamp()
2013-04-29 18:57:50 -07:00
basedir = arguments['--base-dir'] or os.getcwd()
session_file = "{}/{}.not.finished".format(basedir, __version__)
if os.path.isfile(session_file):
with open(session_file, "r") as f:
arguments = ast.literal_eval(f.readline())
elif arguments['<url>'] is None and arguments['--artist'] is None:
print(__doc__)
else:
with open(session_file, "w") as f:
f.write("".join(str(arguments).split('\n')))
if arguments['--artist'] and arguments['--album']:
url = Bandcamp.generate_album_url(arguments['--artist'], arguments['--album'], "album")
elif arguments['--artist'] and arguments['--track']:
url = Bandcamp.generate_album_url(arguments['--artist'], arguments['--track'], "track")
2014-06-07 21:14:56 -07:00
else:
url = arguments['<url>']
if arguments['--no-art']:
album = bandcamp.parse(url, False)
else:
album = bandcamp.parse(url)
2013-04-29 18:57:50 -07:00
2014-06-07 21:14:56 -07:00
if not album:
print("The url {} is not a valid bandcamp page.".format(url))
2014-06-07 21:14:56 -07:00
elif arguments['--full-album'] and not album['full']:
print("Full album not available. Skipping...")
else:
bandcamp_downloader = BandcampDownloader(url, arguments['--template'], basedir, arguments['--overwrite'],
arguments['--embed-lyrics'], arguments['--group'],
arguments['--embed-art'], arguments['--no-slugify'])
2014-06-07 21:14:56 -07:00
bandcamp_downloader.start(album)
if __name__ == '__main__':
main()