{"analyzedAt":"2022-07-11T19:45:53.335Z","collected":{"metadata":{"name":"@n0rmancodes/torrent-search-api","scope":"n0rmancodes","version":"2.1.3-hf3","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-01-29T17:31:18.021Z","author":{"name":"Jimmy Laurent"},"publisher":{"username":"n0rmancodes","email":"norman64@protonmail.com"},"maintainers":[{"username":"n0rmancodes","email":"norman64@protonmail.com"}],"repository":{"type":"git","url":"git://github.com/JimmyLaurent/torrent-search-api.git"},"links":{"npm":"https://www.npmjs.com/package/%40n0rmancodes%2Ftorrent-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":"^26.6.3","jest-junit":"^3.6.0","lint-staged":"^6.1.1","nock":"^9.1.6","prettier":"^1.10.2"},"releases":[{"from":"2022-06-11T00:00:00.000Z","to":"2022-07-11T00:00:00.000Z","count":0},{"from":"2022-04-12T00:00:00.000Z","to":"2022-07-11T00:00:00.000Z","count":0},{"from":"2022-01-12T00:00:00.000Z","to":"2022-07-11T00:00:00.000Z","count":1},{"from":"2021-07-11T00:00:00.000Z","to":"2022-07-11T00:00:00.000Z","count":1},{"from":"2020-07-11T00:00:00.000Z","to":"2022-07-11T00:00:00.000Z","count":6}],"hasTestScript":true,"readme":"# TorrentSearchApi\r\n\r\n[![npm](https://img.shields.io/npm/dm/torrent-search-api.svg?maxAge=2592000)](https://npm-stat.com/charts.html?package=torrent-search-api)\r\n\r\nYet another node torrent search api based on x-ray.\r\n\r\n## Install\r\n\r\n```bash\r\nnpm install torrent-search-api\r\n```\r\n\r\n## Supported providers\r\n\r\n- TorrentLeech: cookie authentification\r\n- IpTorrents: credentials and cookie authentification\r\n- Torrent9\r\n- Torrentz2\r\n- 1337x\r\n- ThePirateBay\r\n- YggTorrent : credentials and cookie authentification\r\n- KickassTorrents\r\n- Rarbg\r\n- TorrentProject\r\n- Yts\r\n- Limetorrents\r\n- Eztv\r\n\r\n## Features\r\n\r\n- **Search:** search torrents on multiples providers.\r\n\r\n- **Torrent details:** get details about torrents (raw scraped html).\r\n\r\n- **Download:** download torrents files.\r\n\r\n- **Easily extensible:** you can easily add new providers and enjoy built-in features like cloudfare bypass.\r\n \r\n\r\n## Quick Example\r\n\r\n```js\r\nconst TorrentSearchApi = require('torrent-search-api');\r\n\r\nTorrentSearchApi.enableProvider('Torrent9');\r\n\r\n// Search '1080' in 'Movies' category and limit to 20 results\r\nconst torrents = await TorrentSearchApi.search('1080', 'Movies', 20);\r\n```\r\n\r\n# Torrent Search API\r\n\r\n### Get providers\r\n\r\n```js\r\n// Get providers\r\nconst providers = TorrentSearchApi.getProviders();\r\n\r\n// Get active providers\r\nconst activeProviders = TorrentSearchApi.getActiveProviders();\r\n\r\n// providers\r\n{\r\n    {\r\n        name: 'Torrent9',\r\n        public: true,\r\n        categories: ['All', 'Movies', 'TV', 'Music', 'Apps', 'Books', 'Top100']\r\n    },\r\n    {\r\n        name: 'IpTorrents',\r\n        public: false,\r\n        categories: ['All', 'Movies', 'TV', 'Games', 'Music']\r\n    },\r\n    ...\r\n}\r\n\r\n```\r\n\r\n### Enable provider\r\n\r\n```js\r\n\r\n// Enable public providers\r\nTorrentSearchApi.enablePublicProviders();\r\n\r\n// Enable public provider\r\nTorrentSearchApi.enableProvider('Torrent9');\r\n\r\n// Enable private provider with cookies\r\nTorrentSearchApi.enableProvider('IpTorrents', ['uid=XXX;', 'pass=XXX;']);\r\n\r\n// Enable private provider with credentials\r\nTorrentSearchApi.enableProvider('IpTorrents', 'USERNAME', 'PASSWORD');\r\n\r\n// Enable private provider with token\r\nTorrentSearchApi.enableProvider('xxx', 'TOKEN');\r\n\r\n```\r\n\r\n### Disable provider\r\n\r\n```js\r\n\r\n// Disable provider\r\nTorrentSearchApi.disableProvider('TorrentLeech');\r\n\r\n// Disable all enabled providers\r\nTorrentSearchApi.disableAllProviders();\r\n\r\n```\r\n\r\n### Check if a provider exists and is active\r\n\r\n```js\r\n\r\nTorrentSearchApi.isProviderActive('1337x');\r\n\r\n```\r\n\r\n### Search torrent\r\n\r\nThe result is an array of torrents sorted by seeders with more or less properties depending on the provider.\r\n\r\n```js\r\n\r\n// Search on actives providers\r\n// Query: 1080\r\n// Category: Movies (optional)\r\n// Limit: 20 (optional)\r\nconst torrents = await TorrentSearchApi.search('1080', 'Movies', 20);\r\n\r\n// Search with given providers\r\n// query: 1080\r\n// category: Movies (optional)\r\n// limit: 20 (optional)\r\nconst torrents = await TorrentSearchApi.search(['IpTorrents', 'Torrent9'], '1080', 'Movies', 20);\r\n\r\n```\r\n\r\n### Torrent details\r\n\r\n```js\r\n\r\n// Get details (raw scraped html)\r\n// torrent: taken from a search result\r\nconst torrentHtmlDetail = await TorrentSearchApi.getTorrentDetails(torrent);\r\n\r\n```\r\n\r\n### Torrent magnet\r\n\r\n```js\r\n\r\n// Get magnet url\r\n// torrent: taken from a search result\r\nconst magnet = await TorrentSearchApi.getMagnet(torrent);\r\n\r\n```\r\n\r\n### Download torrent\r\n\r\n```js\r\n\r\n// Download a buffer\r\n// torrent: taken from a search result\r\nconst buffer = await TorrentSearchApi.downloadTorrent(torrent);\r\n\r\n// Download torrent and write it to the disk\r\n// torrent: taken from a search result\r\nawait TorrentSearchApi.downloadTorrent(torrent, filnamePath);\r\n```\r\n\r\n### Load custom providers\r\n\r\nYou can code and add your custom providers (see provider definition format in existing providers)\r\nDon't forget to enable your provider if you intend to use it.\r\n\r\n```js\r\n\r\n// load multipe providers\r\n// from a TorrentProvider custom class definition or instance\r\nconst MyCustomProvider = require('./MyCustomProvider');\r\nTorrentSearchApi.loadProvider(MyCustomProvider);\r\n\r\n// from a provider object definition\r\nTorrentSearchApi.loadProvider( {/* provider object definition */});\r\n\r\n// from an absolute path to class definition or json object definition\r\nconst path = require('path');\r\nconst providerFullPath = path.join(__dirname, './lib/providers/MyCustomProvider');\r\nTorrentSearchApi.loadProviders(providerFullPath);\r\n\r\n// load multipe providers within a directory\r\n// only absolute path are allowed\r\n// it loads every *.json and *.js file\r\nconst path = require('path');\r\nconst providerDirFullPath = path.join(__dirname, './lib/providers/');\r\nTorrentSearchApi.loadProviders(providerDirFullPath);\r\n\r\n// load multipe providers\r\nconst MyCustomProvider = require('./MyCustomProvider');\r\nTorrentSearchApi.loadProviders(MyCustomProvider, {/* provider object definition */}, ...);\r\n\r\n```\r\n\r\n### Remove provider\r\n\r\n```js\r\n\r\n// Remove provider\r\nTorrentSearchApi.removeProvider('MyCustomProvider');\r\n\r\n```\r\n\r\n### Create TorrentSearchApi instance\r\n\r\nIf you want to create an instance of the api without loading all the default providers and only load the ones that you want\r\n\r\n```js\r\n\r\n// create instance\r\nconst createApi = require('torrent-search-api/createApi');\r\nconst TorrentSearchApi = createApi(/* same arguments as \"loadProviders\" method */)\r\n\r\n```\r\n\r\n### Create a new provider\r\n\r\nCheck \"test/createProvider.test.js\" file if you want to create a new provider.\r\n\r\nRunning tests command\r\n\r\n```bash\r\nnpm run test:watch\r\n```\r\n\r\n### Override provider config\r\n ```js\r\n // Fully or partial override of the provider config\r\nTorrentSearchApi.overrideConfig(providerName, newConfig);\r\n ```\r\n\r\n## License\r\n\r\nMIT © 2020 [Jimmy Laurent](https://github.com/JimmyLaurent)"},"npm":{"downloads":[{"from":"2022-07-10T00:00:00.000Z","to":"2022-07-11T00:00:00.000Z","count":0},{"from":"2022-07-04T00:00:00.000Z","to":"2022-07-11T00:00:00.000Z","count":0},{"from":"2022-06-11T00:00:00.000Z","to":"2022-07-11T00:00:00.000Z","count":11},{"from":"2022-04-12T00:00:00.000Z","to":"2022-07-11T00:00:00.000Z","count":57},{"from":"2022-01-12T00:00:00.000Z","to":"2022-07-11T00:00:00.000Z","count":199},{"from":"2021-07-11T00:00:00.000Z","to":"2022-07-11T00:00:00.000Z","count":526}],"starsCount":0},"github":{"starsCount":307,"forksCount":93,"subscribersCount":13,"issues":{"count":139,"openCount":15,"distribution":{"3600":26,"10800":6,"32400":7,"97200":11,"291600":7,"874800":16,"2624400":22,"7873200":18,"23619600":8,"70858800":16,"212576400":2},"isDisabled":false},"contributors":[{"username":"YouriT","commitsCount":2},{"username":"navispeed","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":"dependabot[bot]","commitsCount":4},{"username":"yeikel","commitsCount":1},{"username":"TheToto","commitsCount":1},{"username":"Soudini","commitsCount":1},{"username":"Cyb3rRe4per","commitsCount":1},{"username":"francescov1","commitsCount":1},{"username":"tiphedor","commitsCount":1},{"username":"BreakLime","commitsCount":1},{"username":"Belphemur","commitsCount":3}],"commits":[{"from":"2022-07-04T00:00:00.000Z","to":"2022-07-11T00:00:00.000Z","count":0},{"from":"2022-06-11T00:00:00.000Z","to":"2022-07-11T00:00:00.000Z","count":0},{"from":"2022-04-12T00:00:00.000Z","to":"2022-07-11T00:00:00.000Z","count":0},{"from":"2022-01-12T00:00:00.000Z","to":"2022-07-11T00:00:00.000Z","count":0},{"from":"2021-07-11T00:00:00.000Z","to":"2022-07-11T00: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":431,"downloadsCount":19,"downloadsAcceleration":-0.3524923896499239,"dependentsCount":0},"maintenance":{"releasesFrequency":0.34828767123287674,"commitsFrequency":0,"openIssues":1,"issuesDistribution":0.26787601736792394}},"score":{"final":0.6673236816216174,"detail":{"quality":0.9038451353561814,"popularity":0.13200830530609328,"maintenance":0.9999063833075152}}}