mirror of
https://github.com/LuanRT/YouTube.js.git
synced 2026-06-18 20:12:12 +00:00
46 lines
2.2 KiB
JavaScript
46 lines
2.2 KiB
JavaScript
'use strict';
|
|
|
|
const Utils = require('../../../utils/Utils');
|
|
const Constants = require('../../../utils/Constants');
|
|
|
|
class VideoItem {
|
|
static parse(data) {
|
|
return data.map((item) => this.parseItem(item)).filter((item) => item);
|
|
}
|
|
|
|
static parseItem(item) {
|
|
item = (item.richItemRenderer && item.richItemRenderer.content.videoRenderer)
|
|
&& item.richItemRenderer.content
|
|
|| item;
|
|
|
|
if (item.videoRenderer) return {
|
|
id: item.videoRenderer.videoId,
|
|
title: item.videoRenderer.title.runs.map((run) => run.text).join(' '),
|
|
description: item?.videoRenderer?.descriptionSnippet?.runs[0]?.text || 'N/A',
|
|
channel: {
|
|
id: item?.videoRenderer?.shortBylineText?.runs[0]?.navigationEndpoint?.browseEndpoint?.browseId,
|
|
name: item?.videoRenderer?.shortBylineText?.runs[0]?.text || 'N/A',
|
|
url: `${Constants.URLS.YT_BASE}${item?.videoRenderer?.shortBylineText?.runs[0]?.navigationEndpoint?.browseEndpoint?.canonicalBaseUrl}`
|
|
},
|
|
metadata: {
|
|
view_count: item?.videoRenderer?.viewCountText?.simpleText || 'N/A',
|
|
short_view_count_text: {
|
|
simple_text: item?.videoRenderer?.shortViewCountText?.simpleText || 'N/A',
|
|
accessibility_label: item?.videoRenderer?.shortViewCountText?.accessibility?.accessibilityData?.label || 'N/A',
|
|
},
|
|
thumbnail: item?.videoRenderer?.thumbnail?.thumbnails.slice(-1)[0] || {},
|
|
moving_thumbnail: item?.videoRenderer?.richThumbnail?.movingThumbnailRenderer?.movingThumbnailDetails?.thumbnails[0] || {},
|
|
published: item?.videoRenderer?.publishedTimeText?.simpleText || 'N/A',
|
|
duration: {
|
|
seconds: Utils.timeToSeconds(item?.videoRenderer?.lengthText?.simpleText || '0'),
|
|
simple_text: item?.videoRenderer?.lengthText?.simpleText || 'N/A',
|
|
accessibility_label: item?.videoRenderer?.lengthText?.accessibility?.accessibilityData?.label || 'N/A'
|
|
},
|
|
badges: item?.videoRenderer?.badges?.map((badge) => badge.metadataBadgeRenderer.label) || [],
|
|
owner_badges: item?.videoRenderer?.ownerBadges?.map((badge) => badge.metadataBadgeRenderer.tooltip) || []
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
module.exports = VideoItem; |