UNPKG

youtube-playlist-sorter

Version:

Sorts ↕️ a public playlist based on it's popularity 🔥

202 lines (134 loc) 6.11 kB
#! /usr/bin/env node 'use strict'; require('core-js/modules/es6.typed.array-buffer'); require('core-js/modules/es6.typed.int8-array'); require('core-js/modules/es6.typed.uint8-array'); require('core-js/modules/es6.typed.uint8-clamped-array'); require('core-js/modules/es6.typed.int16-array'); require('core-js/modules/es6.typed.uint16-array'); require('core-js/modules/es6.typed.int32-array'); require('core-js/modules/es6.typed.uint32-array'); require('core-js/modules/es6.typed.float32-array'); require('core-js/modules/es6.typed.float64-array'); require('core-js/modules/es6.map'); require('core-js/modules/es6.set'); require('core-js/modules/es6.weak-map'); require('core-js/modules/es6.weak-set'); require('core-js/modules/es6.reflect.apply'); require('core-js/modules/es6.reflect.construct'); require('core-js/modules/es6.reflect.define-property'); require('core-js/modules/es6.reflect.delete-property'); require('core-js/modules/es6.reflect.get'); require('core-js/modules/es6.reflect.get-own-property-descriptor'); require('core-js/modules/es6.reflect.get-prototype-of'); require('core-js/modules/es6.reflect.has'); require('core-js/modules/es6.reflect.is-extensible'); require('core-js/modules/es6.reflect.own-keys'); require('core-js/modules/es6.reflect.prevent-extensions'); require('core-js/modules/es6.reflect.set'); require('core-js/modules/es6.reflect.set-prototype-of'); require('core-js/modules/es6.promise'); require('core-js/modules/es6.symbol'); require('core-js/modules/es6.function.name'); require('core-js/modules/es6.regexp.flags'); require('core-js/modules/es6.regexp.match'); require('core-js/modules/es6.regexp.replace'); require('core-js/modules/es6.regexp.split'); require('core-js/modules/es6.regexp.search'); require('core-js/modules/es6.array.from'); require('core-js/modules/es7.array.includes'); require('core-js/modules/es7.object.values'); require('core-js/modules/es7.object.entries'); require('core-js/modules/es7.object.get-own-property-descriptors'); require('core-js/modules/es7.string.pad-start'); require('core-js/modules/es7.string.pad-end'); require('regenerator-runtime/runtime'); var _yargs = require('yargs'); var _yargs2 = _interopRequireDefault(_yargs); var _numberAbbreviate = require('number-abbreviate'); var _numberAbbreviate2 = _interopRequireDefault(_numberAbbreviate); var _updateNotifier = require('update-notifier'); var _updateNotifier2 = _interopRequireDefault(_updateNotifier); var _playlist = require('./playlist'); var _playlist2 = _interopRequireDefault(_playlist); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; } var pkg = require('../package.json'); var YOUTUBE_PLAYLIST_SORTER_API_KEY = process.env.YOUTUBE_PLAYLIST_SORTER_API_KEY; if (!YOUTUBE_PLAYLIST_SORTER_API_KEY) { console.error('YOUTUBE_PLAYLIST_SORTER_API_KEY not found in env vars'); process.exit(1); } // Check for updates and notify if available (0, _updateNotifier2.default)({ pkg }).notify(); var argv = _yargs2.default.usage('$0 <Playlist URL>').demandCommand(1, 1, 'Youtube Playlist URL not provided!', 'Only 1 Youtube Playlist URL needed!').help('h').alias('h', 'help').alias('v', 'version').check(function (_argv) { var playListId = _playlist2.default.getPlaylistId(_argv._[0]); if (!playListId) { throw new Error('Error: Looks like an invalid Playlist URL 😵'); } return true; }).argv; var main = function () { var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() { var playListId, videosList; return regeneratorRuntime.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: playListId = _playlist2.default.getPlaylistId(argv._[0]); _context.prev = 1; _context.next = 4; return _playlist2.default.getSortedPlaylist(playListId); case 4: videosList = _context.sent; videosList.forEach(prettyPrintVideo); _context.next = 12; break; case 8: _context.prev = 8; _context.t0 = _context['catch'](1); if (_context.t0.response) { console.error(_context.t0.response.data); } else { console.error(_context.t0); } process.exit(1); case 12: case 'end': return _context.stop(); } } }, _callee, undefined, [[1, 8]]); })); return function main() { return _ref.apply(this, arguments); }; }(); function prettyPrintVideo(video, index) { var views = (0, _numberAbbreviate2.default)(video.statistics.viewCount, 1); var likes = (0, _numberAbbreviate2.default)(video.statistics.likeCount, 1); if (Number.isNaN(views)) views = 'Disabled'; if (Number.isNaN(likes)) likes = 'Disabled'; var duration = formatIsoDuration(video.contentDetails.duration); console.log(`${index + 1}. ${video.snippet.title} [👀 ${views} / 👍 ${likes}] (⏳ ${duration})`); console.log(`\thttps://www.youtube.com/watch?v=${video.id}`); console.log(); } function formatIsoDuration(duration) { var durationSplits = duration.replace(/[a-zA-Z]/g, ' ').split(' ').filter(function (str) { return !!str; }); return durationSplits.reverse().reduce(function (acc, item, index) { if (index === 0) { return (`${item}s ` + acc).trim(); } if (index === 1) { return (`${item}m ` + acc).trim(); } if (index === 2) { return (`${item}h ` + acc).trim(); } return acc; }, ''); } main();