def UpdateLikeSongsSorted(databaseConnectionString: str): ytmusic = YTMusic("headers_auth.json") mongoClient = MongoClient(databaseConnectionString) db = mongoClient['scrobble'] playlistId = "PLJpUfuX6t6dScH3Ua2f2EsmRC4PolZp8I" likedSongs = db['scrobbleCount'].find( { "likeStatus": 1, "ytmusicPlayable": { "$ne": False } }, sort=[("time", 1)], limit=100) videoIds = [song['ytmusicId'] for song in likedSongs] ClearPlaylist(ytmusic=ytmusic, playlistId=playlistId) results = [ AddToPlaylist(ytmusic=ytmusic, playlistId=playlistId, videoId=videoId) for videoId in videoIds ] if results: nowFormatted = datetime.now().strftime("%Y-%m-%d at %H:%M") ytmusic.edit_playlist(playlistId=playlistId, description=f"Updated on {nowFormatted}") return
def UpdatePlaylist(ytmusic: YTMusic, playlistId: str, videoResults, description=str, excludeDisliked=bool, clearPlaylist=bool): try: currentSongCount = ytmusic.get_playlist(playlistId, limit=1)["trackCount"] except Exception as e: return e if currentSongCount > 0 and clearPlaylist: currentPlaylist = ytmusic.get_playlist(playlistId, limit=currentSongCount) ytmusic.remove_playlist_items(playlistId, currentPlaylist['tracks']) addedVideos = False for videoId in videoResults['videoIds']: status = ytmusic.add_playlist_items(playlistId, videoIds=[videoId]) if status['status'] == "STATUS_SUCCEEDED": addedVideos = True else: print(status) if addedVideos: if description is None: nowFormatted = datetime.now().strftime("%Y-%m-%d at %H:%M") description = ( f"Last updated {nowFormatted}.\nStation played " f"{videoResults['searchCount']} songs.\n" f"{videoResults['uniqueCount']} songs were unique.\n" f"YTMusic match {videoResults['matchedCount']} songs.") if excludeDisliked: description = ( f"{description}\n\nNote: Songs I've marked as " f"\"dislike\" were not included in the playlist.") ytmusic.edit_playlist(playlistId, description=description) return True else: print("There was an error adding songs to the playlist.") return False
def YesterdayPlaylistsDescription(ytmusic: YTMusic, playlistId: str, searchCount: int, uniqueCount: int, matchedCount: int) -> str: nowFormatted = datetime.now().strftime("%Y-%m-%d at %H:%M") description = (f"Last updated {nowFormatted}.\nStation played " f"{searchCount} songs.\n" f"{uniqueCount} songs were unique.\n" f"YTMusic match {matchedCount} songs." f"\n\nNote: Songs I've marked as " f"\"dislike\" were not included in the playlist.") return ytmusic.edit_playlist(playlistId, description=description)