UNPKG

yt-dlx

Version:

Effortless Audio-Video Downloader And Streamer!

126 lines 5.6 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const colors_1 = __importDefault(require("colors")); const Agent_1 = __importDefault(require("../../base/Agent")); /** * Extracts metadata information from a YouTube video. * * @param query - The YouTube video URL to extract metadata from. * @param verbose - (optional) Whether to log verbose output or not. * @param useTor - (optional) Whether to use Tor for the download or not. * @returns A Promise that resolves with an object containing metadata information about the video. */ async function extract({ query, verbose }) { var metaBody = await (0, Agent_1.default)({ query, verbose, }); if (!metaBody) { return { message: "Unable to get response!", status: 500, }; } var uploadDate = new Date(metaBody.metaData.upload_date.replace(/(\d{4})(\d{2})(\d{2})/, "$1-$2-$3")); var currentDate = new Date(); var daysAgo = Math.floor((currentDate.getTime() - uploadDate.getTime()) / (1000 * 60 * 60 * 24)); var prettyDate = uploadDate.toLocaleDateString("en-US", { year: "numeric", month: "long", day: "numeric", }); var uploadAgoObject = calculateUploadAgo(daysAgo); var videoTimeInSeconds = metaBody.metaData.duration; var videoDuration = calculateVideoDuration(videoTimeInSeconds); var viewCountFormatted = formatCount(metaBody.metaData.view_count); var likeCountFormatted = formatCount(metaBody.metaData.like_count); function calculateUploadAgo(days) { var years = Math.floor(days / 365); var months = Math.floor((days % 365) / 30); var remainingDays = days % 30; var formattedString = `${years > 0 ? years + " years, " : ""}${months > 0 ? months + " months, " : ""}${remainingDays} days`; return { years, months, days: remainingDays, formatted: formattedString, }; } function calculateVideoDuration(seconds) { var hours = Math.floor(seconds / 3600); var minutes = Math.floor((seconds % 3600) / 60); var remainingSeconds = seconds % 60; var formattedString = `${hours > 0 ? hours + " hours, " : ""}${minutes > 0 ? minutes + " minutes, " : ""}${remainingSeconds} seconds`; return { hours, minutes, seconds: remainingSeconds, formatted: formattedString, }; } function formatCount(count) { var abbreviations = ["K", "M", "B", "T"]; for (var i = abbreviations.length - 1; i >= 0; i--) { var size = Math.pow(10, (i + 1) * 3); if (size <= count) { var formattedCount = Math.round((count / size) * 10) / 10; return `${formattedCount}${abbreviations[i]}`; } } return `${count}`; } var payload = { AudioLowF: metaBody.AudioLowF, AudioHighF: metaBody.AudioHighF, VideoLowF: metaBody.VideoLowF, VideoHighF: metaBody.VideoHighF, AudioLowDRC: metaBody.AudioLowDRC, AudioHighDRC: metaBody.AudioHighDRC, AudioLow: metaBody.AudioLow, AudioHigh: metaBody.AudioHigh, VideoLowHDR: metaBody.VideoLowHDR, VideoHighHDR: metaBody.VideoHighHDR, VideoLow: metaBody.VideoLow, VideoHigh: metaBody.VideoHigh, ManifestLow: metaBody.ManifestLow, ManifestHigh: metaBody.ManifestHigh, meta_data: { id: metaBody.metaData.id, original_url: metaBody.metaData.original_url, webpage_url: metaBody.metaData.webpage_url, title: metaBody.metaData.title, view_count: metaBody.metaData.view_count, like_count: metaBody.metaData.like_count, view_count_formatted: viewCountFormatted, like_count_formatted: likeCountFormatted, uploader: metaBody.metaData.uploader, uploader_id: metaBody.metaData.uploader_id, uploader_url: metaBody.metaData.uploader_url, thumbnail: metaBody.metaData.thumbnail, categories: metaBody.metaData.categories, time: videoTimeInSeconds, duration: videoDuration, age_limit: metaBody.metaData.age_limit, live_status: metaBody.metaData.live_status, description: metaBody.metaData.description, full_description: metaBody.metaData.description, upload_date: prettyDate, upload_ago: daysAgo, upload_ago_formatted: uploadAgoObject, comment_count: metaBody.metaData.comment_count, comment_count_formatted: formatCount(metaBody.metaData.comment_count), channel_id: metaBody.metaData.channel_id, channel_name: metaBody.metaData.channel, channel_url: metaBody.metaData.channel_url, channel_follower_count: metaBody.metaData.channel_follower_count, channel_follower_count_formatted: formatCount(metaBody.metaData.channel_follower_count), }, }; console.log(colors_1.default.green("@info:"), "❣️ Thank you for using", colors_1.default.green("yt-dlx."), "Consider", colors_1.default.green("🌟starring"), "the github repo", colors_1.default.green("https://github.com/yt-dlx\n")); return payload; } exports.default = extract; //# sourceMappingURL=extract.js.map