kat-shows
Version:
The kat shows api client
260 lines (207 loc) • 8.16 kB
JavaScript
;
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;
}();