1234567891011121314151617181920212223242526272829303132333435 |
- 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)
|