def match_args(): if const.args.song: for track in const.args.song: track_dl = downloader.Downloader(raw_song=track) track_dl.download_single() elif const.args.list: if const.args.write_m3u: youtube_tools.generate_m3u(track_file=const.args.list) else: list_dl = downloader.ListDownloader( tracks_file=const.args.list, skip_file=const.args.skip, write_successful_file=const.args.write_successful, ) list_dl.download_list() elif const.args.clear_playlist: spotify_tools.clear_playlist(const.args.clear_playlist) elif const.args.playlist: spotify_tools.write_playlist(playlist_url=const.args.playlist, text_file=const.args.write_to) elif const.args.album: spotify_tools.write_album(album_url=const.args.album, text_file=const.args.write_to) elif const.args.all_albums: spotify_tools.write_all_albums_from_artist( artist_url=const.args.all_albums, text_file=const.args.write_to) elif const.args.username: spotify_tools.write_user_playlist(username=const.args.username, text_file=const.args.write_to)
def main(): const.args = handle.get_arguments() if const.args.version: print("spotdl {version}".format(version=__version__)) sys.exit() internals.filter_path(const.args.folder) youtube_tools.set_api_key() logzero.setup_default_logger(formatter=const._formatter, level=const.args.log_level) log.debug("Python version: {}".format(sys.version)) log.debug("Platform: {}".format(platform.platform())) log.debug(pprint.pformat(const.args.__dict__)) try: if const.args.song: download_single(raw_song=const.args.song) elif const.args.list: if const.args.write_m3u: youtube_tools.generate_m3u(track_file=const.args.list) else: download_list( tracks_file=const.args.list, skip_file=const.args.skip, write_successful_file=const.args.write_successful, ) elif const.args.playlist: spotify_tools.write_playlist(playlist_url=const.args.playlist) elif const.args.album: spotify_tools.write_album(album_url=const.args.album) elif const.args.all_albums: spotify_tools.write_all_albums_from_artist( artist_url=const.args.all_albums) elif const.args.username: spotify_tools.write_user_playlist(username=const.args.username) # actually we don't necessarily need this, but yeah... # explicit is better than implicit! sys.exit(0) except KeyboardInterrupt as e: log.exception(e) sys.exit(3)
def list_downloader(operation, text_file, tracks_url): if operation is not 'list': if const.args.write_m3u: youtube_tools.generate_m3u(track_file=text_file) else: # list_name = str(self.category_list) + '.txt' list_dl = ListDownloaderInherited( tracks_file=text_file, skip_file=const.args.skip, write_successful_file=const.args.write_successful, ) downloaded = list_dl.download_list() try: os.remove(text_file) except Exception as e: print("Unable to remove txt file.")
def test_m3u(tmpdir): expect_m3u = ( "#EXTM3U\n\n" "#EXTINF:32,Eminem - Curtains Up (Skit) - The Eminem Show (2002) w/ Lyrics\n" "http://www.youtube.com/watch?v=HbMJGI1m--Y\n" "#EXTINF:226,Alan Walker - Spectre [NCS Release]\n" "http://www.youtube.com/watch?v=AOeY-nDp7hI\n") m3u_track_file = os.path.join(str(tmpdir), "m3u_test.txt") with open(m3u_track_file, "w") as track_file: track_file.write( "\nhttps://open.spotify.com/track/2nT5m433s95hvYJH4S7ont") track_file.write("\nhttp://www.youtube.com/watch?v=AOeY-nDp7hI") youtube_tools.generate_m3u(m3u_track_file) m3u_file = "{}.m3u".format(m3u_track_file.split(".")[0]) with open(m3u_file, "r") as m3u_in: m3u = m3u_in.readlines() assert "".join(m3u) == expect_m3u
def test_generate_m3u(tmpdir, monkeypatch): monkeypatch.setattr(youtube_tools.GenerateYouTubeURL, "_fetch_response", loader.monkeypatch_youtube_search_page) expect_m3u = ( "#EXTM3U\n\n" "#EXTINF:208,Janji - Heroes Tonight (feat. Johnning) [NCS Release]\n" "http://www.youtube.com/watch?v=3nQNiWdeH2Q\n" "#EXTINF:226,Alan Walker - Spectre [NCS Release]\n" "http://www.youtube.com/watch?v=AOeY-nDp7hI\n") m3u_track_file = os.path.join(str(tmpdir), "m3u_test.txt") with open(m3u_track_file, "w") as track_file: track_file.write( "\nhttps://open.spotify.com/track/3SipFlNddvL0XNZRLXvdZD") track_file.write("\nhttp://www.youtube.com/watch?v=AOeY-nDp7hI") youtube_tools.generate_m3u(m3u_track_file) m3u_file = "{}.m3u".format(m3u_track_file.split(".")[0]) with open(m3u_file, "r") as m3u_in: m3u = m3u_in.readlines() assert "".join(m3u) == expect_m3u