示例#1
0
def download_songs(download_list=()):
    print("Downloading {cnt} songs:".format(cnt=len(download_list)))
    for song in download_list:
        print(">>> [{song_name}]({song_url})".format(song_name=song.name, song_url=song.download_url()))
    remaining_list = list(download_list)
    downloader = downloadtool.get_download_tool("aria2")
    base_dir = config.get_config().get('download_dir')
    song_path_pattern = config.get_config().get('file_path_pattern')
    while len(remaining_list) > 0:
        for song in remaining_list:
            try:
                print("Downloading {name} ({curr}/{total})".format(name=song.name, curr=len(download_list)-len(remaining_list), total=len(download_list)))
                output_dir, output_file = _get_download_path(song, base_dir, song_path_pattern)
                if not os.path.exists(output_dir):
                    os.makedirs(output_dir)
                downloader.download(uri=song.download_url(), file_name=output_file, dir_path=output_dir)
                remaining_list.remove(song)
            except Exception as e:
                print("Download error: {error}. {url} will try again later".format(error=e, url=song.download_url()))
示例#2
0
def main():
    from sys import argv

    if len(argv) < 3:
        print("Usage: username password")
        exit(1)

    username = argv[1]
    password = argv[2]

    s = Session()
    s.login(username, password)
    # print(s.get_collections().json()['playlist'][0])
    # d = datatypes.DictData(s.get_collections().json()['playlist'][0])
    # print(d.name)
    # print(d.id)

    # print(s.album_list_from_artist('9272')[0].name)
    # return

    print(s.song_details_by_id(18604870)[0].download_url())
    return

    action = "search_artist"
    # action = "search_album"
    action = "search_song"

    if action == "search_artist":
        artist = '孙燕'
        print(s.search(Session.SEARCH_TYPE_ARTIST, artist))
    elif action == "search_album":
        artist = '找'
        print(s.search(Session.SEARCH_TYPE_ALBUM, artist))
    elif action == "search_song":
        artist = '克卜勒'
        print(s.search(Session.SEARCH_TYPE_SONG, artist))
    else:
        download_list = []
        download_mode = "fetch_artist"
        artist_id = 9106
        if download_mode == "fetch_favourite":
            for pl in s.get_collections():
                print('Playlist({id}): {name}'.format(id=pl.id, name=pl.name))
                for song in s.song_details_from_playlist(pl):
                    #print('Song({id})<{bit_rate}> {name}: {url}'.format(id=song.id,
                                                                        #name=song.bMusic.name,
                                                                        #bit_rate=song.bMusic.bitrate,
                                                                        #url=song.download_url()))
                    download_list.append(song)
                    # if song.bMusic.bitrate != 320000:
                    #     print('Song<{name}> hMusic:<{hMusic}>'.format(name=song.bMusic.name, hMusic=song.hMusic))
                    #     print('Song<{name}> mMusic:<{hMusic}>'.format(name=song.bMusic.name, hMusic=song.mMusic))
                    #     print('Song<{name}> lMusic:<{hMusic}>'.format(name=song.bMusic.name, hMusic=song.lMusic))
        elif download_mode == "fetch_artist":
            albums = s.album_list_from_artist(artist_id)
            for album_info in albums:
                album_detail = s.album_detail(album_info.id)
                print(str(album_detail))
                for song in album_detail.songs:
                    download_list.append(song)

        for song in download_list:
            print("Tobe download: {url}".format(url=song.download_url()))

        return

        import downloadtool
        download_tool = downloadtool.get_download_tool("aria2")
        total = len(download_list)
        while len(download_list) > 0:
            for song in download_list:
                try:
                    print("Downloading ({done}/{total})".format(total=total, done=len(download_list)))
                    download_tool.download(uri=song.download_url(), file_name=song.bMusic.name+'.'+song.bMusic.extension)
                    download_list.remove(song)
                except Exception as e:
                    print("Download error: {url} will try again later".format(url=song.download_url()))