download.py 1.2 KB

1234567891011121314151617181920212223242526272829303132333435
  1. import os
  2. from os.path import join, exists
  3. import requests
  4. import mutagen.mp3
  5. import logging
  6. log = logging.getLogger(__name__)
  7. def download_track(track, args):
  8. log.debug('Downloading "%s"' % track['title'])
  9. if 'album' in track:
  10. fdir = join(track['artist'], track['album']).replace(' ', '_')
  11. else:
  12. fdir = join(track['artist'])
  13. fname = track['title'].replace(' ', '_') + '.mp3'
  14. fpath = join(args.download_base, fdir, fname)
  15. os.makedirs(join(args.download_base, fdir), exist_ok=True)
  16. if exists(fpath):
  17. log.info('file %s exists, skipping' % fpath)
  18. log.debug('download in ' + fpath)
  19. resp = requests.get(track['url'], stream=True)
  20. if not resp.ok:
  21. log.error('Error downloading track ', track['title'])
  22. return
  23. with open(fpath, 'wb') as buf:
  24. log.debug('writing ' + fname)
  25. for block in resp.iter_content():
  26. buf.write(block)
  27. audio = mutagen.mp3.EasyMP3(fpath) # TODO: is it always mp3?
  28. audio['title'] = track['title']
  29. audio['artist'] = track['artist']
  30. if 'album' in track:
  31. audio['album'] = track['album']
  32. audio.save()
  33. log.info('track %(title)s downloaded' % track)