示例#1
0
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
示例#2
0
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')
示例#3
0
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
示例#4
0
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')