youtube-playlist-sorter
Version:
Sorts ↕️ a public playlist based on it's popularity 🔥
202 lines (134 loc) • 6.11 kB
JavaScript
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();
;