🐛 fix search results

This commit is contained in:
zS1L3NT Windows 2023-07-29 23:12:09 +08:00
parent 1cd1459c92
commit eccf197dcb
3 changed files with 14 additions and 6 deletions

View File

@ -220,7 +220,9 @@ export default class YTMusic {
params: null params: null
}) })
return traverseList(searchData, "musicResponsiveListItemRenderer").map(SearchParser.parse) return traverseList(searchData, "musicResponsiveListItemRenderer")
.map(SearchParser.parse)
.filter(Boolean) as z.infer<typeof SearchResult>[]
} }
/** /**

View File

@ -30,7 +30,7 @@ export default class PlaylistParser {
name: traverseString(flexColumns[0], "runs", "text")(), name: traverseString(flexColumns[0], "runs", "text")(),
artist: { artist: {
artistId: traverseString(flexColumns[1], "browseId")(), artistId: traverseString(flexColumns[1], "browseId")(),
name: traverseString(flexColumns[1], "runs", "text")(0) name: traverseString(flexColumns[1], "runs", "text")(-3)
}, },
thumbnails: traverseList(item, "thumbnails") thumbnails: traverseList(item, "thumbnails")
}, },

View File

@ -7,7 +7,7 @@ import SongParser from "./SongParser"
import VideoParser from "./VideoParser" import VideoParser from "./VideoParser"
export default class SearchParser { export default class SearchParser {
public static parse(item: any): SearchResult { public static parse(item: any): SearchResult | null {
const flexColumns = traverseList(item, "flexColumns") const flexColumns = traverseList(item, "flexColumns")
const type = traverseList(flexColumns[1], "runs", "text").at(0) as const type = traverseList(flexColumns[1], "runs", "text").at(0) as
| "Song" | "Song"
@ -18,7 +18,7 @@ export default class SearchParser {
| "Album" | "Album"
| "Playlist" | "Playlist"
return { const parsers = {
Song: SongParser.parseSearchResult, Song: SongParser.parseSearchResult,
Video: VideoParser.parseSearchResult, Video: VideoParser.parseSearchResult,
Artist: ArtistParser.parseSearchResult, Artist: ArtistParser.parseSearchResult,
@ -26,6 +26,12 @@ export default class SearchParser {
Single: AlbumParser.parseSearchResult, Single: AlbumParser.parseSearchResult,
Album: AlbumParser.parseSearchResult, Album: AlbumParser.parseSearchResult,
Playlist: PlaylistParser.parseSearchResult Playlist: PlaylistParser.parseSearchResult
}[type](item) }
if (parsers[type]) {
return parsers[type](item)
} else {
return null
}
} }
} }