ytmusic-api-proxy
Version:
YouTube Music API
65 lines (64 loc) • 2.74 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const constants_1 = require("../constants");
const types_1 = require("../types");
const checkType_1 = __importDefault(require("../utils/checkType"));
const traverse_1 = require("../utils/traverse");
const AlbumParser_1 = __importDefault(require("./AlbumParser"));
const PlaylistParser_1 = __importDefault(require("./PlaylistParser"));
const SongParser_1 = __importDefault(require("./SongParser"));
class Parser {
static parseDuration(time) {
if (!time)
return null;
const [seconds, minutes, hours] = time
.split(":")
.reverse()
.map(n => +n);
return (seconds || 0) + (minutes || 0) * 60 + (hours || 0) * 60 * 60;
}
static parseNumber(string) {
if (string.at(-1).match(/^[A-Z]+$/)) {
const number = +string.slice(0, -1);
const multiplier = string.at(-1);
const multipliers = {
K: number * 1000,
M: number * 1000 * 1000,
B: number * 1000 * 1000 * 1000,
T: number * 1000 * 1000 * 1000 * 1000,
};
return multipliers[multiplier] || NaN;
}
else {
return +string;
}
}
static parseHomeSection(data) {
const pageType = (0, traverse_1.traverseString)(data, "contents", "title", "browseEndpoint", "pageType");
const playlistId = (0, traverse_1.traverseString)(data, "navigationEndpoint", "watchPlaylistEndpoint", "playlistId");
return (0, checkType_1.default)({
title: (0, traverse_1.traverseString)(data, "header", "title", "text"),
contents: (0, traverse_1.traverseList)(data, "contents").map(item => {
switch (pageType) {
case constants_1.PageType.MUSIC_PAGE_TYPE_ALBUM:
return AlbumParser_1.default.parseHomeSection(item);
case constants_1.PageType.MUSIC_PAGE_TYPE_PLAYLIST:
return PlaylistParser_1.default.parseHomeSection(item);
case "":
if (playlistId) {
return PlaylistParser_1.default.parseHomeSection(item);
}
else {
return SongParser_1.default.parseHomeSection(item);
}
default:
return null;
}
}),
}, types_1.HomeSection);
}
}
exports.default = Parser;