From 9cf08f5e4d500e6ee4f000176242c0aed9766546 Mon Sep 17 00:00:00 2001 From: codezjx Date: Sun, 27 Aug 2017 22:40:57 +0800 Subject: [PATCH] #13 Bugfix: if the folder name contains illegal characters, replace it with ' '. --- ncm/downloader.py | 13 ++++++++++--- ncm/start.py | 7 ++++--- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/ncm/downloader.py b/ncm/downloader.py index c3ea6b4..5acc933 100644 --- a/ncm/downloader.py +++ b/ncm/downloader.py @@ -20,9 +20,9 @@ def download_song_by_song(song, download_folder, sub_folder=True): # get song info api = CloudApi() song_id = song['id'] - song_name = re.sub(r'[\\/:*?"<>|]', ' ', song['name']) # Replace illegal character with ' ' - artist_name = song['artists'][0]['name'] - album_name = song['album']['name'] + song_name = format_string(song['name']) + artist_name = format_string(song['artists'][0]['name']) + album_name = format_string(song['album']['name']) # update song file name by config song_file_name = '{}.mp3'.format(song_name) @@ -117,3 +117,10 @@ class ProgressBar(object): self.status = 'Downloaded:' self.end_str = '\n' print(self.__get_info(), end=self.end_str) + + +def format_string(string): + """ + Replace illegal character with ' ' + """ + return re.sub(r'[\\/:*?"<>|]', ' ', string) diff --git a/ncm/start.py b/ncm/start.py index 10625f7..9069966 100644 --- a/ncm/start.py +++ b/ncm/start.py @@ -7,6 +7,7 @@ from ncm import config from ncm.api import CloudApi from ncm.downloader import download_song_by_id from ncm.downloader import download_song_by_song +from ncm.downloader import format_string # load the config first config.load_config() @@ -15,7 +16,7 @@ api = CloudApi() def download_hot_songs(artist_id): songs = api.get_hot_songs(artist_id) - folder_name = songs[0]['artists'][0]['name'] + ' - hot50' + folder_name = format_string(songs[0]['artists'][0]['name']) + ' - hot50' folder_path = os.path.join(config.DOWNLOAD_DIR, folder_name) download_count = config.DOWNLOAD_HOT_MAX if (0 < config.DOWNLOAD_HOT_MAX < 50) else config.DOWNLOAD_HOT_MAX_DEFAULT for i, song in zip(range(download_count), songs): @@ -25,7 +26,7 @@ def download_hot_songs(artist_id): def download_album_songs(album_id): songs = api.get_album_songs(album_id) - folder_name = songs[0]['album']['name'] + ' - album' + folder_name = format_string(songs[0]['album']['name']) + ' - album' folder_path = os.path.join(config.DOWNLOAD_DIR, folder_name) for i, song in enumerate(songs): print(str(i + 1) + ' song name:' + song['name']) @@ -34,7 +35,7 @@ def download_album_songs(album_id): def download_playlist_songs(playlist_id): songs, playlist_name = api.get_playlist_songs(playlist_id) - folder_name = playlist_name + ' - playlist' + folder_name = format_string(playlist_name) + ' - playlist' folder_path = os.path.join(config.DOWNLOAD_DIR, folder_name) for i, song in enumerate(songs): print(str(i + 1) + ' song name:' + song['name'])