diff --git a/scdl/scdl.py b/scdl/scdl.py index 9dd5da6..d28eea7 100755 --- a/scdl/scdl.py +++ b/scdl/scdl.py @@ -82,43 +82,43 @@ def main(): # Parse argument arguments = docopt(__doc__, version=__version__) - if arguments["--debug"]: + if arguments['--debug']: logger.level = logging.DEBUG - elif arguments["--error"]: + elif arguments['--error']: logger.level = logging.ERROR - logger.info("Soundcloud Downloader") + logger.info('Soundcloud Downloader') logger.debug(arguments) - if arguments["-o"] is not None: + if arguments['-o'] is not None: try: - offset = int(arguments["-o"]) + offset = int(arguments['-o']) except: logger.error('Offset should be an Integer...') sys.exit() - if arguments["--hidewarnings"]: - warnings.filterwarnings("ignore") + if arguments['--hidewarnings']: + warnings.filterwarnings('ignore') - if arguments["--path"] is not None: - if os.path.exists(arguments["--path"]): - os.chdir(arguments["--path"]) + if arguments['--path'] is not None: + if os.path.exists(arguments['--path']): + os.chdir(arguments['--path']) else: logger.error('Invalid path in arguments...') sys.exit() logger.debug('Downloading to '+os.getcwd()+'...') logger.newline() - if arguments["-l"]: - parse_url(arguments["-l"]) - elif arguments["me"]: - if arguments["-a"]: + if arguments['-l']: + parse_url(arguments['-l']) + elif arguments['me']: + if arguments['-a']: download_all_user_tracks(who_am_i()) - elif arguments["-f"]: + elif arguments['-f']: download_user_favorites(who_am_i()) - elif arguments["-t"]: + elif arguments['-t']: download_user_tracks(who_am_i()) - elif arguments["-p"]: + elif arguments['-p']: download_user_playlists(who_am_i()) @@ -155,7 +155,7 @@ def get_item(track_url): try: item = client.get('/resolve', url=track_url) except Exception as e: - logger.error("Could not resolve url " + track_url) + logger.error('Could not resolve url {0}'.format(track_url)) logger.exception(e) sys.exit(0) return item @@ -173,25 +173,25 @@ def parse_url(track_url): elif isinstance(item, soundcloud.resource.ResourceList): download_all(item) elif item.kind == 'track': - logger.info("Found a track") + logger.info('Found a track') download_track(item) - elif item.kind == "playlist": - logger.info("Found a playlist") + elif item.kind == 'playlist': + logger.info('Found a playlist') download_playlist(item) elif item.kind == 'user': - logger.info("Found an user profile") - if arguments["-f"]: + logger.info('Found an user profile') + if arguments['-f']: download_user_favorites(item) - elif arguments["-t"]: + elif arguments['-t']: download_user_tracks(item) - elif arguments["-a"]: + elif arguments['-a']: download_all_user_tracks(item) - elif arguments["-p"]: + elif arguments['-p']: download_user_playlists(item) else: logger.error('Please provide a download type...') else: - logger.error("Unknown item type") + logger.error('Unknown item type') def who_am_i(): @@ -206,7 +206,7 @@ def who_am_i(): except: logger.error('Invalid token...') sys.exit(0) - logger.info('Hello ' + current_user.username + '!') + logger.info('Hello {0.username}!'.format(current_user)) logger.newline() return current_user @@ -218,7 +218,7 @@ def download_all_user_tracks(user): global offset user_id = user.id - url = "https://api.sndcdn.com/e1/users/%s/sounds.json?limit=1&offset=%d&client_id=%s" % (user_id, offset, scdl_client_id) + url = 'https://api.sndcdn.com/e1/users/{0}/sounds.json?limit=1&offset={1}&client_id={2}'.format(user_id, offset, scdl_client_id) response = urllib.request.urlopen(url) data = response.read() text = data.decode('utf-8') @@ -232,7 +232,7 @@ def download_all_user_tracks(user): logger.info('Track n°%d' % (offset)) parse_url(this_url) - url = "https://api.sndcdn.com/e1/users/%s/sounds.json?limit=1&offset=%d&client_id=%s" % (user_id, offset, scdl_client_id) + url = 'https://api.sndcdn.com/e1/users/{0}/sounds.json?limit=1&offset={1}&client_id={2}'.format(user_id, offset, scdl_client_id) response = urllib.request.urlopen(url) data = response.read() text = data.decode('utf-8') @@ -245,15 +245,15 @@ def download_user_tracks(user): """ global offset count = 0 - tracks = client.get('/users/' + str(user.id) + '/tracks', limit=10, offset=offset) + tracks = client.get('/users/{0.id}/tracks'.format(user), limit=10, offset=offset) for track in tracks: for track in tracks: count += 1 logger.newline() - logger.info('Track n°%d' % (count)) + logger.info('Track n°{0}'.format(count)) download_track(track) offset += 10 - tracks = client.get('/users/' + str(user.id) + '/tracks', limit=10, offset=offset) + tracks = client.get('/users/{0.id}/tracks'.format(user), limit=10, offset=offset) logger.info('All users track downloaded!') @@ -263,15 +263,15 @@ def download_user_playlists(user): """ global offset count = 0 - playlists = client.get('/users/' + str(user.id) + '/playlists', limit=10, offset=offset) + playlists = client.get('/users/{0.id}/playlists'.format(user), limit=10, offset=offset) for playlist in playlists: for playlist in playlists: count += 1 logger.newline() - logger.info('Playlist n°%d' % (count)) + logger.info('Playlist n°{0}'.format(count)) download_playlist(playlist) offset += 10 - playlists = client.get('/users/' + str(user.id) + '/playlists', limit=10, offset=offset) + playlists = client.get('/users/{0.id}/playlists'.format(user), limit=10, offset=offset) logger.info('All users playlists downloaded!') @@ -281,15 +281,15 @@ def download_user_favorites(user): """ global offset count = 0 - favorites = client.get('/users/' + str(user.id) + '/favorites', limit=10, offset=offset) + favorites = client.get('/users/{0.id}/favorites'.format(user), limit=10, offset=offset) for track in favorites: for track in favorites: count += 1 logger.newline() - logger.info('Favorite n°%d' % (count)) + logger.info('Favorite n°{0}'.format(count)) download_track(track) offset += 10 - favorites = client.get('/users/' + str(user.id) + '/favorites', limit=10, offset=offset) + favorites = client.get('/users/{0.id}/favorites'.format(user), limit=10, offset=offset) logger.info('All users favorites downloaded!') @@ -319,8 +319,8 @@ def download_playlist(playlist): for track_raw in playlist.tracks: count += 1 - mp3_url = get_item(track_raw["permalink_url"]) - logger.info('Track n°%d' % (count)) + mp3_url = get_item(track_raw['permalink_url']) + logger.info('Track n°{0}'.format(count)) download_track(mp3_url, playlist.title) os.chdir('..') @@ -331,20 +331,20 @@ def download_all(tracks): Download all song of a page Not recommended """ - logger.error("NOTE: This will only download the songs of the page.(49 max)") - logger.error("I recommend you to provide an user link and a download type.") + logger.error('NOTE: This will only download the songs of the page.(49 max)') + logger.error('I recommend you to provide an user link and a download type.') count = 0 for track in tracks: count += 1 logger.newline() - logger.info('Track n°%d' % (count)) + logger.info('Track n°{0}'.format(count)) download_track(track) def alternative_download(track): logger.debug('alternative_download used') track_id = str(track.id) - url = 'http://api.soundcloud.com/i1/tracks/' + track_id + '/streams?client_id=a3e059563d7fd3372b49b37f00a00bcf' + url = 'http://api.soundcloud.com/i1/tracks/{0}/streams?client_id=a3e059563d7fd3372b49b37f00a00bcf'.format(track_id) res = urllib.request.urlopen(url) data = res.read().decode('utf-8') json_data = json.loads(data) @@ -369,25 +369,25 @@ def download_track(track, playlist_name=None): except HTTPError: url = alternative_download(track) else: - logger.error('%s is not streamable...' % (track.title)) + logger.error('{0.title} is not streamable...'.format(track)) logger.newline() return title = track.title title = title.encode('utf-8', 'ignore').decode(sys.stdout.encoding) - logger.info("Downloading " + title) + logger.info('Downloading {0}'.format(title)) #filename - if track.downloadable and not arguments["--onlymp3"]: + if track.downloadable and not arguments['--onlymp3']: logger.info('Downloading the orginal file.') - url = track.download_url + '?client_id=' + scdl_client_id + url = '{0.download_url}?client_id={1}'.format(track, scdl_client_id) filename = urllib.request.urlopen(url).info()['Content-Disposition'].split('filename=')[1] if filename[0] == '"' or filename[0] == "'": filename = filename[1:-1] else: invalid_chars = '\/:*?|<>"' - if track.user['username'] not in title and arguments["--addtofile"]: - title = track.user['username'] + ' - ' + title + if track.user['username'] not in title and arguments['--addtofile']: + title = '{0.user[username]} - {1}'.format(track, title) title = ''.join(c for c in title if c not in invalid_chars) filename = title + '.mp3' @@ -404,19 +404,19 @@ def download_track(track, playlist_name=None): except: logger.error('Error trying to set the tags...') else: - logger.error('This type of audio doesn\'t support tagging...') + logger.error("This type of audio doesn't support tagging...") else: - if arguments["-c"]: - logger.info(title + " already Downloaded") + if arguments['-c']: + logger.info('{0} already Downloaded'.format(title)) logger.newline() return else: logger.newline() - logger.error("Music already exists ! (exiting)") + logger.error('Music already exists ! (exiting)') sys.exit(0) logger.newline() - logger.info(filename + ' Downloaded.') + logger.info('{0} Downloaded.'.format(filename)) logger.newline() @@ -424,8 +424,8 @@ def settags(track, filename, album='Soundcloud'): """ Set the tags to the mp3 """ - logger.info("Settings tags...") - user = client.get('/users/' + str(track.user_id), allow_redirects=False) + logger.info('Settings tags...') + user = client.get('/users/{0.user_id}'.format(track), allow_redirects=False) artwork_url = track.artwork_url if artwork_url is None: @@ -434,14 +434,15 @@ def settags(track, filename, album='Soundcloud'): urllib.request.urlretrieve(artwork_url, '/tmp/scdl.jpg') audio = mutagen.File(filename) - audio["TIT2"] = mutagen.id3.TIT2(encoding=3, text=track.title) - audio["TALB"] = mutagen.id3.TALB(encoding=3, text=album) - audio["TPE1"] = mutagen.id3.TPE1(encoding=3, text=user.username) - audio["TCON"] = mutagen.id3.TCON(encoding=3, text=track.genre) + audio['TIT2'] = mutagen.id3.TIT2(encoding=3, text=track.title) + audio['TALB'] = mutagen.id3.TALB(encoding=3, text=album) + audio['TPE1'] = mutagen.id3.TPE1(encoding=3, text=user.username) + audio['TCON'] = mutagen.id3.TCON(encoding=3, text=track.genre) if artwork_url is not None: - audio["APIC"] = mutagen.id3.APIC(encoding=3, mime='image/jpeg', type=3, desc='Cover', data=open('/tmp/scdl.jpg', 'rb').read()) + audio['APIC'] = mutagen.id3.APIC(encoding=3, mime='image/jpeg', type=3, desc='Cover', + data=open('/tmp/scdl.jpg', 'rb').read()) else: - logger.error("Artwork can not be set.") + logger.error('Artwork can not be set.') audio.save() @@ -452,12 +453,12 @@ def signal_handler(signal, frame): time.sleep(1) files = os.listdir() for f in files: - if not os.path.isdir(f) and ".tmp" in f: + if not os.path.isdir(f) and '.tmp' in f: os.remove(f) logger.newline() logger.info('Good bye!') sys.exit(0) -if __name__ == "__main__": +if __name__ == '__main__': main()