{"analyzedAt":"2022-06-27T18:51:04.467Z","collected":{"metadata":{"name":"torrent-search-api","scope":"unscoped","version":"2.1.4","description":"Yet another node torrent scraper based on x-ray. (Support iptorrents, torrentleech, torrent9, Yyggtorrent, ThePiratebay, torrentz2, 1337x, KickassTorrent, Rarbg, TorrentProject, Yts, Limetorrents, Eztv)","keywords":["torrent","scraper","crawler","node","api","yggtorrent","torrentz2","torrentleech","iptorrents","1337x","thepiratebay","tpb","kickasstorrents","rarbg","torrentproject","yts","eztv","limetorrents"],"date":"2021-05-29T19:02:42.191Z","author":{"name":"Jimmy Laurent"},"publisher":{"username":"jimmylaurent","email":"jimlaurent0@gmail.com"},"maintainers":[{"username":"jimmylaurent","email":"jimlaurent0@gmail.com"}],"repository":{"type":"git","url":"git://github.com/JimmyLaurent/torrent-search-api.git"},"links":{"npm":"https://www.npmjs.com/package/torrent-search-api","homepage":"https://github.com/JimmyLaurent/torrent-search-api#readme","repository":"https://github.com/JimmyLaurent/torrent-search-api","bugs":"https://github.com/JimmyLaurent/torrent-search-api/issues"},"license":"MIT","dependencies":{"cloudscraper":"^4.6.0","lodash":"^4.17.15","request":"^2.88.2","string-format":"^0.5.0","x-ray-scraper":"^3.0.5"},"devDependencies":{"@types/jest":"^22.1.3","eslint":"^4.9.0","eslint-config-airbnb-base":"^12.1.0","eslint-plugin-import":"^2.7.0","install":"^0.10.4","jest":"^22.4.0","jest-junit":"^3.6.0","lint-staged":"^6.1.1","nock":"^9.1.6","prettier":"^1.10.2"},"releases":[{"from":"2022-05-28T00:00:00.000Z","to":"2022-06-27T00:00:00.000Z","count":0},{"from":"2022-03-29T00:00:00.000Z","to":"2022-06-27T00:00:00.000Z","count":0},{"from":"2021-12-29T00:00:00.000Z","to":"2022-06-27T00:00:00.000Z","count":0},{"from":"2021-06-27T00:00:00.000Z","to":"2022-06-27T00:00:00.000Z","count":0},{"from":"2020-06-27T00:00:00.000Z","to":"2022-06-27T00:00:00.000Z","count":1}],"hasTestScript":true,"readme":"# TorrentSearchApi\n\n[![npm](https://img.shields.io/npm/dm/torrent-search-api.svg?maxAge=2592000)](https://npm-stat.com/charts.html?package=torrent-search-api)\n\nYet another node torrent search api based on x-ray.\n\n## Install\n\n```bash\nnpm install torrent-search-api\n```\n\n## Supported providers\n\n- TorrentLeech: cookie authentification\n- IpTorrents: credentials and cookie authentification\n- Torrent9\n- Torrentz2\n- 1337x\n- ThePirateBay\n- YggTorrent : credentials and cookie authentification\n- KickassTorrents\n- Rarbg\n- TorrentProject\n- Yts\n- Limetorrents\n- Eztv\n\n## Features\n\n- **Search:** search torrents on multiples providers.\n\n- **Torrent details:** get details about torrents (raw scraped html).\n\n- **Download:** download torrents files.\n\n- **Easily extensible:** you can easily add new providers and enjoy built-in features like cloudfare bypass.\n \n\n## Quick Example\n\n```js\nconst TorrentSearchApi = require('torrent-search-api');\n\nTorrentSearchApi.enableProvider('Torrent9');\n\n// Search '1080' in 'Movies' category and limit to 20 results\nconst torrents = await TorrentSearchApi.search('1080', 'Movies', 20);\n```\n\n# Torrent Search API\n\n### Get providers\n\n```js\n// Get providers\nconst providers = TorrentSearchApi.getProviders();\n\n// Get active providers\nconst activeProviders = TorrentSearchApi.getActiveProviders();\n\n// providers\n{\n    {\n        name: 'Torrent9',\n        public: true,\n        categories: ['All', 'Movies', 'TV', 'Music', 'Apps', 'Books', 'Top100']\n    },\n    {\n        name: 'IpTorrents',\n        public: false,\n        categories: ['All', 'Movies', 'TV', 'Games', 'Music']\n    },\n    ...\n}\n\n```\n\n### Enable provider\n\n```js\n\n// Enable public providers\nTorrentSearchApi.enablePublicProviders();\n\n// Enable public provider\nTorrentSearchApi.enableProvider('Torrent9');\n\n// Enable private provider with cookies\nTorrentSearchApi.enableProvider('IpTorrents', ['uid=XXX;', 'pass=XXX;']);\n\n// Enable private provider with credentials\nTorrentSearchApi.enableProvider('IpTorrents', 'USERNAME', 'PASSWORD');\n\n// Enable private provider with token\nTorrentSearchApi.enableProvider('xxx', 'TOKEN');\n\n```\n\n### Disable provider\n\n```js\n\n// Disable provider\nTorrentSearchApi.disableProvider('TorrentLeech');\n\n// Disable all enabled providers\nTorrentSearchApi.disableAllProviders();\n\n```\n\n### Check if a provider exists and is active\n\n```js\n\nTorrentSearchApi.isProviderActive('1337x');\n\n```\n\n### Search torrent\n\nThe result is an array of torrents sorted by seeders with more or less properties depending on the provider.\n\n```js\n\n// Search on actives providers\n// Query: 1080\n// Category: Movies (optional)\n// Limit: 20 (optional)\nconst torrents = await TorrentSearchApi.search('1080', 'Movies', 20);\n\n// Search with given providers\n// query: 1080\n// category: Movies (optional)\n// limit: 20 (optional)\nconst torrents = await TorrentSearchApi.search(['IpTorrents', 'Torrent9'], '1080', 'Movies', 20);\n\n```\n\n### Torrent details\n\n```js\n\n// Get details (raw scraped html)\n// torrent: taken from a search result\nconst torrentHtmlDetail = await TorrentSearchApi.getTorrentDetails(torrent);\n\n```\n\n### Torrent magnet\n\n```js\n\n// Get magnet url\n// torrent: taken from a search result\nconst magnet = await TorrentSearchApi.getMagnet(torrent);\n\n```\n\n### Download torrent\n\n```js\n\n// Download a buffer\n// torrent: taken from a search result\nconst buffer = await TorrentSearchApi.downloadTorrent(torrent);\n\n// Download torrent and write it to the disk\n// torrent: taken from a search result\nawait TorrentSearchApi.downloadTorrent(torrent, filnamePath);\n```\n\n### Load custom providers\n\nYou can code and add your custom providers (see provider definition format in existing providers)\nDon't forget to enable your provider if you intend to use it.\n\n```js\n\n// load multipe providers\n// from a TorrentProvider custom class definition or instance\nconst MyCustomProvider = require('./MyCustomProvider');\nTorrentSearchApi.loadProvider(MyCustomProvider);\n\n// from a provider object definition\nTorrentSearchApi.loadProvider( {/* provider object definition */});\n\n// from an absolute path to class definition or json object definition\nconst path = require('path');\nconst providerFullPath = path.join(__dirname, './lib/providers/MyCustomProvider');\nTorrentSearchApi.loadProviders(providerFullPath);\n\n// load multipe providers within a directory\n// only absolute path are allowed\n// it loads every *.json and *.js file\nconst path = require('path');\nconst providerDirFullPath = path.join(__dirname, './lib/providers/');\nTorrentSearchApi.loadProviders(providerDirFullPath);\n\n// load multipe providers\nconst MyCustomProvider = require('./MyCustomProvider');\nTorrentSearchApi.loadProviders(MyCustomProvider, {/* provider object definition */}, ...);\n\n```\n\n### Remove provider\n\n```js\n\n// Remove provider\nTorrentSearchApi.removeProvider('MyCustomProvider');\n\n```\n\n### Create TorrentSearchApi instance\n\nIf you want to create an instance of the api without loading all the default providers and only load the ones that you want\n\n```js\n\n// create instance\nconst createApi = require('torrent-search-api/createApi');\nconst TorrentSearchApi = createApi(/* same arguments as \"loadProviders\" method */)\n\n```\n\n### Create a new provider\n\nCheck \"test/createProvider.test.js\" file if you want to create a new provider.\n\nRunning tests command\n\n```bash\nnpm run test:watch\n```\n\n### Override provider config\n ```js\n // Fully or partial override of the provider config\nTorrentSearchApi.overrideConfig(providerName, newConfig);\n ```\n\n## License\n\nMIT © 2020 [Jimmy Laurent](https://github.com/JimmyLaurent)"},"npm":{"downloads":[{"from":"2022-06-26T00:00:00.000Z","to":"2022-06-27T00:00:00.000Z","count":154},{"from":"2022-06-20T00:00:00.000Z","to":"2022-06-27T00:00:00.000Z","count":66018},{"from":"2022-05-28T00:00:00.000Z","to":"2022-06-27T00:00:00.000Z","count":356044},{"from":"2022-03-29T00:00:00.000Z","to":"2022-06-27T00:00:00.000Z","count":1014398},{"from":"2021-12-29T00:00:00.000Z","to":"2022-06-27T00:00:00.000Z","count":1463507},{"from":"2021-06-27T00:00:00.000Z","to":"2022-06-27T00:00:00.000Z","count":1868582}],"starsCount":2},"github":{"starsCount":306,"forksCount":95,"subscribersCount":13,"issues":{"count":139,"openCount":15,"distribution":{"3600":26,"10800":6,"32400":7,"97200":11,"291600":7,"874800":16,"2624400":22,"7873200":19,"23619600":7,"70858800":16,"212576400":2},"isDisabled":false},"contributors":[{"username":"YouriT","commitsCount":2},{"username":"francescov1","commitsCount":1},{"username":"ylon","commitsCount":2},{"username":"chiclemon","commitsCount":1},{"username":"JimmyLaurent","commitsCount":3},{"username":"Dewep","commitsCount":1},{"username":"Tristepin","commitsCount":3},{"username":"travishorn","commitsCount":1},{"username":"yboyer","commitsCount":1},{"username":"BreakLime","commitsCount":1},{"username":"yeikel","commitsCount":1},{"username":"TheToto","commitsCount":1},{"username":"Soudini","commitsCount":1},{"username":"Cyb3rRe4per","commitsCount":1},{"username":"Belphemur","commitsCount":3},{"username":"tiphedor","commitsCount":1},{"username":"navispeed","commitsCount":1},{"username":"dependabot[bot]","commitsCount":4}],"commits":[{"from":"2022-06-20T00:00:00.000Z","to":"2022-06-27T00:00:00.000Z","count":0},{"from":"2022-05-28T00:00:00.000Z","to":"2022-06-27T00:00:00.000Z","count":0},{"from":"2022-03-29T00:00:00.000Z","to":"2022-06-27T00:00:00.000Z","count":0},{"from":"2021-12-29T00:00:00.000Z","to":"2022-06-27T00:00:00.000Z","count":0},{"from":"2021-06-27T00:00:00.000Z","to":"2022-06-27T00:00:00.000Z","count":0}]},"source":{"files":{"readmeSize":5558,"testsSize":477739},"badges":[{"urls":{"original":"https://img.shields.io/npm/dm/torrent-search-api.svg?maxAge=2592000","shields":"https://img.shields.io/npm/dm/torrent-search-api.svg","content":"https://img.shields.io/npm/dm/torrent-search-api.json"},"info":{"service":"npm","type":"downloads","modifiers":{"type":"dm"}}}],"linters":["eslint","prettier"],"outdatedDependencies":{"string-format":{"required":"^0.5.0","stable":"2.0.0","latest":"2.0.0"}}}},"evaluation":{"quality":{"carefulness":0.84,"tests":0.6,"health":0.75,"branding":0.15},"popularity":{"communityInterest":434,"downloadsCount":338132.6666666667,"downloadsAcceleration":2439.980574581431,"dependentsCount":0},"maintenance":{"releasesFrequency":0.012328767123287673,"commitsFrequency":0,"openIssues":1,"issuesDistribution":0.2748208138035027}},"score":{"final":0.6425413275297843,"detail":{"quality":0.9038451353561814,"popularity":0.2839186376435233,"maintenance":0.7771893249934192}}}