Use new string formatting

master
David Fischer 2015-05-09 22:13:11 +00:00
parent 68ddca1d8d
commit ac35effc18
1 changed files with 67 additions and 66 deletions

View File

@ -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()