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 AlbumParser from "./AlbumParser"
|
||||||
import SongParser from "./SongParser"
|
import SongParser from "./SongParser"
|
||||||
import VideoParser from "./VideoParser"
|
import VideoParser from "./VideoParser"
|
||||||
|
import PlaylistParser from "./PlaylistParser";
|
||||||
|
|
||||||
export default class ArtistParser {
|
export default class ArtistParser {
|
||||||
public static parse(data: any, artistId: string): ArtistFull {
|
public static parse(data: any, artistId: string): ArtistFull {
|
||||||
|
|
@ -42,6 +43,18 @@ export default class ArtistParser {
|
||||||
?.contents.map((item: any) =>
|
?.contents.map((item: any) =>
|
||||||
VideoParser.parseArtistTopVideo(item, artistBasic),
|
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,
|
ArtistFull,
|
||||||
)
|
)
|
||||||
|
|
@ -60,4 +73,16 @@ export default class ArtistParser {
|
||||||
ArtistDetailed,
|
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,
|
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),
|
topAlbums: z.array(AlbumDetailed),
|
||||||
topSingles: z.array(AlbumDetailed),
|
topSingles: z.array(AlbumDetailed),
|
||||||
topVideos: z.array(VideoDetailed.omit({ duration: true })),
|
topVideos: z.array(VideoDetailed.omit({ duration: true })),
|
||||||
|
featuredOn: z.array(PlaylistDetailed),
|
||||||
|
similarArtists: z.array(ArtistDetailed),
|
||||||
})
|
})
|
||||||
|
|
||||||
export type AlbumFull = z.infer<typeof AlbumFull>
|
export type AlbumFull = z.infer<typeof AlbumFull>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue