feat: add featured on and similar artists parsers

This commit is contained in:
Clisson 2023-10-03 19:46:41 -04:00
parent efb17791e6
commit 0331126508
3 changed files with 43 additions and 0 deletions

View File

@ -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,
)
}
}

View File

@ -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,
)
}
}

View File

@ -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>