import os from os.path import join, exists import requests import mutagen.mp3 import logging log = logging.getLogger(__name__) def download_track(track, args): log.debug('Downloading "%s"' % track['title']) if 'album' in track: fdir = join(track['artist'], track['album']).replace(' ', '_') else: fdir = join(track['artist']) fname = track['title'].replace(' ', '_') + '.mp3' fpath = join(args.download_base, fdir, fname) os.makedirs(join(args.download_base, fdir), exist_ok=True) if exists(fpath): log.info('file %s exists, skipping' % fpath) log.debug('download in ' + fpath) resp = requests.get(track['url'], stream=True) if not resp.ok: log.error('Error downloading track ', track['title']) return with open(fpath, 'wb') as buf: log.debug('writing ' + fname) for block in resp.iter_content(): buf.write(block) audio = mutagen.mp3.EasyMP3(fpath) # TODO: is it always mp3? audio['title'] = track['title'] audio['artist'] = track['artist'] if 'album' in track: audio['album'] = track['album'] audio.save() log.info('track %(title)s downloaded' % track)