youtubei
Version:
Simple package to get information from youtube such as videos, playlists, channels, video information & comments, related videos, up next video, and more!
85 lines (84 loc) • 5.67 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ChannelParser = void 0;
const common_1 = require("../../common");
const BaseChannel_1 = require("../BaseChannel");
const PlaylistCompact_1 = require("../PlaylistCompact");
const VideoCompact_1 = require("../VideoCompact");
class ChannelParser {
static loadChannel(target, data) {
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
let channelId, title, handle, description, avatar, subscriberCountText, videoCountText, tvBanner, mobileBanner, banner;
const { c4TabbedHeaderRenderer, pageHeaderRenderer } = data.header;
if (c4TabbedHeaderRenderer) {
channelId = c4TabbedHeaderRenderer.channelId;
title = c4TabbedHeaderRenderer.title;
subscriberCountText = (_a = c4TabbedHeaderRenderer.subscriberCountText) === null || _a === void 0 ? void 0 : _a.simpleText;
videoCountText = (_d = (_c = (_b = c4TabbedHeaderRenderer === null || c4TabbedHeaderRenderer === void 0 ? void 0 : c4TabbedHeaderRenderer.videosCountText) === null || _b === void 0 ? void 0 : _b.runs) === null || _c === void 0 ? void 0 : _c[0]) === null || _d === void 0 ? void 0 : _d.text;
avatar = (_e = c4TabbedHeaderRenderer.avatar) === null || _e === void 0 ? void 0 : _e.thumbnails;
tvBanner = (_f = c4TabbedHeaderRenderer === null || c4TabbedHeaderRenderer === void 0 ? void 0 : c4TabbedHeaderRenderer.tvBanner) === null || _f === void 0 ? void 0 : _f.thumbnails;
mobileBanner = (_g = c4TabbedHeaderRenderer === null || c4TabbedHeaderRenderer === void 0 ? void 0 : c4TabbedHeaderRenderer.mobileBanner) === null || _g === void 0 ? void 0 : _g.thumbnails;
banner = (_h = c4TabbedHeaderRenderer === null || c4TabbedHeaderRenderer === void 0 ? void 0 : c4TabbedHeaderRenderer.banner) === null || _h === void 0 ? void 0 : _h.thumbnails;
}
else {
channelId =
data.contents.twoColumnBrowseResultsRenderer.tabs[0].tabRenderer.endpoint
.browseEndpoint.browseId;
title = pageHeaderRenderer.pageTitle;
const { metadata, image: imageModel, banner: bannerModel, description: descriptionModel, } = pageHeaderRenderer.content.pageHeaderViewModel;
const metadataRow = metadata.contentMetadataViewModel.metadataRows.find((m) => m.metadataParts && m.metadataParts.length == 2);
const handleRow = metadata.contentMetadataViewModel.metadataRows.find((m) => m.metadataParts && m.metadataParts.length == 1);
handle = (_j = handleRow === null || handleRow === void 0 ? void 0 : handleRow.metadataParts[0].text) === null || _j === void 0 ? void 0 : _j.content;
videoCountText = (_k = metadataRow.metadataParts.find((m) => m.text.styleRuns)) === null || _k === void 0 ? void 0 : _k.text.content;
subscriberCountText = (_l = metadataRow.metadataParts.find((m) => !m.text.styleRuns)) === null || _l === void 0 ? void 0 : _l.text.content;
avatar = imageModel.decoratedAvatarViewModel.avatar.avatarViewModel.image.sources;
banner = bannerModel === null || bannerModel === void 0 ? void 0 : bannerModel.imageBannerViewModel.image.sources;
description = descriptionModel === null || descriptionModel === void 0 ? void 0 : descriptionModel.descriptionPreviewViewModel.description.content;
}
target.id = channelId;
target.name = title;
target.handle = handle;
target.description = description;
target.thumbnails = new common_1.Thumbnails().load(avatar);
target.videoCount = videoCountText;
target.subscriberCount = subscriberCountText;
target.banner = new common_1.Thumbnails().load(banner || []);
target.tvBanner = new common_1.Thumbnails().load(tvBanner || []);
target.mobileBanner = new common_1.Thumbnails().load(mobileBanner || []);
target.shelves = ChannelParser.parseShelves(target, data);
return target;
}
static parseShelves(target, data) {
var _a;
const shelves = [];
const rawShelves = data.contents.twoColumnBrowseResultsRenderer.tabs[0].tabRenderer.content
.sectionListRenderer.contents;
for (const rawShelf of rawShelves) {
const shelfRenderer = (_a = rawShelf.itemSectionRenderer) === null || _a === void 0 ? void 0 : _a.contents[0].shelfRenderer;
if (!shelfRenderer)
continue;
const { title, content, subtitle } = shelfRenderer;
if (!content.horizontalListRenderer)
continue;
const items = content.horizontalListRenderer.items
.map((i) => {
if (i.gridVideoRenderer)
return new VideoCompact_1.VideoCompact({ client: target.client }).load(i.gridVideoRenderer);
if (i.gridPlaylistRenderer)
return new PlaylistCompact_1.PlaylistCompact({ client: target.client }).load(i.gridPlaylistRenderer);
if (i.gridChannelRenderer)
return new BaseChannel_1.BaseChannel({ client: target.client }).load(i.gridChannelRenderer);
return undefined;
})
.filter((i) => i !== undefined);
const shelf = {
title: title.simpleText || title.runs[0].text,
subtitle: subtitle === null || subtitle === void 0 ? void 0 : subtitle.simpleText,
items,
};
shelves.push(shelf);
}
return shelves;
}
}
exports.ChannelParser = ChannelParser;