ytmusic-api-proxy
Version:
YouTube Music API
95 lines (94 loc) • 4.86 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const types_1 = require("../types");
const checkType_1 = __importDefault(require("../utils/checkType"));
const filters_1 = require("../utils/filters");
const traverse_1 = require("../utils/traverse");
const SongParser_1 = __importDefault(require("./SongParser"));
class AlbumParser {
static parse(data, albumId) {
const albumBasic = {
albumId,
name: (0, traverse_1.traverseString)(data, "tabs", "title", "text"),
};
const artistData = (0, traverse_1.traverse)(data, "tabs", "straplineTextOne", "runs");
const artistBasic = {
artistId: (0, traverse_1.traverseString)(artistData, "browseId") || null,
name: (0, traverse_1.traverseString)(artistData, "text"),
};
const thumbnails = (0, traverse_1.traverseList)(data, "background", "thumbnails");
return (0, checkType_1.default)({
type: "ALBUM",
...albumBasic,
playlistId: (0, traverse_1.traverseString)(data, "musicPlayButtonRenderer", "playlistId"),
artist: artistBasic,
year: AlbumParser.processYear((0, traverse_1.traverseList)(data, "tabs", "subtitle", "text").at(-1)),
thumbnails,
songs: (0, traverse_1.traverseList)(data, "musicResponsiveListItemRenderer").map(item => SongParser_1.default.parseAlbumSong(item, artistBasic, albumBasic, thumbnails)),
}, types_1.AlbumFull);
}
static parseSearchResult(item) {
const columns = (0, traverse_1.traverseList)(item, "flexColumns", "runs").flat();
// No specific way to identify the title
const title = columns[0];
const artist = columns.find(filters_1.isArtist) || columns[3];
const playlistId = (0, traverse_1.traverseString)(item, "overlay", "playlistId") ||
(0, traverse_1.traverseString)(item, "thumbnailOverlay", "playlistId");
return (0, checkType_1.default)({
type: "ALBUM",
albumId: (0, traverse_1.traverseList)(item, "browseId").at(-1),
playlistId,
artist: {
name: (0, traverse_1.traverseString)(artist, "text"),
artistId: (0, traverse_1.traverseString)(artist, "browseId") || null,
},
year: AlbumParser.processYear(columns.at(-1)?.text),
name: (0, traverse_1.traverseString)(title, "text"),
thumbnails: (0, traverse_1.traverseList)(item, "thumbnails"),
}, types_1.AlbumDetailed);
}
static parseArtistAlbum(item, artistBasic) {
return (0, checkType_1.default)({
type: "ALBUM",
albumId: (0, traverse_1.traverseList)(item, "browseId").at(-1),
playlistId: (0, traverse_1.traverseString)(item, "thumbnailOverlay", "playlistId"),
name: (0, traverse_1.traverseString)(item, "title", "text"),
artist: artistBasic,
year: AlbumParser.processYear((0, traverse_1.traverseList)(item, "subtitle", "text").at(-1)),
thumbnails: (0, traverse_1.traverseList)(item, "thumbnails"),
}, types_1.AlbumDetailed);
}
static parseArtistTopAlbum(item, artistBasic) {
return (0, checkType_1.default)({
type: "ALBUM",
albumId: (0, traverse_1.traverseList)(item, "browseId").at(-1),
playlistId: (0, traverse_1.traverseString)(item, "musicPlayButtonRenderer", "playlistId"),
name: (0, traverse_1.traverseString)(item, "title", "text"),
artist: artistBasic,
year: AlbumParser.processYear((0, traverse_1.traverseList)(item, "subtitle", "text").at(-1)),
thumbnails: (0, traverse_1.traverseList)(item, "thumbnails"),
}, types_1.AlbumDetailed);
}
static parseHomeSection(item) {
const artist = (0, traverse_1.traverse)(item, "subtitle", "runs").at(-1);
return (0, checkType_1.default)({
type: "ALBUM",
albumId: (0, traverse_1.traverseString)(item, "title", "browseId"),
playlistId: (0, traverse_1.traverseString)(item, "thumbnailOverlay", "playlistId"),
name: (0, traverse_1.traverseString)(item, "title", "text"),
artist: {
name: (0, traverse_1.traverseString)(artist, "text"),
artistId: (0, traverse_1.traverseString)(artist, "browseId") || null,
},
year: null,
thumbnails: (0, traverse_1.traverseList)(item, "thumbnails"),
}, types_1.AlbumDetailed);
}
static processYear(year) {
return year && year.match(/^\d{4}$/) ? +year : null;
}
}
exports.default = AlbumParser;