diff --git a/src/YTMusic.ts b/src/YTMusic.ts index c67605d..d7f6680 100644 --- a/src/YTMusic.ts +++ b/src/YTMusic.ts @@ -220,7 +220,9 @@ export default class YTMusic { params: null }) - return traverseList(searchData, "musicResponsiveListItemRenderer").map(SearchParser.parse) + return traverseList(searchData, "musicResponsiveListItemRenderer") + .map(SearchParser.parse) + .filter(Boolean) as z.infer[] } /** diff --git a/src/parsers/PlaylistParser.ts b/src/parsers/PlaylistParser.ts index 14c126a..c0dae2e 100644 --- a/src/parsers/PlaylistParser.ts +++ b/src/parsers/PlaylistParser.ts @@ -30,7 +30,7 @@ export default class PlaylistParser { name: traverseString(flexColumns[0], "runs", "text")(), artist: { artistId: traverseString(flexColumns[1], "browseId")(), - name: traverseString(flexColumns[1], "runs", "text")(0) + name: traverseString(flexColumns[1], "runs", "text")(-3) }, thumbnails: traverseList(item, "thumbnails") }, diff --git a/src/parsers/SearchParser.ts b/src/parsers/SearchParser.ts index dc68441..8456cb1 100644 --- a/src/parsers/SearchParser.ts +++ b/src/parsers/SearchParser.ts @@ -7,7 +7,7 @@ import SongParser from "./SongParser" import VideoParser from "./VideoParser" export default class SearchParser { - public static parse(item: any): SearchResult { + public static parse(item: any): SearchResult | null { const flexColumns = traverseList(item, "flexColumns") const type = traverseList(flexColumns[1], "runs", "text").at(0) as | "Song" @@ -17,8 +17,8 @@ export default class SearchParser { | "Single" | "Album" | "Playlist" - - return { + + const parsers = { Song: SongParser.parseSearchResult, Video: VideoParser.parseSearchResult, Artist: ArtistParser.parseSearchResult, @@ -26,6 +26,12 @@ export default class SearchParser { Single: AlbumParser.parseSearchResult, Album: AlbumParser.parseSearchResult, Playlist: PlaylistParser.parseSearchResult - }[type](item) + } + + if (parsers[type]) { + return parsers[type](item) + } else { + return null + } } }