ytmusic-api-proxy
Version:
YouTube Music API
69 lines (68 loc) • 3.23 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");
class PlaylistParser {
static parse(data, playlistId) {
const artist = (0, traverse_1.traverse)(data, "tabs", "straplineTextOne");
return (0, checkType_1.default)({
type: "PLAYLIST",
playlistId,
name: (0, traverse_1.traverseString)(data, "tabs", "title", "text"),
artist: {
name: (0, traverse_1.traverseString)(artist, "text"),
artistId: (0, traverse_1.traverseString)(artist, "browseId") || null,
},
videoCount: +(0, traverse_1.traverseList)(data, "tabs", "secondSubtitle", "text")
.at(2)
.split(" ")
.at(0)
.replaceAll(",", "") ?? null,
thumbnails: (0, traverse_1.traverseList)(data, "tabs", "thumbnails"),
}, types_1.PlaylistFull);
}
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];
return (0, checkType_1.default)({
type: "PLAYLIST",
playlistId: (0, traverse_1.traverseString)(item, "overlay", "playlistId"),
name: (0, traverse_1.traverseString)(title, "text"),
artist: {
name: (0, traverse_1.traverseString)(artist, "text"),
artistId: (0, traverse_1.traverseString)(artist, "browseId") || null,
},
thumbnails: (0, traverse_1.traverseList)(item, "thumbnails"),
}, types_1.PlaylistDetailed);
}
static parseArtistFeaturedOn(item, artistBasic) {
return (0, checkType_1.default)({
type: "PLAYLIST",
playlistId: (0, traverse_1.traverseString)(item, "navigationEndpoint", "browseId"),
name: (0, traverse_1.traverseString)(item, "runs", "text"),
artist: artistBasic,
thumbnails: (0, traverse_1.traverseList)(item, "thumbnails"),
}, types_1.PlaylistDetailed);
}
static parseHomeSection(item) {
const artist = (0, traverse_1.traverse)(item, "subtitle", "runs");
return (0, checkType_1.default)({
type: "PLAYLIST",
playlistId: (0, traverse_1.traverseString)(item, "navigationEndpoint", "playlistId"),
name: (0, traverse_1.traverseString)(item, "runs", "text"),
artist: {
name: (0, traverse_1.traverseString)(artist, "text"),
artistId: (0, traverse_1.traverseString)(artist, "browseId") || null,
},
thumbnails: (0, traverse_1.traverseList)(item, "thumbnails"),
}, types_1.PlaylistDetailed);
}
}
exports.default = PlaylistParser;