ts-npm-ytmusic-api/src/parsers/ArtistParser.ts

43 lines
1.3 KiB
TypeScript

import AlbumParser from "./AlbumParser"
import Parser from "./Parser"
import SongParser from "./SongParser"
import traverse from "../utils/traverse"
import YTMusic from ".."
export default class ArtistParser {
public static parse(data: any, artistId: string): YTMusic.ArtistFull {
const artistBasic = {
artistId,
name: traverse(data, "header", "title", "text").at(0)
}
const description = traverse(data, "header", "description", "text")
return {
type: "ARTIST",
...artistBasic,
thumbnails: [traverse(data, "header", "thumbnails")].flat(),
description: description instanceof Array ? null : description,
subscribers: Parser.parseNumber(traverse(data, "subscriberCountText", "text")),
topSongs: traverse(data, "musicShelfRenderer", "contents").map((item: any) =>
SongParser.parseArtistTopSong(item, artistBasic)
),
topAlbums: [traverse(data, "musicCarouselShelfRenderer")]
.flat()
.at(0)
.contents.map((item: any) => AlbumParser.parseArtistTopAlbums(item, artistBasic))
}
}
public static parseSearchResult(item: any): YTMusic.ArtistDetailed {
const flexColumns = traverse(item, "flexColumns")
return {
type: "ARTIST",
artistId: traverse(item, "browseId"),
name: traverse(flexColumns[0], "runs", "text"),
thumbnails: [traverse(item, "thumbnails")].flat()
}
}
}