UNPKG

tpb-api

Version:

A Node.js torrents API wrapper for ThePirateBay

133 lines (103 loc) 4.61 kB
'use strict'; 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 }; } 'use strict'; /** * 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; }();