feat: add featured on and similar artists parsers
This commit is contained in:
parent
efb17791e6
commit
0331126508
|
|
@ -5,6 +5,7 @@ import traverseString from "../utils/traverseString"
|
|||
import AlbumParser from "./AlbumParser"
|
||||
import SongParser from "./SongParser"
|
||||
import VideoParser from "./VideoParser"
|
||||
import PlaylistParser from "./PlaylistParser";
|
||||
|
||||
export default class ArtistParser {
|
||||
public static parse(data: any, artistId: string): ArtistFull {
|
||||
|
|
@ -42,6 +43,18 @@ export default class ArtistParser {
|
|||
?.contents.map((item: any) =>
|
||||
VideoParser.parseArtistTopVideo(item, artistBasic),
|
||||
) ?? [],
|
||||
featuredOn:
|
||||
traverseList(data, "musicCarouselShelfRenderer")
|
||||
?.at(3)
|
||||
?.contents.map((item: any) =>
|
||||
PlaylistParser.parseArtistFeaturedOn(item),
|
||||
) ?? [],
|
||||
similarArtists:
|
||||
traverseList(data, "musicCarouselShelfRenderer")
|
||||
?.at(4)
|
||||
?.contents.map((item: any) =>
|
||||
this.parseSimilarArtists(item),
|
||||
) ?? [],
|
||||
},
|
||||
ArtistFull,
|
||||
)
|
||||
|
|
@ -60,4 +73,16 @@ export default class ArtistParser {
|
|||
ArtistDetailed,
|
||||
)
|
||||
}
|
||||
|
||||
public static parseSimilarArtists(item: any): ArtistDetailed {
|
||||
return checkType(
|
||||
{
|
||||
type: "ARTIST",
|
||||
artistId: traverseString(item, "browseId")(),
|
||||
name: traverseString(item, "runs", "text")(),
|
||||
thumbnails: traverseList(item, "thumbnails"),
|
||||
},
|
||||
ArtistDetailed,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -43,4 +43,20 @@ export default class PlaylistParser {
|
|||
PlaylistDetailed,
|
||||
)
|
||||
}
|
||||
|
||||
public static parseArtistFeaturedOn(item: any): PlaylistDetailed {
|
||||
return checkType(
|
||||
{
|
||||
type: "PLAYLIST",
|
||||
playlistId: traverseString(item, "navigationEndpoint", "browseId")(),
|
||||
name: traverseString(item, "runs", "text")(),
|
||||
artist: {
|
||||
artistId: traverseString(item, "browseId")(),
|
||||
name: traverseString(item, "runs", "text")(-3),
|
||||
},
|
||||
thumbnails: traverseList(item, "thumbnails"),
|
||||
},
|
||||
PlaylistDetailed,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -107,6 +107,8 @@ export const ArtistFull = z.object({
|
|||
topAlbums: z.array(AlbumDetailed),
|
||||
topSingles: z.array(AlbumDetailed),
|
||||
topVideos: z.array(VideoDetailed.omit({ duration: true })),
|
||||
featuredOn: z.array(PlaylistDetailed),
|
||||
similarArtists: z.array(ArtistDetailed),
|
||||
})
|
||||
|
||||
export type AlbumFull = z.infer<typeof AlbumFull>
|
||||
|
|
|
|||
Loading…
Reference in New Issue