UNPKG

kat-shows

Version:
260 lines (207 loc) 8.16 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.findEpisodeId = exports.findShowUrl = exports.parseShows = exports.baseUrl = undefined; var _typeof2 = require('babel-runtime/helpers/typeof'); var _typeof3 = _interopRequireDefault(_typeof2); var _regenerator = require('babel-runtime/regenerator'); var _regenerator2 = _interopRequireDefault(_regenerator); var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator'); var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2); var parseShows = exports.parseShows = function () { var _ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee2() { var _this = this; var _ret; return _regenerator2.default.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: _context2.prev = 0; return _context2.delegateYield(_regenerator2.default.mark(function _callee() { var showsHtml, $, items; return _regenerator2.default.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: _context.next = 2; return (0, _isomorphicFetch2.default)(baseUrl + '/tv/show', { mode: 'no-cors' }).then(function (response) { return response.text(); }); case 2: showsHtml = _context.sent; $ = _cheerio2.default.load(showsHtml); items = $('.textcontent a.plain').filter(function filterEmptyUrls() { return $(this).attr('href') !== '#' && !!$(this).attr('href'); }).map(function parseShowsHtml() { return $(this).attr('href'); }).get(); return _context.abrupt('return', { v: items }); case 6: case 'end': return _context.stop(); } } }, _callee, _this); })(), 't0', 2); case 2: _ret = _context2.t0; if (!((typeof _ret === 'undefined' ? 'undefined' : (0, _typeof3.default)(_ret)) === "object")) { _context2.next = 5; break; } return _context2.abrupt('return', _ret.v); case 5: _context2.next = 10; break; case 7: _context2.prev = 7; _context2.t1 = _context2['catch'](0); console.log(_context2.t1); case 10: case 'end': return _context2.stop(); } } }, _callee2, this, [[0, 7]]); })); return function parseShows() { return _ref.apply(this, arguments); }; }(); var findShowUrl = exports.findShowUrl = function () { var _ref2 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee3(showName) { var parsedShows, formattedShowUrl, showUrl; return _regenerator2.default.wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: if (showName) { _context3.next = 2; break; } throw new Error('Show name param required'); case 2: _context3.next = 4; return parseShows(); case 4: parsedShows = _context3.sent; formattedShowUrl = formatShowNameToUrl(showName); showUrl = parsedShows.find(function (showUrls) { return showUrls.includes(formattedShowUrl); }); if (showUrl) { _context3.next = 9; break; } throw new Error('A show could not be found'); case 9: return _context3.abrupt('return', '' + baseUrl + showUrl); case 10: case 'end': return _context3.stop(); } } }, _callee3, this); })); return function findShowUrl(_x) { return _ref2.apply(this, arguments); }; }(); var findEpisodeId = exports.findEpisodeId = function () { var _ref3 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee4(showName, season, episode) { var showUrl, episodeTorrentsHtml, $, episodeUrl, indexes, ids, i, _i; return _regenerator2.default.wrap(function _callee4$(_context4) { while (1) { switch (_context4.prev = _context4.next) { case 0: _context4.next = 2; return findShowUrl(showName); case 2: showUrl = _context4.sent; _context4.next = 5; return (0, _isomorphicFetch2.default)(showUrl, { mode: 'no-cors' }).then(function (response) { return response.text(); }); case 5: episodeTorrentsHtml = _context4.sent; $ = _cheerio2.default.load(episodeTorrentsHtml); episodeUrl = $('.doublecelltable').find('h3:contains(\'Season ' + season + '\')').next().find('.versionsEpNo:contains(\'Episode ' + episode + '\')').parent().attr('onclick'); indexes = []; ids = []; for (i = 0; i < episodeUrl.length; i++) { if (episodeUrl[i] === "'") indexes.push(i); } for (_i = indexes[0] + 1; _i < indexes[1]; _i++) { ids.push(episodeUrl[_i]); } return _context4.abrupt('return', ids.join('')); case 13: case 'end': return _context4.stop(); } } }, _callee4, this); })); return function findEpisodeId(_x2, _x3, _x4) { return _ref3.apply(this, arguments); }; }(); exports.formatShowNameToUrl = formatShowNameToUrl; var _cheerio = require('cheerio'); var _cheerio2 = _interopRequireDefault(_cheerio); var _isomorphicFetch = require('isomorphic-fetch'); var _isomorphicFetch2 = _interopRequireDefault(_isomorphicFetch); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * Parse all pages */ var baseUrl = exports.baseUrl = 'https://kat.cr'; function formatShowNameToUrl(showName) { return ('/' + showName).toLowerCase().replace(/ /g, '-'); } exports.default = function () { var _ref4 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee5(showName, season, episode) { var episodeId, torrentsHtml, $, torrents; return _regenerator2.default.wrap(function _callee5$(_context5) { while (1) { switch (_context5.prev = _context5.next) { case 0: _context5.next = 2; return findEpisodeId(showName, season, episode); case 2: episodeId = _context5.sent; _context5.next = 5; return (0, _isomorphicFetch2.default)(baseUrl + '/media/getepisode/' + episodeId).then(function (res) { return res.text(); }); case 5: torrentsHtml = _context5.sent; $ = _cheerio2.default.load(torrentsHtml); torrents = $("table tr:not('.firstr')").map(function formatTorrents() { return { magnet: $(this).find('[title="Torrent magnet link"]').attr('href'), metadata: $(this).find('[title="Torrent magnet link"]').attr('href'), seeders: parseInt($(this).find('.green.center').text(), 10), leechers: parseInt($(this).find('.red.lasttd.center').text(), 10) }; }).get(); return _context5.abrupt('return', torrents); case 9: case 'end': return _context5.stop(); } } }, _callee5, this); })); function parseTorrent(_x5, _x6, _x7) { return _ref4.apply(this, arguments); } return parseTorrent; }();