def download_playlist(dir, link, list_name, append_pl=False): if list_name is None: list_name = "playlist" if list_name == "": list_name = "playlist" dir_base = dir folder = 'mp3-songs' directory = '{}/{}'.format(dir_base, folder) exists = os.path.exists(directory) i = -1 while exists: i += 1 exists = os.path.exists(directory + str(i)) if i >= 0: folder += str(i) directory += str(i) os.mkdir(directory) print("Beginning download for playlist: {}\nDownloading from link: {}".format(list_name, link)) if link.find("music.") < 0: proc = Process(target=download_yt_direct, args=(link, directory, dir_base, folder, list_name, append_pl)) proc.start() return proc playlistId = link[link.find("list=")+5:] playlistId_find = playlistId.find("&") if playlistId_find > 0: playlistId = playlistId[:playlistId_find] youtube = YTMusic() playlist_for_count = youtube.get_playlist(playlistId=playlistId, limit=1) playlist = youtube.get_playlist(playlistId=playlistId, limit=playlist_for_count['trackCount']) log_str = "--- WHILE OBTAINING PLAYLIST ---\n" log_str_orig_len = len(log_str) for track in playlist['tracks']: videoId = track['videoId'] if videoId is None: log_str += "NOT FOUND: {}.\n".format(track['artists'][0]['name'] + " - " + track['title']) query = "" for artist in track['artists']: query += artist['name'] + " " query += track['title'] search_list = youtube.search(query=query, filter='songs', limit=1, ignore_spelling=True) if len(search_list) == 0 or search_list[0]['videoId'] is None: query = track['artists'][0]['name'] + " " + track['title'] search_list = youtube.search(query=query, filter='songs', limit=1, ignore_spelling=True) if len(search_list) == 0 or search_list[0]['videoId'] is None: query = track['title'] search_list = youtube.search(query=query, filter='songs', limit=1, ignore_spelling=True) if len(search_list) == 0 or search_list[0]['videoId'] is None: search_list = youtube.search(query=query, filter='songs', limit=1, ignore_spelling=False) if len(search_list) > 0 and search_list[0]['videoId'] is not None: track['videoId'] = search_list[0]['videoId'] track['artists'] = search_list[0]['artists'] track['title'] = search_list[0]['title'] videoId = track['videoId'] log_str += "REPLACEMENT FOUND: {}.\n".format(track['artists'][0]['name'] + " - " + track['title']) else: log_str += "NO REPLACEMENT FOUND.\n" if len(log_str) == log_str_orig_len: log_str = "" proc = Process(target=download_tracks, args=(playlist, directory, dir_base, folder, list_name, log_str, append_pl)) proc.start() return proc
try: check_album = check_album.encode( 'ascii', 'ignore').decode('ascii') except: check_album = '' # search for song in Youtube Music # trying multiple combinations of song, artist, album. filename # still cannot get every song in a playlist to successufully return from YTM uploads search songDict = songDict1 = songDict2 = songDict3 = list() searchFor1 = check_artist + " - " if check_album: searchFor1 += check_album + " - " searchFor1 += check_title songDict1 = ytm.search(searchFor1, 'uploads', limit=40) searchFor2 = check_artist + " - " + check_title songDict2 = ytm.search(searchFor2, 'uploads', limit=40) searchFor3 = check_title songDict3 = ytm.search(searchFor3, 'uploads', limit=40) songDict.extend(songDict1) songDict.extend(songDict2) songDict.extend(songDict3) # scan songDict to find song's id (videoID in YTM) sd_find = 0 for sd in songDict: if sd['resultType'] == 'song' and sd[
#!/usr/bin/env python from ytmusicapi.ytmusic import YTMusic ytm = YTMusic('headers_auth.json') searchList = list() searchList.append("Lee Moses - Hey Joe") searchList.append("Joe Bataan - CALL MY NAME") searchList.append("Creep") searchList.append("H.E.R. - Fight For You") searchList.append("Ugly Casanova - Barnacles") for searchFor in searchList: print("Querying YTMusic for : " + searchFor) songDict = ytm.search(searchFor, 'uploads', limit=40) print("Result : ") print(str(songDict))