From e492deb771ba16dc958ce8797cc8e1095808d40f Mon Sep 17 00:00:00 2001 From: codezjx Date: Thu, 6 Jul 2017 00:30:20 +0800 Subject: [PATCH] Add handle for song name and song folder config. --- ncm/downloader.py | 37 +++++++++++++++++++++++++++++-------- ncm/start.py | 12 ++++++------ 2 files changed, 35 insertions(+), 14 deletions(-) diff --git a/ncm/downloader.py b/ncm/downloader.py index f8fe8cb..04fa4f8 100644 --- a/ncm/downloader.py +++ b/ncm/downloader.py @@ -3,28 +3,49 @@ import os import requests +from ncm import config from ncm.api import CloudApi from ncm.file_util import add_metadata_to_song -def download_song_by_id(song_id, download_folder): +def download_song_by_id(song_id, download_folder, sub_folder=True): # get song info api = CloudApi() song = api.get_song(song_id) - download_song_by_song(song, download_folder) + download_song_by_song(song, download_folder, sub_folder) -def download_song_by_song(song, download_folder): +def download_song_by_song(song, download_folder, sub_folder=True): # get song info api = CloudApi() song_id = song['id'] song_name = song['name'] artist_name = song['artists'][0]['name'] - song_file_name = '{}_{}.mp3'.format(artist_name, song_name) + album_name = song['album']['name'] + + # update song file name by config + song_file_name = '{}.mp3'.format(song_name) + switcher_song = { + 1: song_file_name, + 2: '{} - {}.mp3'.format(artist_name, song_name), + 3: '{} - {}.mp3'.format(song_name, artist_name) + } + song_file_name = switcher_song.get(config.SONG_NAME_TYPE, song_file_name) + + # update song folder name by config, if support sub folder + if sub_folder: + switcher_folder = { + 1: download_folder, + 2: os.path.join(download_folder, artist_name), + 3: os.path.join(download_folder, artist_name, album_name), + } + song_download_folder = switcher_folder.get(config.SONG_FOLDER_TYPE, download_folder) + else: + song_download_folder = download_folder # download song song_url = api.get_song_url(song_id) - is_already_download = download_file(song_url, song_file_name, download_folder) + is_already_download = download_file(song_url, song_file_name, song_download_folder) if is_already_download: print('Mp3 file already download:', song_file_name) return @@ -32,11 +53,11 @@ def download_song_by_song(song, download_folder): # download cover cover_url = song['album']['blurPicUrl'] cover_file_name = 'cover_{}.jpg'.format(song_id) - download_file(cover_url, cover_file_name, download_folder) + download_file(cover_url, cover_file_name, song_download_folder) # add metadata for song - song_file_path = os.path.join(download_folder, song_file_name) - cover_file_path = os.path.join(download_folder, cover_file_name) + song_file_path = os.path.join(song_download_folder, song_file_name) + cover_file_path = os.path.join(song_download_folder, cover_file_name) add_metadata_to_song(song_file_path, cover_file_path, song) # delete cover file diff --git a/ncm/start.py b/ncm/start.py index f0f33b6..9ad0522 100644 --- a/ncm/start.py +++ b/ncm/start.py @@ -14,29 +14,29 @@ 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 = songs[0]['artists'][0]['name'] + ' - hot50' folder_path = os.path.join(config.DOWNLOAD_DIR, folder_name) for i, song in enumerate(songs): print(str(i + 1) + ' song name:' + song['name']) - download_song_by_song(song, folder_path) + download_song_by_song(song, folder_path, False) def download_album_songs(album_id): songs = api.get_album_songs(album_id) - folder_name = songs[0]['artists'][0]['name'] + '_' + songs[0]['album']['name'] + folder_name = 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']) - download_song_by_song(song, folder_path) + download_song_by_song(song, folder_path, False) def download_playlist_songs(playlist_id): songs, playlist_name = api.get_playlist_songs(playlist_id) - folder_name = 'playlist_' + playlist_name + folder_name = 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']) - download_song_by_song(song, folder_path) + download_song_by_song(song, folder_path, False) def main():