From 2c48fb5ba7de2cc0b90552cec8e5bbaeb9e8a863 Mon Sep 17 00:00:00 2001 From: Swapnadeep Som <75885103+No-Cellist-7780@users.noreply.github.com> Date: Mon, 21 Dec 2020 22:13:08 +0530 Subject: [PATCH] added argparse for better useage --- main.py | 377 ++++++++++++++++++++++---------------------------------- 1 file changed, 144 insertions(+), 233 deletions(-) diff --git a/main.py b/main.py index 8374363..0bde84d 100755 --- a/main.py +++ b/main.py @@ -5,9 +5,8 @@ from lastfm import LastFM from apple import AppleMusic from deezer import Deezer -import sys, getopt, shutil +import argparse, shutil import os, re, random -import notify2 from pygame import mixer @@ -27,7 +26,7 @@ def __downloadMusicFromYoutube(self, name, uri, dur): #finding song on youtube self.__youtube.get(name, dur) - notify.send(f'Downloading from YouTube', downloaded=False) + print(f'Downloading from YouTube') #downloading video from youtube if self.__youtube.download( @@ -71,7 +70,7 @@ def downloadBySpotifyUri(self, uri, path): info = self.__getSongInfoFromSpotify(uri) if info: - notify.send(f'{info["artist"][0]} - {info["name"]}', downloaded=False) + print(f'{info["artist"][0]} - {info["name"]}') info['uri'] = str(info['uri']).split('/')[-1] info['uri'] = str(info['uri']).split('?')[0] @@ -117,7 +116,7 @@ def downloadBySpotifyUri(self, uri, path): try:shutil.rmtree(f"cache/{info['uri']}") except:pass - notify.send(f'{info["artist"][0]} - {info["name"]}') + print(f'{info["artist"][0]} - {info["name"]}') return True return False @@ -131,7 +130,7 @@ def downloadBySearchQuery(self, query, path=None): if info: - notify.send(f'{info["artist"][0]} - {info["name"]}', downloaded=False) + print(f'{info["artist"][0]} - {info["name"]}') fixed_name = f'{info["artist"][0]} - {info["name"]}' fixed_name = fixed_name.replace('.','') @@ -172,7 +171,7 @@ def downloadBySearchQuery(self, query, path=None): except: pass - notify.send(f'{info["artist"][0]} - {info["name"]}') + print(f'{info["artist"][0]} - {info["name"]}') return True, info else: return False, None @@ -198,7 +197,7 @@ def downloadBySpotifyUriFromFile(self, filename): try: state = self.downloadBySpotifyUri(str(song).split(':')[-1]) if not state: - notify.send(f'Failed to download',True) + print(f'Failed to download') except: print('Something went wrong!') @@ -214,7 +213,7 @@ def downloadBySpotifyUriPlaylistMode(self, playlist_uri, path): info['uri'] = str(info['uri']).split('/')[-1] info['uri'] = str(info['uri']).split('?')[0] - notify.send(f'{info["artist"][0]} - {info["name"]}', downloaded=False) + print(f'{info["artist"][0]} - {info["name"]}') fixed_name = f'{info["artist"][0]} - {info["name"]}' fixed_name = fixed_name.replace('.','') @@ -253,7 +252,7 @@ def downloadBySpotifyUriPlaylistMode(self, playlist_uri, path): try: shutil.rmtree(f"cache/{info['uri']}") except: pass - notify.send(f'{info["artist"][0]} - {info["name"]}') + print(f'{info["artist"][0]} - {info["name"]}') def downloadBySpotifyUriAlbumMode(self, album_uri, path): @@ -265,7 +264,7 @@ def downloadBySpotifyUriAlbumMode(self, album_uri, path): info['uri'] = str(info['uri']).split('/')[-1] info['uri'] = str(info['uri']).split('?')[0] - notify.send(f'{info["artist"][0]} - {info["name"]}', downloaded=False) + print(f'{info["artist"][0]} - {info["name"]}') print(f'Downloading {i+1} of {len(playlist["tracks"])}') @@ -306,7 +305,7 @@ def downloadBySpotifyUriAlbumMode(self, album_uri, path): try: shutil.rmtree(f"cache/{info['uri']}") except: pass - notify.send(f'{info["artist"][0]} - {info["name"]}') + print(f'{info["artist"][0]} - {info["name"]}') def downloadByDeezerUrl(self, url, path): @@ -317,7 +316,7 @@ def downloadByDeezerUrl(self, url, path): if info: - notify.send(f'{info["artist"][0]} - {info["name"]}', downloaded=False) + print(f'{info["artist"][0]} - {info["name"]}') fixed_name = f'{info["artist"][0]} - {info["name"]}' fixed_name = fixed_name.replace('.','') @@ -359,7 +358,7 @@ def downloadByDeezerUrl(self, url, path): try:shutil.rmtree(f"cache/{info['uri']}") except:pass - notify.send(f'{info["artist"][0]} - {info["name"]}') + print(f'{info["artist"][0]} - {info["name"]}') return True return False @@ -372,7 +371,7 @@ def downloadByDeezerUrlAlbumMode(self, album_url, path): for info, i in zip(playlist['tracks'],range(len(playlist['tracks']))): - notify.send(f'{info["artist"][0]} - {info["name"]}', downloaded=False) + print(f'{info["artist"][0]} - {info["name"]}') print(f'Downloading {i+1} of {len(playlist["tracks"])}') @@ -413,7 +412,7 @@ def downloadByDeezerUrlAlbumMode(self, album_url, path): try: shutil.rmtree(f"cache/{info['uri']}") except: pass - notify.send(f'{info["artist"][0]} - {info["name"]}') + print(f'{info["artist"][0]} - {info["name"]}') def downloadByDeezerUrlPlaylistMode(self, playlist_url, path): @@ -424,7 +423,7 @@ def downloadByDeezerUrlPlaylistMode(self, playlist_url, path): for info, i in zip(playlist['tracks'],range(len(playlist['tracks']))): - notify.send(f'{info["artist"][0]} - {info["name"]}', downloaded=False) + print(f'{info["artist"][0]} - {info["name"]}') print(f'Downloading {i+1} of {len(playlist["tracks"])}') @@ -465,7 +464,7 @@ def downloadByDeezerUrlPlaylistMode(self, playlist_url, path): try: shutil.rmtree(f"cache/{info['uri']}") except: pass - notify.send(f'{info["artist"][0]} - {info["name"]}') + print(f'{info["artist"][0]} - {info["name"]}') def downloadFromYoutubeMusic(self, url, info, path): @@ -473,7 +472,7 @@ def downloadFromYoutubeMusic(self, url, info, path): uri = info['uri'] - notify.send(f'{info["artist"][0]} - {info["name"]}', downloaded=False) + print(f'{info["artist"][0]} - {info["name"]}') #downloading video from youtube if self.__youtube.download( @@ -515,7 +514,7 @@ def downloadFromYoutubeMusic(self, url, info, path): try:shutil.rmtree(f"cache/{info['uri']}") except:pass - notify.send(f'{info["artist"][0]} - {info["name"]}') + print(f'{info["artist"][0]} - {info["name"]}') return True, info else: return False, None @@ -546,220 +545,132 @@ def logo(): ''') @staticmethod - def help(): - - CLI.logo() - - print('\t\t Spotify Music Downloader') - print('\t\t version 1.7.1-stable\n') - - print(' ./main.py [argument][value] - startup with arguments\n') - - print(' Arguments:\n') - - print(' -h, --help Print a help message and exit.') - print(' -p, --path Set another directory.\n') - - print(' -ss, --spotify-song Spotify song link or URI.') - print(' -sa, --spotify-album Spotify album link or URI.') - print(' -sp, --spotify-playlist Spotify playlist URI.\n') - - print(' -ds, --deezer-song Deezer song link.') - print(' -da, --deezer-album Deezer album link.') - print(' -dp, --deezer-playlist Deezer playlist link.\n') - - print(' -ym, --youtube-music YouTube Music link.') - print(' -yv, --youtube-video YouTube Video link.\n') - - print(' -a, --apple Apple Music link.') - print(' -q, --query Search query.\n') - - print(' Note that your link has to be with quotation marks - "your_url"!\n') - - - @staticmethod - def main(argv): - - array = sys.argv - - for i in range(len(array)): - - if array[i] in ('-p','--path'): - CLI.path = array[i+1] - - print(CLI.path) - - #same old for loop - for i in range(len(array)): - - if array[i] in ('-h','--help'): - - CLI.help() - - - elif array[i] in ('-ss','--spotify-song'): - try: - md = MusicDownloader() - state = md.downloadBySpotifyUri(array[i+1], CLI.path) - if not state: - notify.send(f'Failed to download',True) - except KeyboardInterrupt: - sys.exit(0) - sys.exit(0) - - elif array[i] in ('-sa','--spotify-album'): - - try: - md = MusicDownloader() - md.downloadBySpotifyUriAlbumMode(array[i+1], CLI.path) - except KeyboardInterrupt: - sys.exit(0) - sys.exit(0) - - elif array[i] in ('-sp','--spotify-playlist'): - - #playlist uri - try: - md = MusicDownloader() - md.downloadBySpotifyUriPlaylistMode(array[i+1], CLI.path) - except KeyboardInterrupt: - sys.exit(0) - sys.exit(0) - - elif array[i] in ('-ds','--deezer-song'): - - try: - md = MusicDownloader() - state = md.downloadByDeezerUrl(array[i+1], CLI.path) - if not state: - notify.send(f'Failed to download',True) - except KeyboardInterrupt: - sys.exit(0) - sys.exit(0) - - elif array[i] in ('-da','--deezer-album'): - - try: - md = MusicDownloader() - md.downloadByDeezerUrlAlbumMode(array[i+1], CLI.path) - except KeyboardInterrupt: - sys.exit(0) - sys.exit(0) - - elif array[i] in ('-dp','--deezer-playlist'): - - #playlist uri - try: - md = MusicDownloader() - md.downloadByDeezerUrlPlaylistMode(array[i+1], CLI.path) - except KeyboardInterrupt: - sys.exit(0) - sys.exit(0) - - elif array[i] in ('-ym','--youtube-music'): - - #YouTube Music - try: - link = ''.join(str(array[i+1]).split('music.')).split('&')[0] - - md = MusicDownloader() - name = md.getYoutubeMusicInfo(link) - tags = md.getLastFMTags(name) - - try: - state = md.downloadFromYoutubeMusic(url=link, info=tags, path=CLI.path) - except: - notify.send(f'Failed to download',True) - - except KeyboardInterrupt: - sys.exit(0) - - sys.exit(0) - - elif array[i] in ('-yv','--youtube-video'): - - try: - - md = MusicDownloader() - name = md.getNameFromYoutube(array[i+1]) - - uri = random.randint(1000000000,10000000000) - uri = 's' + str(uri) + 't' - - info = { - 'uri' : uri, - 'name' : str(name).split('-')[-1], - 'artist' : str(name).split('-')[0], - 'album' : 'YouTube', - 'image' : '', - 'duration_ms' : 0 - } - - state = md.downloadFromYoutubeMusic(url=array[i+1], info=info, path=CLI.path) - - if not state: - notify.send(f'Failed to download',True) - - except KeyboardInterrupt: - sys.exit(0) - sys.exit(0) - - elif array[i] in ('-a','--apple'): - - #Apple Music - try: - md = MusicDownloader() - apple = AppleMusic() - name = apple.getName(array[i+1]) - state = md.downloadBySearchQuery(query=name, path=CLI.path) - if not state: - notify.send(f'Failed to download',True) - except KeyboardInterrupt: - sys.exit(0) - - sys.exit(0) - - elif array[i] in ('-q','--query'): - - try: - md = MusicDownloader() - state, data = md.downloadBySearchQuery(query=array[i+1], path=CLI.path) - if not state: - notify.send(f'Failed to download',True) - except KeyboardInterrupt: - sys.exit(0) - sys.exit(0) - - CLI.help() - - - - -class notify(object): - - image = os.getcwd() + '/Data/icon.png' - sound_info = os.getcwd() + '/Data/i.mp3' - sound_warn = os.getcwd() + '/Data/w.mp3' - try:notify2.init("Spotify Music Downloader Notifier") - except:pass - - @staticmethod - def sound(error=False): - mixer.init() - mixer.music.load(notify.sound_warn if error else notify.sound_info) - mixer.music.play() + def get_parser(): + parser = argparse.ArgumentParser(description="SMD") + parser.add_argument( + "-p", + "--path", + metavar="Folder", + help="Set another directory" + ) + parser.add_argument( + "-ss", + "--spotify-song", + metavar="spotify", + type = str, + help="Spotify song link or URI." + ) + parser.add_argument( + "-sa", + "--spotify-album", + metavar="spotify", + type=str, + help="Spotify album link or URI" + ) + parser.add_argument( + "-sp", + "--spotify-playlist", + metavar="spotify", + type=str, + help="Spotify playlist or URI" + ) + parser.add_argument( + "-ds", "--deezer-song",metavar="deezer", type=str, help="Deezer song link." + ) + parser.add_argument( + "-da", "--deezer-album", metavar="deezer", type=str, help="Deezer album link" + ) + parser.add_argument( + "-dp", "--deezer-playlist", metavar="deezer", type=str, help="Deezer playulist link." + ) + parser.add_argument( + "-ym", "--youtube-music", metavar="yt", type=str, help="Youtube Music link" + ) + parser.add_argument( + "-yv", "--youtube-video", metavar="yt", type=str, help="Youtube Video link." + ) + parser.add_argument( + "-a", "--apple-music", metavar="apple", type=str, help="Apple Music Link." + ) + parser.add_argument( + "-q", "--query", metavar="search", type=str, help="Search query." + ) + + return parser @staticmethod - def send(message, error=False, downloaded=True): - try: - ns = notify2.Notification(f'{"Downloaded" if downloaded else "Start downloading"}', message=message, icon=notify.image) - # Set the urgency level - ns.set_urgency(notify2.URGENCY_NORMAL) - # Set the timeout - ns.set_timeout(5000) - notify.sound(error) - ns.show() - except:pass + def main(): + parser = CLI.get_parser() + args = parser.parse_args() + md = MusicDownloader() + + if args.path: + CLI.path = args.path + print("Path has been set to :" , args.path) + + if args.spotify_song: + state = md.downloadBySpotifyUri(args.spotify_song, CLI.path) + if not state: + print(f'Failed to download') + + elif args.spotify_album: + md.downloadBySpotifyUriAlbumMode(args.spotify_album, CLI.path) + + elif args.spotify_playlist: + md.downloadBySpotifyUriPlaylistMode(args.spotify_playlist, CLI.path) + + elif args.deezer_song: + state = md.downloadByDeezerUrl(args.deezer_song, CLI.path) + if not state: + print(f'Failed to download') + + elif args.deezer_album: + md.downloadByDeezerUrlAlbumMode(args.deezer_album, CLI.path) + + elif args.deezer_playlist: + md.downloadByDeezerUrlPlaylistMode(args.deezer_playlist, CLI.path) + + elif args.youtube_music: + link = ''.join(str(args.youtube_music).split('music.')).split('&')[0] + + name = md.getYoutubeMusicInfo(link) + tags = md.getLastFMTags(name) + + elif args.youtube_video: + name = md.getNameFromYoutube(args.youtube_video) + + uri = random.randint(1000000000,1000000000) + uri = 's' + str(uri) + 't' + + info = { + 'uri' : uri, + 'name' : str(name).split('-')[-1], + 'artist' : str(name).split('-')[0], + 'album' : 'YouTube', + 'image' : '', + 'duration_ms' : 0 + } + + state = md.downloadFromYoutubeMusic(url=args.youtube_video, info=info, path=CLI.path) + + if not state: + print(f'Failed to download') + + elif args.apple_music: + apple = AppleMusic() + name = apple.getName(args.apple_music) + state = md.downloadBySearchQuery(query=name, path=CLI.path) + if not state: + print(f'Failed to download') + + elif args.query: + md = MusicDownloader() + state, data = md.downloadBySearchQuery(query=args.query, path=CLI.path) + if not state: + print(f'Failed to download') + + else: + parser.print_help() def getCorrect(name): @@ -768,4 +679,4 @@ def getCorrect(name): if __name__ == '__main__': - CLI.main(sys.argv[1:]) + CLI.main()