UNPKG

torrent-search-api

Version:

Yet another node torrent scraper based on x-ray. (Support iptorrents, torrentleech, torrent9, Yyggtorrent, ThePriatebay, torrentz2, 1337x, KickassTorrent, Rarbg, T411.si, TorrentProject)

84 lines (65 loc) 2.32 kB
const fs = require('fs'); const _ = require('lodash'); const providers = require('./lib/providers'); class TorrentSearchApi { enableProvider(providerName, ...args) { return this._getProvider(providerName).enableProvider(...args); } disableProvider(providerName) { this._getProvider(providerName).disableProvider(); } getProviders() { return providers.map(p => p.getInfos()); } getActiveProviders() { return this._getActiveProviders().map(p => p.getInfos()); } isProviderActive(name) { let provider = this._getProvider(name, false); if(provider && provider.isActive) { return true; } return false; } search(param, ...args) { if (typeof param === 'string') { return this._search(this._getActiveProviders(), param, ...args); } else if (param instanceof Array) { return this._search(this._getActiveProvidersByName(arguments[0]), ...args); } return Promise.reject('First param must be a query or an array of providers.'); } getTorrentDetails(torrent) { return this._getProvider(torrent.provider).getTorrentDetails(torrent); } downloadTorrent(torrent, filenamePath) { return this._getProvider(torrent.provider).downloadTorrent(torrent, filenamePath); } _search(selectedProviders, query, category, limit) { query = query === '' ? undefined : query; category = category === '' ? undefined : category; limit = limit === '' ? undefined : limit; return Promise.all(selectedProviders.map(p => p.search(query, category, limit))) .then(results => _.flatten(results)) .then(results => _.orderBy(results, ['seeds'], ['desc'])) .then(results => limit ? results.slice(0, limit) : results); } _getActiveProviders() { return _.filter(providers, 'isActive'); } _getProvider(name, throwOnError = true) { let provider = _.find(providers, p => p.getName().toUpperCase() === name.toUpperCase()); if (provider) { return provider; } if (throwOnError) { throw new Error(`Couldn't find '${name}' provider`); } return null; } _getActiveProvidersByName(providerNames) { return this._getActiveProviders().filter(p => providerNames.map(m => m.toUpperCase()).includes(p.getName().toUpperCase())); } } module.exports = TorrentSearchApi;