tpb-api
Version:
A Node.js torrents API wrapper for ThePirateBay
133 lines (103 loc) • 4.61 kB
JavaScript
;
var _typeof2 = require('babel-runtime/helpers/typeof');
var _typeof3 = _interopRequireDefault(_typeof2);
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _createClass2 = require('babel-runtime/helpers/createClass');
var _createClass3 = _interopRequireDefault(_createClass2);
var _got = require('got');
var _got2 = _interopRequireDefault(_got);
var _fakeUserAgent = require('fake-user-agent');
var _fakeUserAgent2 = _interopRequireDefault(_fakeUserAgent);
var _cheerio = require('cheerio');
var _cheerio2 = _interopRequireDefault(_cheerio);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
; /**
* Created by bondwong on 3/28/17.
*/
module.exports = function () {
function RBGT() {
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
_ref$baseUrl = _ref.baseUrl,
baseUrl = _ref$baseUrl === undefined ? 'https://thepiratebay.org/search' : _ref$baseUrl,
_ref$debug = _ref.debug,
debug = _ref$debug === undefined ? false : _ref$debug;
(0, _classCallCheck3.default)(this, RBGT);
this._baseUrl = baseUrl;
this._debug = debug;
}
(0, _createClass3.default)(RBGT, [{
key: '_fetchData',
value: function _fetchData(name, body, responseTime) {
var $ = _cheerio2.default.load(body);
var showName = name.replace(/ /g, '\.'); // The.Walking.Dead.S07E15.720p.XXXXXXX
var result = {
responseTime: responseTime,
name: showName,
status: false
};
$('#searchResult tr').each(function () {
var entry = $(this);
var title = entry.find('div.detName a.detLink').text();
title.replace(/ /g, '\.');
if (title.match(showName + '.720p')) {
result.resolution = '720p';
} else if (title.match(showName + '.1080p')) {
result.resolution = '1080p';
}
if (result.resolution) {
var tdList = entry.find('td');
var info = entry.find('font.detDesc').text().split(',');
var subPubDate = info[0].split(' ')[1].substr(0, 10);
var pubDate = subPubDate.indexOf(':') !== -1 ? subPubDate.substr(0, 5) + '-' + new Date().getFullYear() : subPubDate.substr(0, 5) + '-' + subPubDate.substr(6, 4);
var size = info[1].split(' ')[2];
var seeders = parseInt($(tdList[2]).text());
var leechers = parseInt($(tdList[3]).text());
var torrentLink = $($(tdList[1]).find('a')[1]).attr('href');
result.pubDate = pubDate;
result.size = size;
result.torrentLink = torrentLink;
result.seeders = seeders;
result.leechers = leechers;
result.status = true;
return false;
}
});
return result;
}
// only one page is needed to be checked, as long as the name is specific enough
}, {
key: '_getData',
value: function _getData(_ref2, date) {
var _this = this;
var name = _ref2.name;
var url = this._baseUrl + '/' + encodeURIComponent(name);
if (this._debug) {
console.log('Making requesting to: ' + url);
}
return (0, _got2.default)('' + url, {
method: 'GET',
headers: {
'user-agent': _fakeUserAgent2.default.MAC_SAFARI5
}
}).then(function (res) {
return res.body;
}).then(function (body) {
return _this._fetchData(name, body, Date.now() - date);
});
}
}, {
key: 'search',
value: function search(name) {
var date = Date.now();
if (typeof name === 'string') {
return this._getData({ name: name }, date);
} else if ((typeof name === 'undefined' ? 'undefined' : (0, _typeof3.default)(name)) === 'object') {
return this._getData(name, date);
} else {
throw new Error('invalid parameter');
}
}
}]);
return RBGT;
}();