Add handle for song name and song folder config.

This commit is contained in:
codezjx 2017-07-06 00:30:20 +08:00
parent a148e91524
commit e492deb771
2 changed files with 35 additions and 14 deletions

View File

@ -3,28 +3,49 @@
import os import os
import requests import requests
from ncm import config
from ncm.api import CloudApi from ncm.api import CloudApi
from ncm.file_util import add_metadata_to_song 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 # get song info
api = CloudApi() api = CloudApi()
song = api.get_song(song_id) 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 # get song info
api = CloudApi() api = CloudApi()
song_id = song['id'] song_id = song['id']
song_name = song['name'] song_name = song['name']
artist_name = song['artists'][0]['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 # download song
song_url = api.get_song_url(song_id) 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: if is_already_download:
print('Mp3 file already download:', song_file_name) print('Mp3 file already download:', song_file_name)
return return
@ -32,11 +53,11 @@ def download_song_by_song(song, download_folder):
# download cover # download cover
cover_url = song['album']['blurPicUrl'] cover_url = song['album']['blurPicUrl']
cover_file_name = 'cover_{}.jpg'.format(song_id) 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 # add metadata for song
song_file_path = os.path.join(download_folder, song_file_name) song_file_path = os.path.join(song_download_folder, song_file_name)
cover_file_path = os.path.join(download_folder, cover_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) add_metadata_to_song(song_file_path, cover_file_path, song)
# delete cover file # delete cover file

View File

@ -14,29 +14,29 @@ api = CloudApi()
def download_hot_songs(artist_id): def download_hot_songs(artist_id):
songs = api.get_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) folder_path = os.path.join(config.DOWNLOAD_DIR, folder_name)
for i, song in enumerate(songs): for i, song in enumerate(songs):
print(str(i + 1) + ' song name:' + song['name']) 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): def download_album_songs(album_id):
songs = api.get_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) folder_path = os.path.join(config.DOWNLOAD_DIR, folder_name)
for i, song in enumerate(songs): for i, song in enumerate(songs):
print(str(i + 1) + ' song name:' + song['name']) 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): def download_playlist_songs(playlist_id):
songs, playlist_name = api.get_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) folder_path = os.path.join(config.DOWNLOAD_DIR, folder_name)
for i, song in enumerate(songs): for i, song in enumerate(songs):
print(str(i + 1) + ' song name:' + song['name']) 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(): def main():