def check_exists(music_file, raw_song, islist=True): """Check if the input song already exists in the given folder.""" songs = os.listdir(args.folder) for song in songs: if song.endswith('.temp'): os.remove(os.path.join(args.folder, song)) continue # check if any song with similar name is already present in the given folder file_name = misc.sanitize_title(music_file) if song.startswith(file_name): # check if the already downloaded song has correct metadata already_tagged = metadata.compare(os.path.join(args.folder, song), generate_metadata(raw_song)) # if not, remove it and download again without prompt if misc.is_spotify(raw_song) and not already_tagged: os.remove(os.path.join(args.folder, song)) return False # do not prompt and skip the current song # if already downloaded when using list if islist: return True # if downloading only single song, prompt to re-download else: prompt = input( 'Song with same name has already been downloaded. ' 'Re-download? (y/n): ').lower() if prompt == 'y': os.remove(os.path.join(args.folder, song)) return False else: return True return False
def grab_single(raw_song, number=None): """Logic behind downloading a song.""" print('grab single ' + raw_song) if number: islist = True else: islist = False content = go_pafy(raw_song) if content is None: return # print '[number]. [artist] - [song]' if downloading from list # otherwise print '[artist] - [song]' print(get_youtube_title(content, number)) # generate file name of the song to download try: meta_tags = generate_metadata(raw_song) except (urllib.request.URLError, TypeError, IOError, spotipy.oauth2.SpotifyOauthError): spotify = generate_token() meta_tags = generate_metadata(raw_song) if meta_tags is None: songname = content.title else: songname = generate_songname(meta_tags) print('Song -->' + songname) file_name = misc.sanitize_title(songname) if not check_exists(file_name, raw_song, islist=islist): if download_song(file_name, content): print('') input_song = file_name + args.input_ext output_song = file_name + args.output_ext print(output_song) convert.song(input_song, output_song, args.folder, avconv=args.avconv, verbose=args.verbose) if not args.input_ext == args.output_ext: os.remove(os.path.join(args.folder, input_song)) if not args.no_metadata: metadata.embed(os.path.join(args.folder, output_song), meta_tags) else: print('No audio streams available or song already downloaded')
def get_song_name(raw_song): try: meta_tags = generate_metadata(raw_song) content = go_pafy(raw_song) except (urllib.request.URLError, TypeError, IOError, spotipy.oauth2.SpotifyOauthError): spotify = generate_token() meta_tags = generate_metadata(raw_song) if meta_tags is None: songname = content.title else: songname = generate_songname(meta_tags) print('Song -->' + songname) file_name = misc.sanitize_title(songname) file_name = file_name + ".mp3" return filename
def grab_single(raw_song, number=None): """Logic behind downloading a song.""" if number: islist = True else: islist = False content = go_pafy(raw_song) if content is None: return if misc.is_youtube(raw_song): raw_song = slugify(content.title).replace('-', ' ') # print '[number]. [artist] - [song]' if downloading from list # otherwise print '[artist] - [song]' print(get_youtube_title(content, number)) # generate file name of the song to download meta_tags = generate_metadata(raw_song) songname = content.title if meta_tags is not None: refined_songname = generate_songname(meta_tags) if not refined_songname == ' - ': songname = refined_songname file_name = misc.sanitize_title(songname) if not check_exists(file_name, raw_song, islist=islist): if download_song(file_name, content): print('') input_song = file_name + args.input_ext output_song = file_name + args.output_ext convert.song(input_song, output_song, args.folder, avconv=args.avconv, verbose=args.verbose) if not args.input_ext == args.output_ext: os.remove(os.path.join(args.folder, input_song)) if not args.no_metadata: metadata.embed(os.path.join(args.folder, output_song), meta_tags) else: print('No audio streams available')