Compare commits

...

158 Commits

Author SHA1 Message Date
Garfield69
858658cdcf add cinefilhd a private site for movies / tv. resolves #4908 2019-03-22 18:57:35 +13:00
Sc4nd4l
16b3c43861 add ChannelX, a private Tracker for High Quality Optimized HD MOVIES / TV #4924 2019-03-22 08:34:36 +13:00
Garfield69
def90ea2fb hdsky: switch to cookie login method 2019-03-21 19:44:36 +13:00
Garfield69
a859f58e8f cpabien: new domain .vg 2019-03-21 17:44:05 +13:00
Garfield69
449c478012 hdsky: upload to show imdb
both http and https
also search now include dead
2019-03-21 15:23:53 +13:00
Garfield69
896df26151 rarbg: fix details link not working
apparently ALL requests to the API server need to include the app_id
2019-03-21 12:26:07 +13:00
Garfield69
50441fbc1d torrent9: drop login 2019-03-21 07:26:44 +13:00
Garfield69
32005e1120 torrent9: drop alternate domain wvw. 2019-03-21 07:08:11 +13:00
Garfield69
33c7b69ee8 racingforeveryone: update categories
and login error detection
2019-03-21 06:21:20 +13:00
Garfield69
4d1c0265c6 romve btstornet, gone. resolves #4875 2019-03-20 21:28:08 +13:00
Garfield69
e1bc60ed29 beyondhd: add new category 2019-03-20 21:24:17 +13:00
Garfield69
fc43bd65be audiobooktorrents: drop redundant tv and movie search 2019-03-20 20:16:11 +13:00
Garfield69
234eed9e66 audiobookbay: add new categories
and supply default seeders, leechers, volumefactors
2019-03-20 20:09:42 +13:00
xfouloux
cf5ebe7909 Update sharewood.yml (#4917)
added cat TV, but TV and Movies are mixed no choices
2019-03-20 19:08:11 +13:00
Garfield69
a2ba3d68f9 animetosho: provide some defaults when not set by API response.
set Seeders and Leechers to 0 is none returned by API
set downloadvolumefactor to 0 (freeleech)
set uploadvolumefactor to 1
2019-03-20 16:56:26 +13:00
Garfield69
2ffbedc2fa anidex: use torznab categories for search, add lang id info in config 2019-03-20 15:26:24 +13:00
lps-rocks
b54c6bfa1f Change release name to use 'title' attribute (#4915)
Use link 'title' attribute. The text gets truncated by the website automatically if its longer than a certain length causing matching problems.
2019-03-20 14:42:10 +13:00
Garfield69
a45cd07434 amigosshare: add new categories 2019-03-20 14:29:15 +13:00
Garfield69
5b75796250 720pier: add missing categories 2019-03-20 11:36:10 +13:00
Garfield69
3d0e57f273 add btdb re-incanation of the public DHT crawler. resolves #4913 2019-03-20 10:03:41 +13:00
Garfield69
68de3e7a6a add casatorrent a French Private tracker. Resolves #4911 2019-03-20 09:09:31 +13:00
Garfield69
693f2b5965 turktorrent: #4871 2019-03-20 06:08:32 +13:00
Garfield69
749a33abc5 remove btxpress, gone. #3339 2019-03-20 03:20:47 +13:00
Garfield69
95a2f38e79 remove redtopia, shutdown. #3660 2019-03-20 03:17:59 +13:00
Garfield69
55e5db4e28 remove 420files, its gone. #4288 2019-03-20 03:15:21 +13:00
Garfield69
204e3f8fd2 3evils: add banner 2019-03-19 22:04:02 +13:00
Garfield69
613a554314 add xktorrent a French private site. resolves #4903 2019-03-19 20:32:56 +13:00
Garfield69
5efc7cd88c tag unit3d yaml 2019-03-19 19:22:15 +13:00
HDVinnie
5462ce0fd9 blutopia: updates for unit3d 1.9.1 (#4910) 2019-03-19 19:12:57 +13:00
Garfield69
d379319050 7tor: update categories 2019-03-19 12:18:34 +13:00
Garfield69
d0daf0d00b add btdigg a public DHT crawler. Resolves #4907 2019-03-19 10:41:02 +13:00
Garfield69
7f1e3dbb62 add pleasuredone, a private games tracker. resolves #4897 2019-03-19 08:53:32 +13:00
Garfield69
36f1b79927 remove archetorrent, gone. resolves #4906 2019-03-19 07:22:27 +13:00
Garfield69
f3302e5d53 add Sharewood, a semi-private French tracker. resolves #4898 2019-03-19 07:13:21 +13:00
Garfield69
b71bbe49c5 3evils: size and date cols have shifted 2019-03-18 18:44:47 +13:00
Garfield69
b3dec55a86 cardigannIndexer: implement torznab Limit for #4901 2019-03-18 17:41:23 +13:00
Garfield69
1bbc01cfcd add bit-titan a German tracker. resolves #4896 2019-03-17 21:00:47 +13:00
Garfield69
502ac57cd4 freedomhd: fix bluray movies cat 2019-03-17 20:19:01 +13:00
Garfield69
37430c5e79 freedomhd: update categories and date 2019-03-17 12:12:47 +13:00
Garfield69
85752ca58c add freetorrent a private tracker. resolves #4894 2019-03-17 11:23:12 +13:00
Garfield69
86881e2ad6 kinozal: sort out tv series for sonarr. #4767
inspired by rutracker
2019-03-16 17:09:45 +13:00
Garfield69
97367a55ac nnm-club: sort out tv series for sonarr. #4767
inspired by rutracker
2019-03-16 16:46:00 +13:00
Garfield69
d52f38efb9 add p2pbg a bulgarian private tracker. resolves #4888 2019-03-16 15:07:28 +13:00
Garfield69
9d3e41cb5c kinozal and nnm-club: #4767
drop adding a leading 0 on numbers
add kubik replacement
drop brackets on sxxexx for nnm-club
2019-03-16 10:28:20 +13:00
Garfield69
093425ac0a add mactorrents a public tracker for mac software. resolves #4889 2019-03-16 09:23:16 +13:00
Garfield69
e5c9fcd58e icetorrent: correct login error selector. #4890 2019-03-16 08:08:43 +13:00
flightlevel
6882715a3f Give scripts execute permission 2019-03-15 20:59:00 +11:00
buckmelanoma
21c206feb7 Raised number of search results returned (#4887) 2019-03-15 18:23:05 +13:00
Garfield69
67d7562882 kinozal: more sonarr stuff 2019-03-15 12:47:47 +13:00
Garfield69
1785b0832c add KikiBT, a Chinese DHT search engine. Reseolves #4886 2019-03-15 06:28:52 +13:00
Garfield69
2fc92e84c4 arenaBG: optionally use .torrent instead of magnet
Also fix date processing.
2019-03-14 16:30:54 +13:00
Garfield69
8db99363b6 kinozal: more for sonarr #4767
drop brackets around the season/episode and around the quality
2019-03-14 14:00:17 +13:00
Garfield69
ffbcd89bce piratbit: new domains 2019-03-14 08:32:54 +13:00
Garfield69
99e49dad9e kinozal: update season match for sonarr #4767 2019-03-14 07:24:49 +13:00
Jorman
57820de1c1 ilcorsaronero: new domain .pizza (#4883)
Changed domain
2019-03-14 06:51:45 +13:00
flightlevel
ca4f08a030 Package update 2019-03-13 20:32:48 +11:00
flightlevel
aa8e106727 Add execute flag to scripts 2019-03-13 20:26:09 +11:00
flightlevel
eda182f2c9 Make systemd scripts executable 2019-03-13 20:20:07 +11:00
Garfield69
83720c6982 hdplus: enable imdbid support. for #4859 2019-03-13 20:21:50 +13:00
Garfield69
43213b8ff4 worldofp2p: enable imdbid support. for #4859 2019-03-13 20:16:34 +13:00
Garfield69
77e9db411e cartoonchaos: enable imdbid support. for #4859 2019-03-13 20:07:31 +13:00
Garfield69
9d3eac2594 update torznabcattype.tt template
correct namespace
add UHD for movies and TV
2019-03-13 15:58:55 +13:00
Garfield69
52e89581cf mejortorrent: new domain .tv
also add volumefactors to results.
2019-03-13 13:54:08 +13:00
Garfield69
895fc4d077 kinozal: oops, forgot a setting. for #4767 2019-03-13 13:20:14 +13:00
Garfield69
bda30d7193 skytorrentsclone: they have switched from itorretns to btdb.eu 2019-03-13 13:04:51 +13:00
Garfield69
08a7641fb9 add moviesUHD to torznabQuery fallback. 2019-03-13 12:12:29 +13:00
leomoty
77e3db2f88 Add missing properties to TorznabQuery#Clone (#4879) 2019-03-13 12:09:09 +13:00
Garfield69
18ed7c88fb hdtorrents: add imdb selector for #4859 2019-03-13 09:15:16 +13:00
Garfield69
f2c7de0845 blutopia: add imdb selector for #4859 2019-03-13 09:01:13 +13:00
Garfield69
ee0d092c2f kinozal: add same title filters as nnm-club. resolves #4767 2019-03-13 08:44:53 +13:00
Garfield69
5ec8045fe0 delete torrof 2019-03-13 08:33:01 +13:00
Garfield69
924a8e9f96 metaltracker: fix login (now forcing https) resolves #4870 2019-03-13 08:11:41 +13:00
Garfield69
5389995b6d blutopia: add alternate freeleech flag. resolves #4872 2019-03-13 06:54:31 +13:00
leomoty
609a222d98 BJShare: Only set quality if available (#4860) 2019-03-13 06:11:58 +13:00
Garfield69
9f913d73f4 cztorrent: support new layout. resolves #4869 2019-03-12 21:04:59 +13:00
Garfield69
0c39616c12 xspeeds: add imdbid search support for #4859 2019-03-12 16:10:50 +13:00
Garfield69
e1e2441b91 tsc: cat43 descr correction 2019-03-12 14:51:02 +13:00
Garfield69
1085c753d7 torrentsectorcrew: rewrite selectors and category processing. resolves #4856 2019-03-12 14:47:32 +13:00
Garfield69
2ea46b5c9f add aftershock a Hungarian private site. for #1445 2019-03-11 20:43:34 +13:00
Jorman
90607d561c Update hdtorrentsit.yml (#4857) for #4839
Workaround due to https://github.com/Jackett/Jackett/issues/4839
Waiting for a c# version of this tracker
2019-03-11 12:28:57 +13:00
Garfield69
266568e4ce add dark-shadow a Private German site. resolves #4573 2019-03-11 11:59:15 +13:00
Garfield69
3378895b4c dragonworldreloaded: fix date parsing 2019-03-11 11:58:05 +13:00
Garfield69
d847b93418 gods: update cats for uhd 2019-03-11 09:47:22 +13:00
Garfield69
e32f02a003 nethd: fix date parsing. resolves #4855 2019-03-11 08:10:04 +13:00
Garfield69
8b0cede8ee torrentseeds: update categories, fix date processing 2019-03-10 20:53:04 +13:00
Garfield69
9f77de381b add hdplus a private tracker. resolves #4843 2019-03-10 19:52:50 +13:00
Garfield69
e060c82cd3 beyondhd: add imdbid support (torznab and dashboard search) resolves #4850 2019-03-10 17:13:32 +13:00
flightlevel
43f0f03b05 Version bump for .NET core support 2019-03-10 12:31:28 +11:00
flightlevel
25c7d84f95 Update install instructions for Linux 2019-03-10 12:21:06 +11:00
flightlevel
37ccf7a7a9 Update build script for different systemd scripts 2019-03-10 12:11:53 +11:00
flightlevel
a2e92da5f6 Add systemd script for .NET Core version of Jackett 2019-03-10 12:06:18 +11:00
flightlevel
d1e57c25d6 Rename systemd to include Mono 2019-03-10 11:59:32 +11:00
Garfield69
db2ba3ba0b digitalcore: update music categories 2019-03-10 13:40:32 +13:00
Joachim Bergstrøm
902961dc5a add digitalcore a Private tracker. (#4847) resolves #4808
Add support for digitalcore.club private tracker
Update README.md
2019-03-10 12:45:03 +13:00
Garfield69
689568d147 beyondhd: add andmatch #4828 2019-03-10 08:08:42 +13:00
Garfield69
1cd05963df beyondhd: now searching using searchin=descr&incldead=1 #4828 2019-03-09 19:53:47 +13:00
Garfield69
fbb3c1bdfc xtremezone is no longer semi-private, invites are needed for registration. 2019-03-09 17:00:34 +13:00
Garfield69
de5b26032e nyaa-pantsu: add alternate domain 2019-03-09 16:12:37 +13:00
Garfield69
0761ad7aee delete idopeclone: no longer suitable for cardigann processing
needs to be rewritten in c# see #4841
2019-03-09 15:53:48 +13:00
Garfield69
6cce59126b btkitty: new domain .pet 2019-03-09 15:06:00 +13:00
Garfield69
347191ab6a readme: note that the omdb is used for the aggregate Indexer. 2019-03-08 20:20:24 +13:00
Garfield69
afac5ad1cf tvstore: prevent index-out-of-range-exception 2019-03-08 20:00:04 +13:00
Garfield69
fa10c625dd delete torrentcouch
no longer suppliying .torrent or magnet
2019-03-08 18:19:28 +13:00
Garfield69
c546fd7ac8 gktorrent: back to .tv domain. 2019-03-08 17:41:01 +13:00
Garfield69
fc96965e54 awesome-hd: correct modes. (untested) 2019-03-08 16:05:34 +13:00
flightlevel
feaf5d4361 Publish Linux ARM builds 2019-03-07 21:11:06 +11:00
flightlevel
f146b3eaa6 Code tidy 2019-03-06 21:25:06 +11:00
flightlevel
d07b6ae863 Enable Linux x64 build 2019-03-06 21:18:28 +11:00
flightlevel
a25f2016dc Make Mono.Posix usage conditional on .NET Core 2019-03-06 21:16:20 +11:00
flightlevel
a5f0e2b5db Code tidy up 2019-03-06 20:20:32 +11:00
flightlevel
6ac9555cb5 Make parameter type HttpRequest
Code tidy
2019-03-06 20:11:50 +11:00
flightlevel
e7d9360b51 Disable Mono.Posix 2019-03-06 19:51:59 +11:00
thetennismaster
5a7091075e Add TotallyKids.tv definition. Resolves #4 (#4825)
* Add TotallyKids.tv definition. Resolves #4
* Add TotallyKids (TK) to the README
2019-03-06 18:10:33 +13:00
flightlevel
2270b13435 Trigger build 2019-03-06 13:05:12 +11:00
flightlevel
80a99ce69f Don't use Path.Combine for Linux paths 2019-03-06 12:59:14 +11:00
flightlevel
c54cbb4cbe Trigger build 2019-03-06 12:32:27 +11:00
flightlevel
de55e6e14e Log paths for debugging 2019-03-06 12:23:03 +11:00
Garfield69
0983540493 Merge branch 'master' of https://github.com/Jackett/Jackett 2019-03-06 13:41:11 +13:00
Garfield69
6cc262a6d3 torrent9: drop apostrophes on keywords. resolves #4822 2019-03-06 13:40:35 +13:00
flightlevel
2484ff16f3 Enable updater on .NET Core 2019-03-06 11:26:38 +11:00
Garfield69
4e1d7ac09b Revert "eztv: fetch magnets from details page. resolves #4813"
This reverts commit a84b1dce4d.
2019-03-06 13:00:28 +13:00
flightlevel
b8aa2a16dd Make execute permission conditional on .NET Core 2019-03-05 22:09:20 +11:00
flightlevel
cf7ca97f9c Make jackett and JackettUpdater executable 2019-03-05 21:25:37 +11:00
Garfield69
cc01b0ca05 add sharingue a Brazilian private tracker. resolves #4817 2019-03-05 19:37:46 +13:00
Garfield69
a84b1dce4d eztv: fetch magnets from details page. resolves #4813 2019-03-05 07:25:56 +13:00
flightlevel
be54f1a532 Fix copy/paste error 2019-03-04 17:52:17 +11:00
flightlevel
064786f379 Disable macOS .NET Core builds for now 2019-03-04 17:44:05 +11:00
Garfield69
9d140b3ab4 beyondhd: set freeleech resolves #4809 2019-03-04 15:40:10 +13:00
Garfield69
a65d855cc4 torrent-turk: fix login form. resolves #4334
switch to new domain .co
also added missing cxategories
fix date processing
add missing volumefactors
2019-03-04 15:34:23 +13:00
Garfield69
2698ac2907 torrentgalaxyorg: new result selectors. resolves #4805 2019-03-04 08:33:41 +13:00
Garfield69
28971c2303 scenerush: add categories. resolves #1775
correct login error meesage detection
upgrade to https
correct date parsing
switch browse post to get
2019-03-04 07:23:30 +13:00
Garfield69
6428a7134b classix: use alternate method of andmatch. for #4788 2019-03-04 06:00:02 +13:00
flightlevel
b33f5764ef Perform Linux build first 2019-03-03 17:42:09 +11:00
flightlevel
ebb855bf45 Release notes for linux 2019-03-03 17:32:47 +11:00
flightlevel
9e90edd397 Linux release notes 2019-03-03 17:22:34 +11:00
flightlevel
ee2743cdc9 Re-enable Windows building 2019-03-03 17:06:14 +11:00
flightlevel
a9731b036c Update file permissions 2019-03-03 16:53:40 +11:00
flightlevel
58ed5421ec Appveyor.yml: Fix casing 2019-03-03 16:35:00 +11:00
flightlevel
dc25480844 Appveyor test casing 2019-03-03 16:31:16 +11:00
flightlevel
789d168648 Build.cake line endings 2019-03-03 16:19:00 +11:00
flightlevel
f6668c9777 Test linux only build 2019-03-03 16:09:55 +11:00
flightlevel
5903e6abdf Enable updater for .NET Core on macOS 2019-03-03 16:09:17 +11:00
flightlevel
0de4c1da43 Push artifacts on Appveyor Linux 2019-03-03 15:51:59 +11:00
flightlevel
53bd7ce0c4 Updater: Add logic for .NET Core 2019-03-03 15:44:18 +11:00
flightlevel
4d4c9fe645 Improve build instructions 2019-03-03 15:32:55 +11:00
flightlevel
caf583a684 Package update 2019-03-03 15:23:33 +11:00
flightlevel
b445072a4d TVStore: Throw exception 2019-03-03 15:09:51 +11:00
flightlevel
82617f961d Force Github update deploy
Trying to avoid downloading artifacts in the second Appveyor job
2019-03-03 15:09:26 +11:00
flightlevel
c28df96332 Build updater for .NET Core macOS 2019-03-03 15:01:07 +11:00
Garfield69
88c6c4af6e classix: add andmatch. resolves #4788 2019-03-02 17:13:22 +13:00
Garfield69
df49bb8578 asiancinema: fix #4798 2019-03-02 13:15:39 +13:00
Garfield69
a968913bc4 add pthome a chinese private tracker. resolves #4795 2019-03-02 09:09:04 +13:00
Jorman
5c9880e410 ilcorsaronero: new domain .live (#4794)
Changed domain
2019-03-01 10:29:48 +13:00
morpheus133
d7af20d4f6 ncore: add offset support (#4792) resolves #4778
* add offset support to ncore indexer
* small correction related to add .hun tag to torrents
* DivideByZeroException  at torrent_per_page
2019-03-01 07:23:00 +13:00
xfouloux
8dc832d64a yggtorrent: tidy up keyword processing (#4791)
trimed stuff on .Keyword in keywordsfilters instead of re_replace in path because it caused having %20%20 in search .Keyword instead of having only one
2019-02-28 22:06:40 +13:00
Garfield69
91b87ee7be 7tor: fix TEST mode for #4784
the getnew search does not appear to be working any longer, so in no keywords are supplied we will use  TEST instead. Not ideal but better than no-results = error.
2019-02-28 13:19:19 +13:00
Garfield69
ee8fc6a78f bigtorrent: fix TEST mode for #1219
and also return a login error message
2019-02-28 10:05:20 +13:00
Garfield69
18f48cb04b icetorrent: attempt to fix for #4783 2019-02-28 09:42:23 +13:00
103 changed files with 3448 additions and 1185 deletions

View File

@@ -17,7 +17,8 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
#### Supported Systems
* Windows using .NET 4.6.1 or above [Download here](https://www.microsoft.com/net/framework/versions/net461).
* Linux and macOS using Mono 5.8 or above. [Download here](http://www.mono-project.com/download/).
* Linux
* macOS using Mono 5.8 or above. [Download here](http://www.mono-project.com/download/).
### Supported Public Trackers
* 1337x
@@ -26,8 +27,9 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
* Anime Tosho
* AniRena
* AudioBook Bay (ABB)
* BTstor.net
* btbit
* BTDB
* BTDigg
* BTKitty
* cpasbien
* cpasbienClone
@@ -39,14 +41,15 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
* Frozen Layer
* GkTorrent
* Horrible Subs
* IdopeClone
* Il Corsaro Nero <!-- maintained by bonny1992 -->
* Il Corsaro Blu
* Isohunt2
* KATcrs
* KickAssTorrent (KATcr)
* KickAssTorrent (thekat.se clone)
* KikiBT
* LimeTorrents
* MacTorrents
* MagnetDL
* MejorTorrent <!-- maintained by ivandelabeldad -->
* Monova
@@ -68,7 +71,6 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
* TNTVillage <!-- maintained by bonny1992 -->
* Tokyo Tosho
* Torlock
* TorrentCouch
* Torrent Downloads (TD)
* TorrentFunk
* TorrentGalaxy.org (TGx)
@@ -78,7 +80,6 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
* Torrent9
* Torernt9 clone (torrents9.ch)
* Torrentz2
* Torrof (Torrentoff)
* World Wide Torrents
* YTS.ag
* Zooqle
@@ -104,6 +105,7 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
* NoName Club (NNM-Club)
* RockBox
* RuTracker
* Sharewood
* SkTorrent
* Union Fansub
* Vanila
@@ -115,10 +117,10 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
* 2 Fast 4 You
* 3D Torrents (3DT)
* 3evils
* 420files
* 720pier
* Abnormal
* Acid Lounge (A-L)
* Aftershock
* AlphaRatio (AR)
* AmigosShareClub
* AnimeBytes (AB)
@@ -126,7 +128,6 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
* Anthelion
* AOX (Chippu)
* Araba Fenice (Phoenix)
* ArcheTorrent
* AsianCinema
* AsianDVDClub
* AST4u
@@ -143,6 +144,7 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
* BigTower
* Bit-City Reloaded
* BIT-HDTV
* BiT-TiTAN
* Bithorlo (BHO)
* BitHUmen
* BitMe
@@ -159,22 +161,26 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
* BrokenStones
* BTGigs (TG)
* BTNext (BTNT)
* BTXpress (BTX)
* Carpathians
* CartoonChaos (CC)
* CasaTorrent
* CasStudioTV
* CCFBits
* CGPeers
* CHDBits
* ChannelX
* CiNEFiLHD
* Cinemageddon
* Cinematik
* CinemaZ (EuTorrents)
* Classix
* CrnaBerza
* DanishBits (DB)
* Dark-Shadow
* DataScene (DS)
* DesiTorrents
* Diablo Torrent
* DigitalCore
* DigitalHive
* DivTeam
* DocumentaryTorrents (DT)
@@ -192,6 +198,7 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
* FileList (FL)
* Femdomcult
* Freedom-HD (Freedom Paradise)
* FreeTorrent
* FullMixMusic
* FunFile (FF)
* FunkyTorrents (FT)
@@ -221,6 +228,7 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
* HDCity
* HDHome (HDBigger)
* HDME
* HDplus
* HDSky
* HDTorrents.it
* Hebits
@@ -258,11 +266,13 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
* notwhat.cd
* Orpheus
* Ourbits (HDPter)
* P2PBG
* Passione Torrent <!-- maintained by bonny1992 -->
* PassThePopcorn (PTP)
* PiratBit
* PirateTheNet (PTN)
* PiXELHD (PxHD)
* Pleasuredome
* PolishSource (PS)
* PolishTracker
* Pretome
@@ -271,13 +281,13 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
* Psytorrents
* PT99
* PTFiles (PTF)
* PThome
* PuntoTorrent
* PWTorrents (PWT)
* Racing4Everyone (R4E)
* RacingForMe (RFM)
* Redacted (PassTheHeadphones)
* Red Star Torrent (RST)
* Redtopia (RED)
* RetroFlix
* RevolutionTT
* RGU
@@ -292,6 +302,7 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
* Secret Cinema
* Shareisland
* ShareSpaceDB
* Sharingue
* Shazbat
* Shellife (SL)
* SpaceTorrent
@@ -332,6 +343,7 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
* Torrent-Syndikat
* TOrrent-tuRK (TORK)
* TorViet (HDVNBits)
* TotallyKids (TK)
* ToTheGlory
* TranceTraffic
* Trezzor
@@ -349,6 +361,7 @@ Developer note: The software implements the [Torznab](https://github.com/Sonarr/
* x-ite.me (XM)
* xBytesV2
* XSpeeds (XS)
* XKTorrent
* XWTorrents (XWT)
* Xthor
* ExoticaZ (YourExotic)
@@ -389,7 +402,24 @@ When installed as a service the tray icon acts as a way to open/start/stop Jacke
Jackett can also be run from the command line if you would like to see log messages (Ensure the server isn't already running from the tray/service). This can be done by using "JackettConsole.exe" (for Command Prompt), found in the Jackett data folder: "%ProgramData%\Jackett".
## Installation on Linux
### Install on Linux (AMDx64)
1. Download and extract the latest `Jackett.Binaries.LinuxAMDx64.tar.gz` release from the [releases page](https://github.com/Jackett/Jackett/releases) and run Jackett with the command `./jackett`
2. (Optional) To install Jackett as a service, open the Terminal and run `sudo ./install_service_systemd.sh` You need root permissions to install the service. The service will start on each logon. You can always stop it by running `systemctl stop jackett.service` from Terminal. You can start it again it using `systemctl start jackett.service`. Logs are stored as usual under `~/.config/Jackett/log.txt` and also in `journalctl -u jackett.service`.
On most operating systems all the required dependencies will already be present. In case they are not, you can refer to this page https://docs.microsoft.com/en-us/dotnet/core/linux-prerequisites?tabs=netcore2x#linux-distribution-dependencies
If you want to run it with a user without a /home directory you need to add `Environment=XDG_CONFIG_HOME=/path/to/folder` to your systemd file, this folder will be used to store your config files.
### Install on Linux (ARMv7 or above)
1. Download and extract the latest `Jackett.Binaries.LinuxARM32.tar.gz` or `Jackett.Binaries.LinuxARM64.tar.gz` (32 bit is the most common on ARM) release from the [releases page](https://github.com/Jackett/Jackett/releases) and run Jackett with the command `./jackett`
2. (Optional) To install Jackett as a service, open the Terminal and run `sudo ./install_service_systemd.sh` You need root permissions to install the service. The service will start on each logon. You can always stop it by running `systemctl stop jackett.service` from Terminal. You can start it again it using `systemctl start jackett.service`. Logs are stored as usual under `~/.config/Jackett/log.txt` and also in `journalctl -u jackett.service`.
On most operating systems all the required dependencies will already be present. In case they are not, you can refer to this page https://docs.microsoft.com/en-us/dotnet/core/linux-prerequisites?tabs=netcore2x#linux-distribution-dependencies
If you want to run it with a user without a /home directory you need to add `Environment=XDG_CONFIG_HOME=/path/to/folder` to your systemd file, this folder will be used to store your config files.
### Installation on Linux (ARMv6 or below)
1. Install [Mono 5.8](http://www.mono-project.com/download/#download-lin) or better (using the latest stable release is recommended)
* Follow the instructions on the mono website and install the `mono-devel` and the `ca-certificates-mono` packages.
* On Red Hat/CentOS/openSUSE/Fedora the `mono-locale-extras` package is also required.
@@ -398,21 +428,12 @@ Jackett can also be run from the command line if you would like to see log messa
* Redhat/Fedora: `yum install libcurl-devel`
* For other distros see the [Curl docs](http://curl.haxx.se/dlwiz/?type=devel).
3. Download and extract the latest `Jackett.Binaries.Mono.tar.gz` release from the [releases page](https://github.com/Jackett/Jackett/releases) and run Jackett using mono with the command `mono --debug JackettConsole.exe`.
Detailed instructions for [Ubuntu 14.x](http://www.htpcguides.com/install-jackett-on-ubuntu-14-x-for-custom-torrents-in-sonarr/) and [Ubuntu 15.x](http://www.htpcguides.com/install-jackett-ubuntu-15-x-for-custom-torrents-in-sonarr/)
4. (Optional) To install Jackett as a service, open the Terminal and run `sudo ./install_service_systemd_mono.sh` You need root permissions to install the service. The service will start on each logon. You can always stop it by running `systemctl stop jackett.service` from Terminal. You can start it again it using `systemctl start jackett.service`. Logs are stored as usual under `~/.config/Jackett/log.txt` and also in `journalctl -u jackett.service`.
If you want to run it with a user without a /home directory you need to add `Environment=XDG_CONFIG_HOME=/path/to/folder` to your systemd file, this folder will be used to store your config files.
Mono must be compiled with the Roslyn compiler (default), using MCS will cause "An error has occurred." errors (See https://github.com/Jackett/Jackett/issues/2704).
### Install as service
1. Install Jackett with the steps from above.
2. Open the Terminal and run `sudo ./install_service_systemd.sh` You need root permissions to install the service.
2. If the installation was a success, you can close the Terminal window.
The service will start on each logon. You can always stop it by running `systemctl stop jackett.service` from Terminal. You can start it again it using `systemctl start jackett.service`.
Logs are stored as usual under `~/.config/Jackett/log.txt` and also in `journalctl -u jackett.service`.
### Installation on Linux via Ansible
On a RHEL/Centos 7 system: [linuxhq.jackett](https://galaxy.ansible.com/linuxhq/jackett)
@@ -487,7 +508,7 @@ location /jackett {
The logfiles (log.txt/updater.txt) are stored in `%ProgramData%\Jackett` on Windows and `~/.config/Jackett/` on Linux/macOS.
## Configuring OMDb
This feature is used as a fallback to get the movie/series title if only the IMDB ID is provided in the request.
This feature is used as a fallback (when using the aggregate Indexer) to get the movie/series title if only the IMDB ID is provided in the request.
To use it, please just request a free API key on [OMDb](http://www.omdbapi.com/apikey.aspx) (1,000 daily requests limit) and paste the key in Jackett
## Creating an issue
@@ -514,6 +535,8 @@ All contributions are welcome just send a pull request.
### Windows
* Install the .NET Core [SDK](https://www.microsoft.com/net/download/windows)
* Clone Jackett
* From the `src` directory, run `dotnet restore`
* Open the Jackett solution in Visual Studio 2017 (version 15.9 or above)
* Right click on the Jackett solution and click 'Rebuild Solution' to restore nuget packages
* Select Jackett.Server as startup project

View File

@@ -1,8 +1,8 @@
version: 0.10.{build}
version: 0.11.{build}
skip_tags: true
image:
- Visual Studio 2017
image:
- Ubuntu
- Visual Studio 2017
environment:
APPVEYOR_YML_DISABLE_PS_LINUX: true
configuration: Release
@@ -28,12 +28,13 @@ before_deploy:
- ps: ${env:release_description} = ( Get-Content -LiteralPath BuildOutput/ReleaseNotes.txt -Encoding UTF8 ) -join "`n";
deploy:
- provider: GitHub
tag: v$(appveyor_build_version)
tag: v$(APPVEYOR_BUILD_VERSION)
description: $(release_description)
auth_token:
secure: hOg+16YTIbq4kO9u4D1YVOTbWDqgCX6mAQYMbnmBBSw2CiUsZh7OKbupoUb3FtWa
artifact: /^(?:(?![Ee]xperimental).)*$/
draft: true
force_update: true
on:
branch: master
notifications:

View File

@@ -14,9 +14,11 @@ var configuration = Argument("configuration", "Debug");
// Define directories.
var workingDir = MakeAbsolute(Directory("./"));
var artifactsDirName = "Artifacts";
var testResultsDirName = "TestResults";
var netCoreFramework = "netcoreapp2.2";
string artifactsDirName = "Artifacts";
string testResultsDirName = "TestResults";
string netCoreFramework = "netcoreapp2.2";
string serverProjectPath = "./src/Jackett.Server/Jackett.Server.csproj";
string updaterProjectPath = "./src/Jackett.Updater/Jackett.Updater.csproj";
//////////////////////////////////////////////////////////////////////
// TASKS
@@ -89,7 +91,6 @@ Task("Package-Windows-Full-Framework")
.IsDependentOn("Run-Unit-Tests")
.Does(() =>
{
string serverProjectPath = "./src/Jackett.Server/Jackett.Server.csproj";
string buildOutputPath = "./BuildOutput/net461/win7-x86/Jackett";
DotNetCorePublish(serverProjectPath, "net461", "win7-x86", buildOutputPath);
@@ -119,7 +120,6 @@ Task("Package-Mono-Full-Framework")
.IsDependentOn("Run-Unit-Tests")
.Does(() =>
{
string serverProjectPath = "./src/Jackett.Server/Jackett.Server.csproj";
string buildOutputPath = "./BuildOutput/net461/linux-x64/Jackett";
DotNetCorePublish(serverProjectPath, "net461", "linux-x64", buildOutputPath);
@@ -127,7 +127,7 @@ Task("Package-Mono-Full-Framework")
CopyFiles("./src/Jackett.Updater/bin/" + configuration + "/net461" + "/JackettUpdater.*", buildOutputPath); //builds against multiple frameworks
CopyFileToDirectory("./install_service_macos", buildOutputPath);
CopyFileToDirectory("./install_service_systemd.sh", buildOutputPath);
CopyFileToDirectory("./install_service_systemd_mono.sh", buildOutputPath);
CopyFileToDirectory("./Upstart.config", buildOutputPath);
//There is an issue with Mono 5.8 (fixed in Mono 5.12) where its expecting to use its own patched version of System.Net.Http.dll, instead of the version supplied in folder
@@ -154,30 +154,37 @@ Task("Package-DotNetCore-macOS")
.Does(() =>
{
string runtimeId = "osx-x64";
string serverProjectPath = "./src/Jackett.Server/Jackett.Server.csproj";
string buildOutputPath = $"./BuildOutput/{netCoreFramework}/{runtimeId}/Jackett";
string updaterOutputPath = buildOutputPath + "/Updater";
DotNetCorePublish(serverProjectPath, netCoreFramework, runtimeId, buildOutputPath);
DotNetCorePublish(updaterProjectPath, netCoreFramework, runtimeId, updaterOutputPath);
CopyFiles(updaterOutputPath + "/JackettUpdater*", buildOutputPath);
DeleteDirectory(updaterOutputPath, new DeleteDirectorySettings {Recursive = true, Force = true});
CopyFileToDirectory("./install_service_macos", buildOutputPath);
Gzip($"./BuildOutput/{netCoreFramework}/{runtimeId}", $"./{artifactsDirName}", "Jackett", "Experimental.Jackett.Binaries.macOS.tar.gz");
});
Task("Package-DotNetCore-LinuxAMD64")
Task("Package-DotNetCore-LinuxAMDx64")
.IsDependentOn("Clean")
.Does(() =>
{
string runtimeId = "linux-x64";
string serverProjectPath = "./src/Jackett.Server/Jackett.Server.csproj";
string buildOutputPath = $"./BuildOutput/{netCoreFramework}/{runtimeId}/Jackett";
string updaterOutputPath = buildOutputPath + "/Updater";
DotNetCorePublish(serverProjectPath, netCoreFramework, runtimeId, buildOutputPath);
CopyFileToDirectory("./install_service_systemd.sh", buildOutputPath);
CopyFileToDirectory("./Upstart.config", buildOutputPath);
DotNetCorePublish(updaterProjectPath, netCoreFramework, runtimeId, updaterOutputPath);
CopyFiles(updaterOutputPath + "/JackettUpdater*", buildOutputPath);
DeleteDirectory(updaterOutputPath, new DeleteDirectorySettings {Recursive = true, Force = true});
Gzip($"./BuildOutput/{netCoreFramework}/{runtimeId}", $"./{artifactsDirName}", "Jackett", "Experimental.Jackett.Binaries.LinuxAMD64.tar.gz");
CopyFileToDirectory("./install_service_systemd.sh", buildOutputPath);
Gzip($"./BuildOutput/{netCoreFramework}/{runtimeId}", $"./{artifactsDirName}", "Jackett", "Jackett.Binaries.LinuxAMDx64.tar.gz");
});
Task("Package-DotNetCore-LinuxARM32")
@@ -185,15 +192,18 @@ Task("Package-DotNetCore-LinuxARM32")
.Does(() =>
{
string runtimeId = "linux-arm";
string serverProjectPath = "./src/Jackett.Server/Jackett.Server.csproj";
string buildOutputPath = $"./BuildOutput/{netCoreFramework}/{runtimeId}/Jackett";
string updaterOutputPath = buildOutputPath + "/Updater";
DotNetCorePublish(serverProjectPath, netCoreFramework, runtimeId, buildOutputPath);
CopyFileToDirectory("./install_service_systemd.sh", buildOutputPath);
CopyFileToDirectory("./Upstart.config", buildOutputPath);
DotNetCorePublish(updaterProjectPath, netCoreFramework, runtimeId, updaterOutputPath);
CopyFiles(updaterOutputPath + "/JackettUpdater*", buildOutputPath);
DeleteDirectory(updaterOutputPath, new DeleteDirectorySettings {Recursive = true, Force = true});
Gzip($"./BuildOutput/{netCoreFramework}/{runtimeId}", $"./{artifactsDirName}", "Jackett", "Experimental.Jackett.Binaries.LinuxARM32.tar.gz");
CopyFileToDirectory("./install_service_systemd.sh", buildOutputPath);
Gzip($"./BuildOutput/{netCoreFramework}/{runtimeId}", $"./{artifactsDirName}", "Jackett", "Jackett.Binaries.LinuxARM32.tar.gz");
});
Task("Package-DotNetCore-LinuxARM64")
@@ -201,22 +211,25 @@ Task("Package-DotNetCore-LinuxARM64")
.Does(() =>
{
string runtimeId = "linux-arm64";
string serverProjectPath = "./src/Jackett.Server/Jackett.Server.csproj";
string buildOutputPath = $"./BuildOutput/{netCoreFramework}/{runtimeId}/Jackett";
string updaterOutputPath = buildOutputPath + "/Updater";
DotNetCorePublish(serverProjectPath, netCoreFramework, runtimeId, buildOutputPath);
CopyFileToDirectory("./install_service_systemd.sh", buildOutputPath);
CopyFileToDirectory("./Upstart.config", buildOutputPath);
Gzip($"./BuildOutput/{netCoreFramework}/{runtimeId}", $"./{artifactsDirName}", "Jackett", "Experimental.Jackett.Binaries.LinuxARM64.tar.gz");
DotNetCorePublish(updaterProjectPath, netCoreFramework, runtimeId, updaterOutputPath);
CopyFiles(updaterOutputPath + "/JackettUpdater*", buildOutputPath);
DeleteDirectory(updaterOutputPath, new DeleteDirectorySettings {Recursive = true, Force = true});
CopyFileToDirectory("./install_service_systemd.sh", buildOutputPath);
Gzip($"./BuildOutput/{netCoreFramework}/{runtimeId}", $"./{artifactsDirName}", "Jackett", "Jackett.Binaries.LinuxARM64.tar.gz");
});
Task("Appveyor-Push-Artifacts")
.IsDependentOn("Clean")
.Does(() =>
{
if (AppVeyor.IsRunningOnAppVeyor && IsRunningOnWindows())
if (AppVeyor.IsRunningOnAppVeyor)
{
foreach (var file in GetFiles(workingDir + $"/{artifactsDirName}/*"))
{
@@ -280,10 +293,10 @@ Task("Release-Notes")
Task("Windows-Environment")
.IsDependentOn("Package-Windows-Full-Framework")
.IsDependentOn("Package-Mono-Full-Framework")
.IsDependentOn("Package-DotNetCore-macOS")
.IsDependentOn("Package-DotNetCore-LinuxAMD64")
.IsDependentOn("Package-DotNetCore-LinuxARM32")
.IsDependentOn("Package-DotNetCore-LinuxARM64")
//.IsDependentOn("Package-DotNetCore-macOS")
//.IsDependentOn("Package-DotNetCore-LinuxAMDx64")
//.IsDependentOn("Package-DotNetCore-LinuxARM32")
//.IsDependentOn("Package-DotNetCore-LinuxARM64")
.IsDependentOn("Appveyor-Push-Artifacts")
.IsDependentOn("Release-Notes")
.Does(() =>
@@ -293,7 +306,7 @@ Task("Windows-Environment")
Task("Linux-Environment")
.IsDependentOn("Package-DotNetCore-macOS")
.IsDependentOn("Package-DotNetCore-LinuxAMD64")
.IsDependentOn("Package-DotNetCore-LinuxAMDx64")
.IsDependentOn("Package-DotNetCore-LinuxARM32")
.IsDependentOn("Package-DotNetCore-LinuxARM64")
.IsDependentOn("Appveyor-Push-Artifacts")
@@ -380,7 +393,21 @@ private void Gzip(string sourceFolder, string outputDirectory, string tarCdirect
{
RunLinuxCommand("find", MakeAbsolute(Directory(sourceFolder)) + @" -type d -exec chmod 755 {} \;");
RunLinuxCommand("find", MakeAbsolute(Directory(sourceFolder)) + @" -type f -exec chmod 644 {} \;");
//RunLinuxCommand("chmod", $"755 {MakeAbsolute(Directory(sourceFolder))} /Jackett/jackett");
RunLinuxCommand("chmod", $"755 {MakeAbsolute(Directory(sourceFolder))}/Jackett/jackett");
RunLinuxCommand("chmod", $"755 {MakeAbsolute(Directory(sourceFolder))}/Jackett/JackettUpdater");
string systemdScript = MakeAbsolute(Directory(sourceFolder)) + "/Jackett/install_service_systemd.sh";
if (FileExists(systemdScript))
{
RunLinuxCommand("chmod", $"755 {systemdScript}");
}
string macOsServiceScript = MakeAbsolute(Directory(sourceFolder)) + "/Jackett/install_service_macos";
if (FileExists(macOsServiceScript))
{
RunLinuxCommand("chmod", $"755 {macOsServiceScript}");
}
RunLinuxCommand("tar", $"-C {sourceFolder} -zcvf {outputDirectory}/{tarFileName}.gz {tarCdirectoryOption}");
}
}

View File

@@ -13,23 +13,19 @@ systemctl stop ${jackettservice}
cd "$(dirname "$0")"
# Check if we're running from Jackett's directory
if [ ! -f ./JackettConsole.exe ]; then
echo "${BOLDRED}ERROR${NC}: Couldn't locate JackettConsole.exe. Is the script in the right directory?"
if [ ! -f ./jackett ]; then
echo "${BOLDRED}ERROR${NC}: Couldn't locate jackett. Is the script in the right directory?"
exit 1
fi
jackettdir="$(pwd)"
# Check if Jackett's owner is root
jackettuser="$(stat -c "%U" ./JackettConsole.exe)"
jackettuser="$(stat -c "%U" ./jackett)"
if [ "${jackettuser}" == "root" ]; then
echo "${BOLDRED}ERROR${NC}: Jackett shouldn't run as root. Please, change the owner of the Jackett directory."
exit 1
fi
# Check if mono is installed
command -v mono >/dev/null 2>&1 || { echo >&2 "${BOLDRED}ERROR${NC}: Jackett requires Mono but it's not installed. Aborting."; exit 1; }
monodir="$(dirname $(command -v mono))"
# Check that no other service called Jackett is already running
if [[ $(systemctl status ${jackettservice} | grep "active (running)") ]]; then
echo "${BOLDRED}ERROR${NC}: Jackett already seems to be running as a service. Please stop it before running this script again."
@@ -50,7 +46,7 @@ Type=simple
User=${jackettuser}
Group=${jackettuser}
WorkingDirectory=${jackettdir}
ExecStart=${monodir}/mono --debug ${jackettdir}/JackettConsole.exe --NoRestart
ExecStart=${jackettdir}/jackett --NoRestart
TimeoutStopSec=20
[Install]

82
install_service_systemd_mono.sh Executable file
View File

@@ -0,0 +1,82 @@
#!/bin/bash
#Setting up colors
BOLDRED="$(printf '\033[1;31m')"
BOLDGREEN="$(printf '\033[1;32m')"
NC="$(printf '\033[0m')" # No Color
# Stop and unload the service if it's running
jackettservice="jackett.service"
systemctl stop ${jackettservice}
# Move working directory to Jackett's
cd "$(dirname "$0")"
# Check if we're running from Jackett's directory
if [ ! -f ./JackettConsole.exe ]; then
echo "${BOLDRED}ERROR${NC}: Couldn't locate JackettConsole.exe. Is the script in the right directory?"
exit 1
fi
jackettdir="$(pwd)"
# Check if Jackett's owner is root
jackettuser="$(stat -c "%U" ./JackettConsole.exe)"
if [ "${jackettuser}" == "root" ]; then
echo "${BOLDRED}ERROR${NC}: Jackett shouldn't run as root. Please, change the owner of the Jackett directory."
exit 1
fi
# Check if mono is installed
command -v mono >/dev/null 2>&1 || { echo >&2 "${BOLDRED}ERROR${NC}: Jackett requires Mono but it's not installed. Aborting."; exit 1; }
monodir="$(dirname $(command -v mono))"
# Check that no other service called Jackett is already running
if [[ $(systemctl status ${jackettservice} | grep "active (running)") ]]; then
echo "${BOLDRED}ERROR${NC}: Jackett already seems to be running as a service. Please stop it before running this script again."
exit 1
fi
# Write the systemd service descriptor
cat >"/etc/systemd/system/${jackettservice}" <<EOL
[Unit]
Description=Jackett Daemon
After=network.target
[Service]
SyslogIdentifier=jackett
Restart=always
RestartSec=5
Type=simple
User=${jackettuser}
Group=${jackettuser}
WorkingDirectory=${jackettdir}
ExecStart=${monodir}/mono --debug ${jackettdir}/JackettConsole.exe --NoRestart
TimeoutStopSec=20
[Install]
WantedBy=multi-user.target
EOL
# Reload systemd daemon
systemctl daemon-reload
# Enable the service for following restarts
systemctl enable ${jackettservice}
# Run the service
systemctl start ${jackettservice}
# Check that it's running
if [[ $(systemctl status ${jackettservice} | grep "active (running)") ]]; then
echo "${BOLDGREEN}Agent successfully installed and launched!${NC}"
else
cat << EOL
${BOLDRED}ERROR${NC}: Could not launch service. The installation might have failed.
Please open an issue on https://github.com/Jackett/Jackett/issues and paste following information:
Mono directory: \`${monodir}\`
Jackett directory: \`${jackettdir}\`
Jackett user: \`${jackettuser}\`
EOL
fi

View File

@@ -58,6 +58,7 @@
inputs:
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
search: "{{.Keywords}}"
searchin: "title"
incldead: 1
rows:
selector: table.table-bordered tr:has(a[href^="browse.php?cat="])
@@ -89,8 +90,19 @@
filters:
- name: replace
args: ["details.php?id=", "download.php?torrent="]
banner:
selector: a[href^="details.php?id="][onmouseover]
attribute: onmouseover
filters:
# onmouseover="Tip('<b>blahblah /><img src=\'/imdb/images/0090293.jpg\' blahblah />');"
- name: regexp
args: "/imdb/(.*?).jpg"
- name: prepend
args: "/imdb/"
- name: append
args: ".jpg"
size:
selector: td:nth-last-child(6)
selector: td:nth-last-child(4)
files:
selector: a[href^="filelist.php?id="]
grabs:
@@ -103,11 +115,11 @@
# Today<br /> 10:20 AM
# Yesterday<br /> 08:03 PM
optional: true
selector: td:nth-last-child(7):contains("day")
selector: td:nth-last-child(5):contains("day")
date:
# Feb 14 2019<br /> 10:20 AM
optional: true
selector: td:nth-last-child(7):not(:contains("day"))
selector: td:nth-last-child(5):not(:contains("day"))
filters:
- name: dateparse
args: "Jan 2 2006 03:04 pm"

View File

@@ -0,0 +1,142 @@
---
site: aftershock
name: Aftershock
description: "Aftershock is a HUNGARIAN Private Torrent Tracker for MOVIES / GENERAL"
language: hu-hu
type: private
encoding: iso-8859-1
links:
- https://aftershock-tracker.eu/
caps:
categorymappings:
- {id: 7, cat: Movies/SD, desc: "XvidEng"}
- {id: 2, cat: Movies, desc: "AfterShock Release"}
- {id: 190, cat: Movies/DVD, desc: "DVD-9Eng"}
- {id: 191, cat: Movies/DVD, desc: "DVD-9Hun"}
- {id: 1, cat: Movies/DVD, desc: "DVDEng"}
- {id: 4, cat: Movies/DVD, desc: "DVDHun"}
- {id: 23, cat: Books/Ebook, desc: "E-Book"}
- {id: 3, cat: Movies, desc: "Film Pack"}
- {id: 185, cat: Audio/Lossless, desc: "FLACeng"}
- {id: 188, cat: Audio/Lossless, desc: "FLAChu"}
- {id: 173, cat: Audio/Audiobook, desc: "Hangoskönyv"}
- {id: 34, cat: Movies/HD, desc: "HDEng"}
- {id: 33, cat: Movies/HD, desc: "HDHun"}
- {id: 182, cat: XXX/x264, desc: "HDXXX"}
- {id: 12, cat: PC/Games, desc: "JátékIso"}
- {id: 130, cat: Console, desc: "JátékKonzol"}
- {id: 38, cat: Console/PSP, desc: "JátékPS2"}
- {id: 44, cat: Console, desc: "Jatekrip"}
- {id: 131, cat: Console/Xbox, desc: "JátékX-box"}
- {id: 140, cat: Other, desc: "Képek"}
- {id: 141, cat: Other, desc: "Klipek"}
- {id: 154, cat: Other, desc: "MeseEng"}
- {id: 155, cat: Other, desc: "MeseHun"}
- {id: 176, cat: Other, desc: "Mikro HDEng"}
- {id: 174, cat: Other, desc: "Mikro HDHun"}
- {id: 37, cat: PC/Phone-Other, desc: "MobilPDA"}
- {id: 35, cat: PC, desc: "ProgramEgyéb"}
- {id: 170, cat: PC/ISO, desc: "ProgramIso"}
- {id: 24, cat: TV, desc: "Sorozat Eng"}
- {id: 25, cat: TV, desc: "Sorozat Hun"}
- {id: 167, cat: Movies/SD, desc: "Xvid CamEng"}
- {id: 166, cat: Movies/SD, desc: "Xvid CamHun"}
- {id: 9, cat: Movies/SD, desc: "XvidHun"}
- {id: 169, cat: XXX/Imageset, desc: "XXX Képek"}
- {id: 39, cat: XXX, desc: "XXXFilm"}
- {id: 28, cat: Audio, desc: "ZeneEng"}
- {id: 29, cat: Audio, desc: "ZeneHun"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
login:
path: takelogin.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: td.text:contains("Hiba")
message:
selector: td.text
test:
path: /
selector: a[href="/logout.php"]
ratio:
path: /
selector: p.sajatadatok font
filters:
- name: replace
args: [",", ""]
search:
paths:
- path: browse.php
inputs:
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
search: "{{ .Keywords }}"
incldead: 1
rows:
selector: table tbody#torrent_background tr:has(a.index)
fields:
title:
selector: a.index
attribute: href
filters:
- name: querystring
args: name
- name: urldecode
category:
selector: td a[href^="/browse.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
details:
selector: a.index
attribute: href
download:
selector: a[href^="download.php?id="]
attribute: href
filters:
- name: urldecode
banner:
selector: a[onmouseover]
attribute: onmouseover
filters:
- name: regexp
args: "src=(.*?) width="
imdb:
optional: true
selector: a[href^="https://www.imdb.com/title"]
attribute: href
files:
selector: td:nth-last-child(6)
size:
selector: td:nth-last-child(5)
seeders:
selector: td:nth-last-child(4)
leechers:
selector: td:nth-last-child(3)
grabs:
selector: td:nth-last-child(2)
date:
selector: td font
filters:
- name: re_replace
args: ["\\s", " "]
- name: dateparse
args: "2006-01-02 15:04:05"
downloadvolumefactor:
case:
span.icon_gift: "0"
"*": "1"
uploadvolumefactor:
case:
span.icon_upload: "2"
"*": "1"

View File

@@ -12,6 +12,8 @@
caps:
categorymappings:
- {id: 107, cat: XXX, desc: "Adultos: Gay"}
- {id: 108, cat: XXX, desc: "Adultos: Transex/Female"}
- {id: 74, cat: XXX, desc: "Adultos: XXX"}
- {id: 75, cat: XXX, desc: "Adultos: Hentai"}
- {id: 69, cat: TV/Anime, desc: "Anime: Anime"}
@@ -59,6 +61,8 @@
- {id: 56, cat: Console/Xbox, desc: "Jogos: Xbox"}
- {id: 55, cat: Console/Wii, desc: "Jogos: Wii"}
- {id: 58, cat: Console/NDS, desc: "Jogos: Nintendo DS"}
- {id: 111, cat: Console, desc: "Jogos: Nintendo Swich"}
- {id: 110, cat: Console, desc: "Jogos: Nintendo Switch"}
- {id: 57, cat: Console, desc: "Jogos: Android"}
- {id: 82, cat: Console/PSP, desc: "Jogos: PSP"}
- {id: 78, cat: Console/Xbox One, desc: "Jogos: Xbox One"}

View File

@@ -31,20 +31,18 @@
tv-search: [q, season, ep]
settings:
- name: cat-id
type: text
label: Category Id
- name: info
type: info
label: Category Id Note
default: "You can filter your searches by using any of the following category numbers (comma delimited):<br>1 :Anime - Sub<br>2 :Anime - Raw<br>3 :Anime - Dub<br>4 :LA - Sub<br>5 :LA - Raw<br>6 :Light Novel<br>7 :Manga - TLed<br>8 :Manga - Raw<br>9 :♫ - Lossy<br>10 :♫ - Lossless<br>11 :♫ - Video<br>12 :Games<br>13 :Applications<br>14 :Pictures<br>15 :Adult Video<br>16 :Other"
- name: lang-id
type: text
label: Language Id
label: Language ID
- name: info
type: info
label: Language ID Note
default: "You can filter your searches using any of the following language ID (comma delimited):<br>19 :Arabic<br>22 :Bengali<br>14 :Bulgarian<br>21 :Chinese (Simplified)<br>24 :Czech<br>20 :Danish<br>5 :Dutch<br>1 :English<br>11 :Finnish<br>10 :French<br>8 :German<br>13 :Greek<br>9 :Hungarian<br>27 :Indonesian<br>6 :Italian<br>2 :Japanese<br>28 :Korean<br>31 :Malaysian<br>25 :Mongolian<br>30 :Persian<br>3 :Polish<br>16 :Portuguese (Brazil)<br>17 :Portuguese (Portugal)<br>23 :Romanian<br>7 :Russian<br>4 :Serbo-Croatian<br>29 :Spanish (LATAM)<br>15 :Spanish (Spain)<br>18 :Swedish<br>26 :Turkish<br>12 :Vietnamese"
search:
paths:
- path: "?{{if .Config.cat-id}}id={{.Config.cat-id }}&{{else}}{{end}}{{if .Config.lang-id}}lang_id={{.Config.lang-id}}&{{else}}{{end}}q={{if .Keywords}}{{.Keywords}}{{else}}{{end}}"
# https://anidex.info/?page=search&id=1,2,3&lang_id=5,1,10&group_id=0&q=rinshi
- path: "?page=search&id={{if .Categories}}{{range .Categories}}{{.}},{{end}}{{else}}0{{end}}{{if .Config.lang-id}}&lang_id={{.Config.lang-id}}{{else}}{{end}}&group_id=0&q={{if .Keywords}}{{.Keywords}}{{else}}{{end}}"
rows:
selector: div.table-responsive > table > tbody > tr
fields:

View File

@@ -1,206 +0,0 @@
---
site: archetorrent
name: ArcheTorrent
description: "ArcheTorrent is a FRENCH Private Torrent Tracker"
language: fr-fr
type: private
encoding: UTF-8
links:
- https://archetorrent.com/
settings:
- name: username
type: text
label: Username
- name: password
type: password
label: Password
- name: filter_title
type: checkbox
label: Try to normalize releases names by moving year after the title
default: false
- name: multilang
type: checkbox
label: Replace MULTI by another language in release name
default: false
- name: multilanguage
type: select
label: Replace MULTI by this language
default: FRENCH
options:
FRENCH : "FRENCH"
MULTI.FRENCH: "MULTI.FRENCH"
ENGLISH: "ENGLISH"
MULTI.ENGLISH: "MULTI.ENGLISH"
VOSTFR: "VOSTFR"
MULTI.VOSTFR: "MULTI.VOSTFR"
- name: vostfr
type: checkbox
label: Replace VOSTFR with ENGLISH
default: false
caps:
categorymappings:
- {id: 18, cat: PC, desc: "Applications: PC"}
- {id: 19, cat: PC/Mac, desc: "Applications: Mac"}
- {id: 54, cat: PC, desc: "Applications: linux"}
- {id: 56, cat: XXX/Other, desc: "Autres: ebook xxx"}
- {id: 36, cat: Books, desc: "Autres: E-Books"}
- {id: 37, cat: Other, desc: "Autres: Images"}
- {id: 38, cat: PC/Phone-Other, desc: "Autres: Telephone-mobile"}
- {id: 47, cat: Movies, desc: "Films: Animé"}
- {id: 1, cat: Movies/DVD, desc: "Films: DVD"}
- {id: 2, cat: Movies/SD, desc: "Films: Dvdrip"}
- {id: 68, cat: Movies, desc: "Films: TAT Releases"}
- {id: 70, cat: Movies/HD, desc: "Films: UHD 4K"}
- {id: 69, cat: Movies, desc: "Films: Retro"}
- {id: 3, cat: Movies/HD, desc: "Films: HD1080"}
- {id: 42, cat: Movies/HD, desc: "Films: HD720"}
- {id: 4, cat: Movies, desc: "Films: Cam/Ts"}
- {id: 22, cat: Movies/BluRay, desc: "Films: bluray"}
- {id: 23, cat: Movies/3D, desc: "Films: 3D"}
- {id: 24, cat: Movies/Foreign, desc: "Films: VOSTFR"}
- {id: 25, cat: XXX, desc: "Films: Adulte"}
- {id: 48, cat: TV/Documentary, desc: "Films: Documentaire"}
- {id: 49, cat: Movies/Other, desc: "Films: Spectacle"}
- {id: 51, cat: Movies/SD, desc: "Films: R5"}
- {id: 52, cat: Movies/SD, desc: "Films: bdrip"}
- {id: 53, cat: Movies/SD, desc: "Films: brrip"}
- {id: 55, cat: Movies/DVD, desc: "Films: dvd-pack"}
- {id: 57, cat: Movies, desc: "Films: manga"}
- {id: 59, cat: Movies/WEBDL, desc: "Films: Webrip"}
- {id: 63, cat: Movies/SD, desc: "Films: M-HD"}
- {id: 10, cat: PC/Games, desc: "Jeux: PC"}
- {id: 11, cat: Console/Other, desc: "Jeux: PS2"}
- {id: 43, cat: Console/PS3, desc: "Jeux: PS3"}
- {id: 12, cat: Console/PSP, desc: "Jeux: PSP"}
- {id: 14, cat: Console/Xbox 360, desc: "Jeux: Xbox360"}
- {id: 44, cat: Console/Wii, desc: "Jeux: Wii"}
- {id: 45, cat: Console/NDS, desc: "Jeux: DS"}
- {id: 27, cat: Audio/Video, desc: "Musique: Clip Video"}
- {id: 62, cat: TV/SD, desc: "Serie tv: TV BDRip"}
- {id: 5, cat: TV/SD, desc: "Serie tv: Dvdrip"}
- {id: 41, cat: TV/HD, desc: "Serie tv: Hd"}
- {id: 60, cat: TV/SD, desc: "Serie tv: pack série tv"}
- {id: 64, cat: TV/FOREIGN, desc: "Serie tv: vostfr"}
- {id: 65, cat: TV/HD, desc: "Serie tv: Série tv 720P"}
- {id: 66, cat: TV/HD, desc: "Serie tv: Série tv 1080P"}
- {id: 67, cat: TV/HD, desc: "Serie tv: Série tv PackHD"}
- {id: 73, cat: TV/Anime, desc: "Serie tv: Anime "}
- {id: 72, cat: TV/Sport, desc: "Sport: sport"}
- {id: 61, cat: TV/SD, desc: "Tv: DVDRip"}
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: account-login.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: form:contains("Erreur")
message:
selector: form
remove: table
test:
path: torrents-search.php
search:
keywordsfilters:
- name: replace
args: ["-", " "] # remove special search character (negative search)
- name: replace
args: ["+", " "] # remove special search character (positive search)
- name: re_replace
args: ["(\\w+)", " +$1"] # prepend + to each word
paths:
- path: torrents-search.php
inputs:
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
search: "{{ .Keywords }}"
incldead: "1"
rows:
selector: table.ttable_headinner > tbody > tr[class^="t-row"]
fields:
download:
selector: a[href^="torrents-details.php?id="]
attribute: href
filters:
- name: replace
args: ["torrents-details.php", "download.php"]
date:
selector: td:nth-child(3) a
attribute: onmouseover
filters:
- name: regexp
args: "Poster le: </b>(.*?)<br />"
- name: dateparse
args: "02-01-2006"
title_normal:
selector: a[href^="torrents-details.php?id="]
filters:
- name: replace
args: [" - (Nouveau!)", ""]
title_filtered:
selector: a[href^="torrents-details.php?id="]
filters:
- name: replace
args: [" - (Nouveau!)", ""]
- name: re_replace
args: ["(?i)^(?:(.+?)((?:[\\.\\-\\s_\\[]+(?:imax|(?:dvd|bd|tv)(?:rip|scr)|bluray(?:\\-?rip)?|720\\s*p?|1080\\s*p?|vof?|vost(?:fr)?|multi|vf(?:f|q)?[1-3]?|(?:true)?french|eng?)[\\.\\-\\s_\\]]*)*)([\\(\\[]?(?:20|1[7-9])\\d{2}[\\)\\]]?)(.*)$|(.*))$", "$1 $3 $2 $4 $5"]
- name: replace
args: [".", " "]
- name: trim
- name: re_replace
args: ["(?i)\\s(mkv|avi|divx|xvid|mp4)$", ""]
- name: re_replace
args: ["(\\s{2,5})", " "]
- name: trim
title_phase1:
text: "{{if .Config.filter_title }}{{ .Result.title_filtered }}{{else}}{{ .Result.title_normal }}{{end}}"
title_multilang:
text: "{{ .Result.title_phase1 }}"
filters:
- name: re_replace
args: ["[\\.\\s\\[\\-][Mm][Uu][Ll][Tt][Ii][\\.\\s\\]\\-]", ".{{ .Config.multilanguage }}."]
title_phase2:
text: "{{if .Config.multilang }}{{ .Result.title_multilang }}{{else}}{{ .Result.title_phase1 }}{{end}}"
title_vostfr:
text: "{{ .Result.title_phase2 }}"
filters:
- name: re_replace
args: ["[\\.\\s\\[\\-][Vv][Oo][Ss][Tt][Ff][Rr][\\.\\s\\]\\-]", ".ENGLISH."]
title:
text: "{{if .Config.vostfr }}{{ .Result.title_vostfr }}{{else}}{{ .Result.title_phase2 }}{{end}}"
category:
selector: a[href^="torrents.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
details:
selector: a[href^="torrents-details.php?id="]
attribute: href
banner:
selector: img.rounded-img
attribute: src
size:
selector: td:nth-child(6)
grabs:
selector: td:nth-child(9) font b
seeders:
selector: td:nth-child(7) font b
leechers:
selector: td:nth-child(8) font b
downloadvolumefactor:
case:
img[title="freeleech"]: "0"
"*": "1"
uploadvolumefactor:
case:
"*": "1"

View File

@@ -68,6 +68,21 @@
tv-search: [q, season, ep]
movie-search: [q]
settings:
- name: username
type: text
label: Username
- name: password
type: password
label: Password
- name: downloadlink
type: select
label: Download link
default: "magnet:"
options:
"/download/" : ".torrent"
"magnet:": "magnet"
login:
path: /
method: form
@@ -85,7 +100,7 @@
selector: a[href="/users/logout/"]
download:
selector: a[href^="magnet:?"]
selector: a[href^="{{ .Config.downloadlink }}"]
search:
paths:
@@ -122,14 +137,14 @@
selector: td:nth-child(4)
date:
# 08:49:09
selector: td:nth-child(3):has(":")
selector: td:nth-child(3):contains(":")
optional: true
filters:
- name: dateparse
args: "15:04:05"
date:
# 2018-10-19
selector: td:nth-child(3):has("-")
selector: td:nth-child(3):contains("-")
optional: true
filters:
- name: dateparse

View File

@@ -48,11 +48,11 @@
selector: table > tbody > tr
fields:
category:
selector: a[href*="/categories/"]
selector: a[href*="/category/"]
attribute: href
filters:
- name: regexp
args: "/categories/.*?\\.(\\d+)"
args: "/category/.*?\\.(\\d+)"
title:
selector: a.view-torrent
download:
@@ -108,3 +108,4 @@
"i[data-original-title=\"Double upload\"]": "2" # Single Torrent Double Upload
"i[data-original-title=\"Double Upload\"]": "2" # Global Double Upload
"*": "1"
# UNIT3D

View File

@@ -11,61 +11,64 @@
caps:
categorymappings:
- {id: Children, cat: Audio/Audiobook, desc: "Children"}
- {id: Teen, cat: Audio/Audiobook, desc: "Teen & Young Adult"}
- {id: Adults, cat: Audio/Audiobook, desc: "Adults"}
- {id: The, cat: Audio/Audiobook, desc: "The Undead"}
- {id: "(Post)apocalyptic", cat: Audio/Audiobook, desc: "(Post)apocalyptic"}
- {id: "True", cat: Audio/Audiobook, desc: "True Crime"}
- {id: Action, cat: Audio/Audiobook, desc: "Action"}
- {id: Adults, cat: Audio/Audiobook, desc: "Adults"}
- {id: Adventure, cat: Audio/Audiobook, desc: "Adventure"}
- {id: Anthology, cat: Audio/Audiobook, desc: "Anthology"}
- {id: Art, cat: Audio/Audiobook, desc: "Art"}
- {id: Autobiography, cat: Audio/Audiobook, desc: "Autobiography & Biographies"}
- {id: Bestsellers, cat: Audio/Audiobook, desc: "Bestsellers"}
- {id: Business, cat: Audio/Audiobook, desc: "Business"}
- {id: Children, cat: Audio/Audiobook, desc: "Children"}
- {id: Classic, cat: Audio/Audiobook, desc: "Classic"}
- {id: Computer, cat: Audio/Audiobook, desc: "Computer"}
- {id: Contemporary, cat: Audio/Audiobook, desc: "Contemporary"}
- {id: Crime, cat: Audio/Audiobook, desc: "Crime"}
- {id: Detective, cat: Audio/Audiobook, desc: "Detective"}
- {id: Doctor, cat: Audio/Audiobook, desc: "Doctor Who"}
- {id: Documentary, cat: Audio/Audiobook, desc: "Documentary"}
- {id: Education, cat: Audio/Audiobook, desc: "Education"}
- {id: Fantasy, cat: Audio/Audiobook, desc: "Fantasy"}
- {id: Full, cat: Audio/Audiobook, desc: "Full Cast"}
- {id: Gay, cat: Audio/Audiobook, desc: "Gay"}
- {id: General, cat: Audio/Audiobook, desc: "General Fiction"}
- {id: Historical, cat: Audio/Audiobook, desc: "Historical Fiction"}
- {id: History, cat: Audio/Audiobook, desc: "History"}
- {id: Horror, cat: Audio/Audiobook, desc: "Horror"}
- {id: Humor, cat: Audio/Audiobook, desc: "Humor"}
- {id: Lecture, cat: Audio/Audiobook, desc: "Lecture"}
- {id: LGBT, cat: Audio/Audiobook, desc: "LGBT"}
- {id: Literature, cat: Audio/Audiobook, desc: "Literature"}
- {id: Lecture, cat: Audio/Audiobook, desc: "Lecture"}
- {id: Lesbian, cat: Audio/Audiobook, desc: "Lesbian"}
- {id: Libertarian, cat: Audio/Audiobook, desc: "Libertarian"}
- {id: LitRPG, cat: Audio/Audiobook, desc: "LitRPG"}
- {id: Literature, cat: Audio/Audiobook, desc: "Literature"}
- {id: Military, cat: Audio/Audiobook, desc: "Military"}
- {id: Misc., cat: Audio/Audiobook, desc: "Misc. Non-fiction"}
- {id: Mystery, cat: Audio/Audiobook, desc: "Mystery"}
- {id: Myth, cat: Audio/Audiobook, desc: "Myth Hunting"}
- {id: Novel, cat: Audio/Audiobook, desc: "Novel"}
- {id: Other, cat: Audio/Audiobook, desc: "Other"}
- {id: Paranormal, cat: Audio/Audiobook, desc: "Paranormal"}
- {id: Plays, cat: Audio/Audiobook, desc: "Plays & Theater"}
- {id: Poetry, cat: Audio/Audiobook, desc: "Poetry"}
- {id: Political, cat: Audio/Audiobook, desc: "Political"}
- {id: Postapocalyptic, cat: Audio/Audiobook, desc: "Postapocalyptic"}
- {id: Radio, cat: Audio/Audiobook, desc: "Radio Productions"}
- {id: Romance, cat: Audio/Audiobook, desc: "Romance"}
- {id: Sci-Fi, cat: Audio/Audiobook, desc: "Sci-Fi"}
- {id: Science, cat: Audio/Audiobook, desc: "Science"}
- {id: Self-help, cat: Audio/Audiobook, desc: "Self-help"}
- {id: SHTF, cat: Audio/Audiobook, desc: "SHTF"}
- {id: Sex, cat: Audio/Audiobook, desc: "Sex Scenes"}
- {id: Short, cat: Audio/Audiobook, desc: "Short Story"}
- {id: Spiritual, cat: Audio/Audiobook, desc: "Spiritual & Religious"}
- {id: Sports, cat: Audio/Audiobook, desc: "Sports"}
- {id: Suspense, cat: Audio/Audiobook, desc: "Suspense"}
- {id: Teen, cat: Audio/Audiobook, desc: "Teen & Young Adult"}
- {id: The, cat: Audio/Audiobook, desc: "The Undead"}
- {id: Thriller, cat: Audio/Audiobook, desc: "Thriller"}
- {id: "True", cat: Audio/Audiobook, desc: "True Crime"}
- {id: Tutorial, cat: Audio/Audiobook, desc: "Tutorial"}
- {id: Violence, cat: Audio/Audiobook, desc: "Violence"}
- {id: Westerns, cat: Audio/Audiobook, desc: "Westerns"}
- {id: Anthology, cat: Audio/Audiobook, desc: "Anthology"}
- {id: Bestsellers, cat: Audio/Audiobook, desc: "Bestsellers"}
- {id: Classic, cat: Audio/Audiobook, desc: "Classic"}
- {id: Documentary, cat: Audio/Audiobook, desc: "Documentary"}
- {id: Full, cat: Audio/Audiobook, desc: "Full Cast"}
- {id: Libertarian, cat: Audio/Audiobook, desc: "Libertarian"}
- {id: Military, cat: Audio/Audiobook, desc: "Military"}
- {id: Novel, cat: Audio/Audiobook, desc: "Novel"}
- {id: Short, cat: Audio/Audiobook, desc: "Short Story"}
modes:
search: [q]
@@ -130,3 +133,11 @@
filters:
- name: regexp
args: "File Size: (.+?)s"
seeders:
text: 1
leechers:
text: 1
downloadvolumefactor:
text: 0
uploadvolumefactor:
text: 1

View File

@@ -43,8 +43,6 @@
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
login:
path: takelogin.php

View File

@@ -14,7 +14,9 @@
- {id: 2, cat: TV/HD, desc: "TV-Shows"}
modes:
searchstr: [q]
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
settings:
- name: cookie

View File

@@ -49,7 +49,7 @@
sent: "yes"
returnto: "/"
error:
- selector: table:contains("Login failed!")
- selector: div.error
test:
path: index.php
@@ -61,7 +61,7 @@
- path: browse.php
inputs:
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
search: "{{ .Query.Keywords }}"
search: "{{if .Keywords}}{{ .Keywords }}{{else}} {{end}}"
rows:
selector: table#torrent_table > tbody > tr:has(a[href^="browse.php?cat="])
fields:

View File

@@ -0,0 +1,172 @@
---
site: bit-titan
name: BiT-TiTAN
description: "BiT-TiTAN is a GERMAN Private Torrent Tracker for MOVIES / TV / GENERAL"
language: de-de
type: private
encoding: iso-8859-1
links:
- https://bit-titan.net/
caps:
categorymappings:
- {id: 1, cat: TV/Documentary, desc: "Doku HD"}
- {id: 2, cat: TV/Documentary, desc: "Doku Packs"}
- {id: 3, cat: TV/Documentary, desc: "Doku SD"}
- {id: 4, cat: Movies/FOREIGN, desc: "International"}
- {id: 5, cat: Movies/HD, desc: "Movies 1080p"}
- {id: 6, cat: Movies/3D, desc: "Movies 3D"}
- {id: 7, cat: Movies/HD, desc: "Movies 720p"}
- {id: 36, cat: Movies/BluRay, desc: "Movies BluRay"}
- {id: 8, cat: Movies/DVD, desc: "Movies DVD / HDVD"}
- {id: 37, cat: Movies/HD, desc: "Movies HD Pack"}
- {id: 9, cat: Movies/SD, desc: "Movies SD"}
- {id: 38, cat: Movies/SD, desc: "Movies SD Pack"}
- {id: 10, cat: Movies/UHD, desc: "Movies UHD"}
- {id: 11, cat: TV/HD, desc: "Serien HD"}
- {id: 12, cat: TV/OTHER, desc: "Serien Packs"}
- {id: 13, cat: TV/SD, desc: "Serien SD"}
- {id: 14, cat: TV/Sport, desc: "Sport"}
- {id: 15, cat: XXX/x264, desc: "XXX HD"}
- {id: 16, cat: XXX/XviD, desc: "XXX SD"}
- {id: 17, cat: Audio/Lossless, desc: "Musik FLAC"}
- {id: 18, cat: Audio/MP3, desc: "Musik MP3"}
- {id: 19, cat: Audio/Other, desc: "Musik Sonstiges"}
- {id: 20, cat: Audio/Video, desc: "Musik Videos"}
- {id: 23, cat: Console, desc: "Spiele Handy"}
- {id: 24, cat: Console, desc: "Spiele Linux"}
- {id: 21, cat: Console/NDS, desc: "Spiele Nintendo"}
- {id: 22, cat: Console/PSP, desc: "Spiele PlayStation"}
- {id: 25, cat: Console, desc: "Spiele Sonstige"}
- {id: 40, cat: Console, desc: "Spiele Wimmelbild"}
- {id: 26, cat: PC/Games, desc: "Spiele Windows"}
- {id: 27, cat: Console, desc: "XBOX 360/ONE"}
- {id: 28, cat: PC, desc: "Software Handy"}
- {id: 29, cat: PC, desc: "Software Linux"}
- {id: 30, cat: PC/Mac, desc: "Software Mac Os"}
- {id: 31, cat: PC, desc: "Software Sonstige"}
- {id: 32, cat: PC/0day, desc: "Software Windows"}
- {id: 33, cat: TV/Anime, desc: "Anime"}
- {id: 39, cat: Books/Ebook, desc: "eBook"}
- {id: 34, cat: Audio/Audiobook, desc: "Hörbücher/ -spiele"}
- {id: 35, cat: XXX/Other, desc: "XXX Sonstiges"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
settings:
- name: username
type: text
label: Username
- name: password
type: password
label: Password
login:
path: login.php
method: form
form: form[action="takelogin.php"]
cookies: ["JAVA=OK"] # avoid jscheck redirect
captcha:
type: image
selector: img[src^="cap/captcha_math.php"]
input: stringCaptcha
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: div#login_error
test:
path: browse.php
selector: a[href="logout.php"]
ratio:
path: browse.php
selector: div#tom-b-t8
filters:
- name: replace
args: [".", ""]
- name: replace
args: [",", "."]
search:
paths:
- path: browse.php
inputs:
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
search: "{{ .Keywords }}"
# seachin 0=name 1=descr 2=both
blah: 0
# include dead 0=active 1=all 2=dead
incldead: 1
orderby: "added"
sort: "desc"
showsearch: 0
rows:
selector: table.tableinborder[border="0"][cellspacing="0"][cellpadding="0"] tr
fields:
category:
selector: td.tableb a
attribute: href
filters:
- name: querystring
args: cat
title:
selector: div a.tor-name
details:
selector: div a.tor-name
attribute: href
download:
selector: div a.tor-name
attribute: href
filters:
- name: replace
args: ["details.php?id=", "download.php?torrent="]
banner:
selector: div[id^="details-"] img
attribute: src
seeders:
selector: div.tor-sl b
leechers:
selector: div.tor-sl b:last-of-type
# 2 flavours of dates
date:
# Heute 13:30:04
# Gestern 09:10:10
selector: div.tor-date:not(:contains("."))
optional: true
filters:
- name: replace
args: ["Heute", "Today"]
- name: replace
args: ["Gestern", "Yesterday"]
date:
# 30.02.2018&nbsp;23:12:50
selector: div.tor-date:contains(".")
optional: true
filters:
- name: replace
args: ["\u00a0", " "]
- name: dateparse
args: "02.01.2006 15:04:05"
size:
selector: div.tor-size
filters:
- name: replace
args: [".", ""]
- name: replace
args: [",", "."]
grabs:
selector: div.tor-take
filters:
- name: regexp
args: "(\\d+)"
downloadvolumefactor:
case:
img[src="pic/ou_new.png"]: "0"
"*": "1"
uploadvolumefactor:
case:
"*": "1"

View File

@@ -64,14 +64,18 @@
size:
selector: td:nth-child(5)
seeders:
selector: td:nth-child(7)
leechers:
selector: td:nth-child(8)
grabs:
selector: td:nth-child(6)
leechers:
selector: td:nth-child(7)
grabs:
selector: td:nth-child(8)
filters:
- name: regexp
args: ([\d\.]+)
imdb:
optional: true
selector: a[href^="https://www.imdb.com/title/"]
attribute: href
date:
selector: time
filters:
@@ -100,11 +104,17 @@
args: [" (ay|kuud|måneder|mesi|miesiące|meses|měsíce|месяца|месяцев|luni|meses|mois|Monaten|месеца|maanden)", "months"]
downloadvolumefactor:
case:
"i[data-original-title=\"100% Free\"]": "0" # Single Torrent Freeleech
"i[data-original-title=\"Personal Freeleech\"]": "0" # 24 Hour FreeLeech From BON Store
"i[data-original-title=\"Special Freeleech\"]": "0" # Special FreeLeech For Certain User Groups
"i[data-original-title=\"Freeleech Token\"]": "0" # Freeleech From Token
"i[data-original-title=\"Global FreeLeech\"]": "0" # Global Freeleech
"i[data-original-title=\"Freeleech\"]": "0" # Freeleech
"i[data-original-title=\"Featured\"]": "0" # Featured Torrent
"*": "1"
uploadvolumefactor:
case:
"i[data-original-title=\"Double upload\"]": "2" # Single Torrent Double Upload
"i[data-original-title=\"Double Upload\"]": "2" # Global Double Upload
"i[data-original-title=\"Double Upload\"]": "2" # Single Torrent Double Upload
"i[data-original-title=\"Global Double Upload\"]": "2" # Global Double Upload
"i[data-original-title=\"Featured\"]": "2" # Featured Torrent
"*": "1"
# UNIT3D

View File

@@ -0,0 +1,64 @@
---
site: btdb
name: BTDB
description: "BTDB is a Public BitTorrent DHT search engine."
language: en-us
type: public
encoding: UTF-8
links:
- https://btdb.eu/
legacylinks:
- https://btdb.to/
- https://btdb.unblocked.app/
caps:
categorymappings:
- {id: 1, cat: Other, desc: "Other"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
settings:
- name: info
type: info
label: Category for Sonarr and Radarr
default: BTDB does not use categories. In your Sonarr or Radarr Torznab Indexer settings, set the category to 100001.
search:
paths:
- path: "{{if .Keywords}}?search={{ .Keywords}}&sort=time{{else}}recent{{end}}"
- path: "{{if .Keywords}}?search={{ .Keywords}}&sort=time&page=2{{else}}{{end}}"
- path: "{{if .Keywords}}?search={{ .Keywords}}&sort=time&page=3{{else}}{{end}}"
- path: "{{if .Keywords}}?search={{ .Keywords}}&sort=time&page=4{{else}}{{end}}"
rows:
selector: li[class$="item"]
fields:
title:
selector: h2[class$="title"] a[href*="/torrent/"]
attribute: title
category:
text: "1"
details:
selector: h2[class$="title"] a[href*="/torrent/"]
attribute: href
magnet:
selector: div[class$="info"] a[href^="magnet:?xt="]
attribute: href
size:
selector: div[class$="info"] span:nth-of-type(1)
files:
selector: div[class$="info"] span:nth-of-type(2)
date:
selector: div[class$="info"] span:nth-of-type(3)
grabs:
selector: div[class$="info"] span:nth-of-type(4)
seeders:
text: 1
leechers:
text: 1
downloadvolumefactor:
text: "0"
uploadvolumefactor:
text: "1"

View File

@@ -0,0 +1,80 @@
---
site: btdigg
name: BTDigg
description: "BTDigg is a Public BitTorrent DHT search engine."
language: en-us
type: public
encoding: UTF-8
links:
- https://btdig.com/
caps:
categories:
1: Other
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
settings:
- name: info
type: info
default: BTDigg does not use categories. In your software Indexer settings, set the category to 100001.
search:
# https://btdig.com/search?q=test&order=2
# only 10 results per page
# https://btdig.com/search?q=test&p=1&order=2
paths:
- path: search
- path: search
inputs:
p: 1
- path: search
inputs:
p: 2
- path: search
inputs:
p: 3
- path: search
inputs:
p: 4
inputs:
q: "{{if .Keywords }}{{.Keywords}}{{else}}test{{end}}"
order: 2
rows:
selector: div.one_result
filters:
- name: andmatch
fields:
title:
selector: div.torrent_name a
category:
text: 1
details:
selector: div.torrent_name a
attribute: href
download:
selector: a[href^="magnet:?xt="]
attribute: href
date:
selector: span.torrent_age
filters:
- name: replace
args: ["found ", ""]
files:
text: 1
files:
selector: span.torrent_files
optional: true
size:
selector: span.torrent_size
seeders:
text: 1
leechers:
text: 1
downloadvolumefactor:
text: "0"
uploadvolumefactor:
text: "1"

View File

@@ -5,8 +5,9 @@
language: en-us
type: public
encoding: UTF-8
followredirect: true
links:
- http://cnbtkitty.ws/
- http://btkitty.pet/
legacylinks:
- https://cnbtkitty.org/
- http://cnbtkitty.org/
@@ -14,6 +15,7 @@
- http://cnbtkitty.com/
- https://cnbtkitty.me/
- http://cnbtkitty.me/
- http://cnbtkitty.ws/
caps:
categorymappings:

View File

@@ -1,78 +0,0 @@
---
site: btstornet
name: BTstor.net
description: "BTstor.net is a Public BT-Scene clone for MOVIES / TV / GENERAL"
language: us-en
type: public
encoding: UTF-8
links:
- https://btstor.net/
caps:
categories:
"anime": TV/Anime
"books": Books
"games": PC/Games
"movies": Movies
"music": Audio
"other": Other
"shows": TV
"software": PC
"video": Movies
"xxx": XXX
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
settings: []
download:
selector: "#dlt_"
search:
# https://btstor.net/
# https://btstor.net/q/midnight+texas+s01e10/date/
keywordsfilters:
# replace space between keywords with +
- name: re_replace
args: [" ", "+"]
paths:
- path: "q/{{ if .Keywords }}{{ .Keywords }}{{else}}test{{end}}/date/"
rows:
selector: table.tor > tbody > tr[class$="_tr"]
filters:
- name: andmatch
fields:
title:
selector: td.tname_index > a
details:
selector: td.tname_index > a
attribute: href
category:
# src="https://btstor.net/templates/btscene/images/shows.png"
selector: td.tname_index > img
attribute: src
filters:
- name: replace
args: [".png", ""]
- name: split
args: ["/", 6]
download:
selector: td.tname_index > a
attribute: href
size:
selector: td.tsize_index
seeders:
selector: td.tseeds_index
leechers:
selector: td.tpeers_index
date:
selector: td.tupd_index
filters:
- name: timeago
downloadvolumefactor:
text: "0"
uploadvolumefactor:
text: "1"

View File

@@ -40,9 +40,9 @@
- {id: 45, cat: TV/Documentary, desc: "Documentaries"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
search: [q, imdbid]
tv-search: [q, season, ep, imdbid]
movie-search: [q, imdbid]
login:
path: index.php?page=login
@@ -63,9 +63,10 @@
- path: index.php
inputs:
page: torrents
search: "{{ if .Keywords }}{{ .Keywords }}{{else}}{{end}}"
search: "{{if .Query.IMDBID}}{{.Query.IMDBID}}{{else}}{{.Keywords}}{{end}}"
category: "{{if .Categories}}{{range .Categories}}{{.}};{{end}}{{else}}0{{end}}"
options: 0
# options: 0=title, 1=title&descr, 2=descr
options: "{{if .Query.IMDBID}}1{{else}}0{{end}}"
active: 0
rows:

View File

@@ -0,0 +1,141 @@
---
site: casatorrent
name: Casa-Torrent
description: "Casa-Torrent is a FRENCH Private Torrent Tracker for MOVIES / TV / GENERAL"
language: fr-fr
type: private
encoding: UTF-8
links:
- https://teamctgame.co/
caps:
categorymappings:
- {id: 65, cat: Movies/HD, desc: "BD: BD"}
- {id: 68, cat: Books/Magazines, desc: "Ebooks: Presse"}
- {id: 56, cat: Books/Ebook, desc: "Ebooks: Ebooks"}
- {id: 90, cat: Audio/Audiobook, desc: "Ebooks: Audio books"}
- {id: 84, cat: XXX, desc: "Ebooks: XXX"}
- {id: 95, cat: Books/Comics, desc: "Ebooks: Mangas"}
- {id: 53, cat: Movies/HD, desc: "Films: 4K"}
- {id: 50, cat: Movies/UHD, desc: "Films: 4K-Remux"}
- {id: 72, cat: Movies/HD, desc: "Films: x265"}
- {id: 54, cat: Movies/3D, desc: "Films: 3D"}
- {id: 71, cat: Movies/BluRay, desc: "Films: Full Bluray"}
- {id: 96, cat: Movies, desc: "Films: Remux"}
- {id: 78, cat: Movies/DVD, desc: "Films: DVD-R"}
- {id: 52, cat: Movies/HD, desc: "Films: HD.1080p"}
- {id: 51, cat: Movies/HD, desc: "Films: HD.720p"}
- {id: 87, cat: Movies/HD, desc: "Films: HDRiP"}
- {id: 60, cat: Movies, desc: "Films: Pack"}
- {id: 47, cat: Movies/DVD, desc: "Films: DVDRip"}
- {id: 48, cat: Movies/BluRay, desc: "Films: BDRip / BRRip"}
- {id: 80, cat: Movies/HD, desc: "Films: HDLiGHT / M-HD"}
- {id: 63, cat: Movies/HD, desc: "Films: HD TV"}
- {id: 58, cat: Movies/WEBDL, desc: "Films: Web - DL"}
- {id: 75, cat: TV, desc: "Films: TVRiP"}
- {id: 61, cat: Movies, desc: "Films: Animation"}
- {id: 82, cat: TV/Anime, desc: "Films: Mangas"}
- {id: 55, cat: Movies, desc: "Films: VOSTFR"}
- {id: 89, cat: Movies, desc: "Films: VO"}
- {id: 57, cat: Movies/WEBDL, desc: "Films: WebRip"}
- {id: 98, cat: Movies, desc: "Films: VFSTFR"}
- {id: 1, cat: XXX, desc: "Films: XXX"}
- {id: 66, cat: PC/Games, desc: "Jeux: PC"}
- {id: 97, cat: Console/PSP, desc: "Jeux : Jeux PS"}
- {id: 81, cat: Console/Xbox, desc: "Jeux : XboX"}
- {id: 62, cat: PC/0day, desc: "Logiciels: Windows"}
- {id: 99, cat: Other, desc: "Logiciels: Graph / Wallpaper"}
- {id: 77, cat: PC/Phone-Android, desc: "Logiciels: Android"}
- {id: 94, cat: PC/Mac, desc: "Logiciels: MAC"}
- {id: 93, cat: TV/Anime, desc: "Mangas: Animés"}
- {id: 86, cat: TV/HD, desc: "Series: Episode HD"}
- {id: 85, cat: TV/SD, desc: "Series: Episode SD"}
- {id: 59, cat: TV/SD, desc: "Series: Tv - Pack SD"}
- {id: 100, cat: TV/HD, desc: "Series: Tv - Pack HD"}
- {id: 101, cat: TV/HD, desc: "Series: Episode HD Vostfr"}
- {id: 102, cat: TV/SD, desc: "Series: Episode SD Vostfr"}
- {id: 103, cat: TV/HD, desc: "Series: Tv - Pack HD Vostfr"}
- {id: 104, cat: TV/SD, desc: "Series: Tv - Pack SD Vostfr"}
- {id: 88, cat: TV, desc: "Spectacles: Tous"}
- {id: 73, cat: TV/Documentary, desc: "TV: Documentaires"}
- {id: 83, cat: TV, desc: "TV: Emissions"}
- {id: 74, cat: TV/Sport, desc: "TV: Sports"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
login:
path: account-login.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: p#msgError
test:
path: torrents-search.php
selector: a[href="account-logout.php"]
ratio:
path: torrents-search.php
selector: div#infobar b
search:
paths:
- path: torrents-search.php
inputs:
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
search: "{{ .Keywords }}"
incldead: 1
freeleech: 0
lang: 0
rows:
selector: table.ttable_headinner > tbody > tr.t-row
fields:
title:
selector: a[href^="torrents-details.php?id="] b
category:
selector: a[href^="torrents.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
details:
selector: a[href^="torrents-details.php?id="]
attribute: href
download:
selector: a[href^="download.php?id="]
attribute: href
banner:
selector: img[src*="/uploads/images/"]
attribute: src
grabs:
selector: a[onmouseover][href^="torrents-details.php?id="]
attribute: onmouseover
filters:
- name: regexp
args: "Snatched: </b>(\\d+)<br"
size:
selector: td:nth-last-child(5)
seeders:
selector: td:nth-last-child(4)
leechers:
selector: td:nth-last-child(3)
date:
selector: a[onmouseover][href^="torrents-details.php?id="]
attribute: onmouseover
filters:
- name: regexp
args: "le: </b>(.*?)<br"
- name: dateparse
args: "02-01-2006"
downloadvolumefactor:
case:
img[src="images/free.gif"]: "0"
"*": "1"
uploadvolumefactor:
case:
"*": "1"

View File

@@ -0,0 +1,141 @@
---
site: Channelx
name: ChannelX
description: "ChannelX is a Private Torrent Tracker for High Quality Optimized HD MOVIES / TV"
language: en-us
type: private
encoding: UTF-8
links:
- https://channelx.online/
caps:
categorymappings:
- {id: 1, cat: Movies, desc: "Movies"}
- {id: 2, cat: TV, desc: "TV"}
- {id: 3, cat: Audio, desc: "Audiotracks"}
- {id: 4, cat: TV/Sport, desc: "Sports"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid]
movie-search: [q, imdbid]
login:
path: login
method: form
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
remember: 1
error:
- selector: form[action*="/login"] .text-red
test:
path: torrents
selector: a[href$="/logout"]
ratio:
path: torrents
selector: li:has(i.fa-sync-alt)
filters:
- name: regexp
args: "Ratio : (\\d+)"
download:
selector: a[href*="/download/"]
search:
paths:
- path: filterTorrents
inputs:
$raw: "{{range .Categories}}categories[]={{.}}&{{end}}"
search: "{{if .Query.IMDBID}}{{else}}{{ .Keywords }}{{end}}"
description: ""
uploader: ""
imdb: "{{ .Query.IMDBIDShort }}"
tvdb: ""
tmdb: ""
mal: ""
sort: created_at
direction: desc
qty: 100
rows:
selector: table > tbody > tr
fields:
category:
selector: a[href*="/categories/"]
attribute: href
filters:
- name: regexp
args: "/categories/.*?\\.(\\d+)"
title:
selector: a.view-torrent
download:
selector: a[href*="/download_check/"]
attribute: href
details:
selector: a.view-torrent
attribute: href
banner:
optional: true
selector: div.torrent-poster img
attribute: src
filters:
- name: replace
args: ["https://via.placeholder.com/600x900", ""]
size:
selector: td:nth-child(5)
grabs:
selector: td:nth-child(6)
filters:
- name: regexp
args: ([\d\.]+)
seeders:
selector: td:nth-child(7)
leechers:
selector: td:nth-child(8)
imdb:
optional: true
selector: a[href*="www.imdb.com/title/tt"]
attribute: href
date:
selector: time
filters:
# translations for Turkish|Estonian|Danish|Italian|Polish|Norwegian|Portoguese|Czech|Russian|Romanian|Spanish|French|German|Bulgarian|Dutch
- name: re_replace
args: ["(önce|tagasi|geleden|fa|temu|siden|atrás|nazpět|назад|acum|hace|il y a|vor|преди)", "ago"]
- name: re_replace
args: ["(dakika|minut|minuto|minuta|minutt|минута|Minute|minuut)", "minute"]
- name: re_replace
args: ["(dakika|minutit|minutter|minuti|minuty|minutos|минуты|минут|Minuten|минути|minuten)", "minutes"]
- name: re_replace
args: ["(saat|tund|time|ora|godzina|hora|hodina|час|oră|heure|Stunde|uur)", "hour"]
- name: re_replace
args: ["(saat|tundi|timer|ore|godziny|horas|hodiny|hoden|часа|часов|ore|heures|Stunden)", "hours"]
- name: re_replace
args: ["(gün|päev|dag|giorno|dzień|dia|den|день|zi|día|jour|Tag|ден)", "day"]
- name: re_replace
args: ["(gün|päeva|dage|giorni|dni|dias|dny|дня|дней|zile|días|jours|Tagen|дни|dagen)", "days"]
- name: re_replace
args: ["(hafta|nädal|uge|settimana|tydzień|uke|semana|týden|неделю|săptămână|semaine|Woche|седмица)", "week"]
- name: re_replace
args: ["(hafta|nädalat|uger|settimane|tygodnie|uker|semanas|týdny|недели|недель|săptămâni|semaines|Wochen|седмици|weken)", "weeks"]
- name: re_replace
args: [" (ay|kuu|måned|mese|miesiąc|mês|měsíc|месяц|lună|mes|mois|Monat|месец|maand)", "month"]
- name: re_replace
args: [" (ay|kuud|måneder|mesi|miesiące|meses|měsíce|месяца|месяцев|luni|meses|mois|Monaten|месеца|maanden)", "months"]
downloadvolumefactor:
case:
"i[data-original-title=\"Personal Freeleech\"]": "0" # 24 Hour FreeLeech From BON Store
"i[data-original-title=\"Special Freeleech\"]": "0" # Special FreeLeech For Certain User Groups
"i[data-original-title=\"Freeleech Token\"]": "0" # Freeleech From Token
"i[data-original-title=\"Global FreeLeech\"]": "0" # Global Freeleech
"i[data-original-title=\"Freeleech\"]": "0" # Freeleech
"i[data-original-title=\"Featured\"]": "0" # Featured Torrent
"*": "1"
uploadvolumefactor:
case:
"i[data-original-title=\"Double Upload\"]": "2" # Single Torrent Double Upload
"i[data-original-title=\"Global Double Upload\"]": "2" # Global Double Upload
"i[data-original-title=\"Featured\"]": "2" # Featured Torrent
"*": "1"
# UNIT3D 1.9.1

View File

@@ -0,0 +1,142 @@
---
site: cinefilhd
name: CiNEFiLHD
description: "CiNEFiLHD is a Private Torrent Tracker for MOVIES / TV / MUSIC"
language: en-us
type: private
encoding: UTF-8
links:
- http://www.cinefilhd.org/
caps:
categorymappings:
- {id: 37, cat: Movies/HD, desc: " Internal/HD-1080p"}
- {id: 17, cat: Movies/HD, desc: " Internal/HD-720p"}
- {id: 30, cat: TV/HD, desc: " Internal/HDTV"}
- {id: 15, cat: Movies/HD, desc: " Internal/mHD"}
- {id: 40, cat: Movies, desc: " Internal/Mp4"}
- {id: 26, cat: Movies, desc: " Internal/Remux"}
- {id: 45, cat: Movies/WEBDL, desc: " Internal/WEB-DL"}
- {id: 25, cat: Movies/3D, desc: " Movies/3D-Ou"}
- {id: 16, cat: Movies/3D, desc: " Movies/3D-SbS"}
- {id: 5, cat: Movies/BluRay, desc: " Movies/BluRay"}
- {id: 38, cat: Movies/HD, desc: " Movies/HD-1080p"}
- {id: 10, cat: Movies/HD, desc: " Movies/HD-720p"}
- {id: 29, cat: Movies/HD, desc: " Movies/mHD"}
- {id: 41, cat: Movies, desc: " Movies/Mp4"}
- {id: 39, cat: Movies, desc: " Movies/Remux"}
- {id: 44, cat: Movies/WEBDL, desc: " Movies/WEB-DL"}
- {id: 23, cat: Audio/Lossless, desc: " Lossless"}
- {id: 14, cat: Audio/MP3, desc: " MP3-Packs"}
- {id: 22, cat: Audio/MP3, desc: " Music-MP3"}
- {id: 43, cat: Audio/Video, desc: " Music/1080p"}
- {id: 42, cat: Audio/Video, desc: " Music/720p"}
- {id: 12, cat: TV/HD, desc: " HDTV-Packs"}
- {id: 21, cat: TV/HD, desc: " Movies/HDTV"}
modes:
search: [q, imdbid]
tv-search: [q, season, ep, imdbid]
movie-search: [q, imdbid]
login:
path: takelogin.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
submitme: "LOGIN"
returnto: /
error:
- selector: h2:contains("failed")
message:
selector: td.colhead2
test:
path: browse.php
selector: :has(a[href^="logout.php?hash_please="])
ratio:
path: browse.php
selector: div div font:contains("Ratio:")
filters:
- name: regexp
args: "Ratio:\\s(.*?)\\s"
search:
paths:
- path: browse.php
inputs:
$raw: "{{range .Categories}}cat{{.}}=1&{{end}}"
search: "{{if .Query.IMDBID}}{{ .Query.IMDBID }}{{else}}{{ .Keywords }}{{end}}"
# title descr genre all
searchin: "{{ if .Query.IMDBID }}descr{{else}}title{{end}}"
# 0=active 1=incl dead 2=only dead
incldead: 1
# 0=no 1=yes
only_free: 0
rows:
selector: table.mainouter table > tbody > tr:has(a[href^="details.php?id="]), table.mainouter table > tbody > tr[id^="kdescr"]
after: 1
fields:
title:
selector: a[href^="details.php?id="]
details:
selector: a[href^="details.php?id="]
attribute: href
category:
selector: a[href^="browse.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
download:
selector: a[href^="details.php?id="]
attribute: href
filters:
- name: replace
args: ["details.php?id=", "download.php?torrent="]
banner:
selector: a[href^="details.php?id="][onmouseover]
attribute: onmouseover
filters:
# onmouseover="Tip('<img class=\'pup\' src=\'https://image.tmdb.org/t/p/original/x96AdPlpl4MjUP2DeUhRJifhCMd.jpg\' width=
- name: regexp
args: src=\\'(.*?)\\'
imdb:
optional: true
selector: a[href*="www.imdb.com/title/tt"]
files:
selector: td:nth-child(4)
# 2 flavours of dates
date:
# Today<br /> 10:20 AM
# Yesterday<br /> 08:03 PM
optional: true
selector: td:nth-child(6):contains("day")
date:
# Feb 14 2019<br /> 10:20 AM
optional: true
selector: td:nth-child(6):not(:contains("day"))
filters:
- name: dateparse
args: "Jan 2 2006 03:04 pm"
size:
selector: td:nth-child(7)
grabs:
selector: td:nth-child(8)
filters:
- name: regexp
args: ([\d,]+)
seeders:
selector: td:nth-child(9)
leechers:
selector: td:nth-child(10)
downloadvolumefactor:
case:
tr.freeleech_color: "0"
tr.highlight: "0"
"*": "1"
uploadvolumefactor:
case:
"*": "1"
# U-232 v3

View File

@@ -34,7 +34,7 @@
- path: torrents-search.php
inputs:
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
search: "{{ .Query.Keywords }}"
search: "{{if .Keywords}}\"{{.Keywords}}\"{{else}}{{end}}"
rows:
selector: table > tbody > tr:has(a[href^="torrents.php?cat="])
fields:

View File

@@ -7,7 +7,7 @@
encoding: UTF-8
followredirect: true
links:
- https://www.cpasbiens.bz/
- https://www.cpasbien.vg/
legacylinks:
- http://www.cpasbiens.cc/
- http://www.cpabien.cm/
@@ -34,6 +34,7 @@
- https://www.cpabien.bz/
- https://www.cpabien.link/
- https://www.cpasbiens.cz/
- https://www.cpasbiens.bz/
caps:
categorymappings:

View File

@@ -9,13 +9,12 @@
caps:
categorymappings:
- {id: 1, cat: Movies, desc: "Filmy"}
- {id: 25, cat: TV, desc: "Seriály"}
- {id: 23, cat: TV/Documentary, desc: "Filmy - dokument"}
- {id: 22, cat: PC, desc: "Aplikace"}
- {id: 1, cat: Movies, desc: "Filmy"}
- {id: 36, cat: Movies/3D, desc: "Filmy - 3D"}
- {id: 35, cat: Movies/Other, desc: "Filmy - anime"}
- {id: 37, cat: Movies/BluRay, desc: "Filmy - Blu-ray"}
- {id: 33, cat: TV/Documentary, desc: "Filmy - dokument"}
- {id: 11, cat: Movies/DVD, desc: "Filmy - DVD"}
- {id: 30, cat: Movies/DVD, desc: "Filmy - DVD full"}
- {id: 5, cat: Movies, desc: "Filmy - kreslené"}
@@ -29,6 +28,7 @@
- {id: 32, cat: Audio, desc: "Mluvené slovo"}
- {id: 16, cat: PC/Phone-Other, desc: "Mobil, PDA"}
- {id: 4, cat: Other, desc: "Ostatní"}
- {id: 25, cat: TV, desc: "Seriály"}
- {id: 29, cat: Audio, desc: "Soundtrack"}
- {id: 19, cat: Audio/Video, desc: "Videoklipy"}
- {id: 24, cat: XXX, desc: "xXx"}
@@ -88,11 +88,11 @@
- name: re_replace
args: ["(\\d{1})\\.", "S0$1"]
category:
selector: td:nth-child(2)
selector: td.categorie
case:
":contains(\"Filmy\")": 1
":contains(\"Seriály\")": 25
":contains(\"Filmy - dokument\")": 23
":contains(\"Filmy - dokument\")": 33
":contains(\"Aplikace\")": 22
":contains(\"Filmy - 3D\")": 36
":contains(\"Filmy - anime\")": 35
@@ -123,20 +123,16 @@
selector: td.detaily
filters:
- name: split
args: [ "|", 0 ]
- name: regexp
args: "Velikost: (.+?) ?$"
args: [ "|", 1 ]
date:
selector: td:nth-child(4)
selector: td.detaily
filters:
- name: split
args: [ "|", 1 ]
- name: regexp
args: "Přidán: (.+?) ?$"
args: [ "|", 2 ]
- name: append
args: " +02:00"
- name: dateparse
args: "2.1.2006 15:04 -07:00"
args: "2.1.2006 15:04 -07:00"
seeders:
selector: td:nth-child(7) span
leechers:

View File

@@ -0,0 +1,237 @@
---
site: dark-shadow
name: Dark-Shadow
description: "Dark-Shadow is a German Private site for TV / MOVIES / GENERAL"
language: de-de
type: private
encoding: UTF-8
links:
- https://dark-shadow.ml/
caps:
categorymappings:
# Film
- {id: 32, cat: Movies/HD, desc: "Film HD"}
- {id: 28, cat: Movies/SD, desc: "Film SD"}
- {id: 119, cat: Movies/DVD, desc: "Film DVD"}
- {id: 114, cat: Movies/UHD, desc: "Film 4K/2160p"}
- {id: 26, cat: Movies/3D, desc: "Film 3D"}
# Serien
- {id: 57, cat: TV/HD, desc: "Serien HD"}
- {id: 60, cat: TV/SD, desc: "Serien SD"}
- {id: 59, cat: TV, desc: "Serien Pack"}
- {id: 122, cat: TV, desc: "Serien Show"}
- {id: 123, cat: TV/Documentary, desc: "Serien Doku"}
# Doku
- {id: 14, cat: TV/Documentary, desc: "Doku HD"}
- {id: 15, cat: TV/Documentary, desc: "Doku SD"}
# Spiele
- {id: 17, cat: PC/Games, desc: "Spiele PC"}
- {id: 24, cat: Console, desc: "Spiele Konsole"}
- {id: 121, cat: Console, desc: "Spiele Wimmelbild"}
- {id: 126, cat: Console/Other, desc: "Spiele Mobil"}
# Musik
- {id: 110, cat: Audio/MP3, desc: "Musik MP3"}
- {id: 52, cat: Audio, desc: "Musik Pack"}
- {id: 48, cat: Audio/Lossless, desc: "Musik Flac"}
- {id: 120, cat: Audio/Video, desc: "Musik Video"}
# App
- {id: 12, cat: PC/0day, desc: "App PC"}
- {id: 125, cat: PC/Mac, desc: "App MacOS"}
- {id: 11, cat: PC/Phone-Other, desc: "App Mobil"}
# Sport
- {id: 61, cat: TV/Sport, desc: "Sport HD"}
- {id: 62, cat: TV/Sport, desc: "Sport SD"}
# Internal
- {id: 128, cat: Movies/HD, desc: "Internal Film HD"}
- {id: 129, cat: Movies/SD, desc: "Internal Film SD"}
- {id: 130, cat: TV/HD, desc: "Internal Serien HD"}
- {id: 131, cat: TV/SD, desc: "Internal Serien SD"}
- {id: 132, cat: Other, desc: "Internal Sonstiges"}
# Sonstiges
- {id: 64, cat: TV/Anime, desc: "Anime"}
- {id: 96, cat: Books/Ebook, desc: "e-Book"}
- {id: 63, cat: Audio/Audiobook, desc: "Hörbuch"}
- {id: 71, cat: Other, desc: "Anderes"}
# XXX
- {id: 73, cat: XXX/x264, desc: "XXX HD"}
- {id: 75, cat: XXX/Packs, desc: "XXX Pack"}
- {id: 76, cat: XXX/XviD, desc: "XXX SD"}
- {id: 124, cat: XXX/Other, desc: "XXX Clips"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
settings:
- name: username
type: text
label: Username
- name: password
type: password
label: Password
- name: pin
type: text
label: Pin
login:
path: login.php
method: form
form: form[action="/login.php"]
cookies: ["JAVA=OK"] # avoid jscheck redirect
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
pin: "{{ .Config.pin }}"
error:
- selector: div#login_error
test:
path: selection.php
download:
before:
path: ajax_det_poll.php
method: "post"
inputs:
set_thanks: "thanks"
det_id: "{{ .DownloadUri.Query.torrent }}"
ajax: "yes"
search:
paths:
- path: selection.php
inputs:
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
search: "{{ .Keywords }}"
blah: "0"
orderby: "added"
sort: "desc"
rows:
selector: div.selection_wrap
fields:
download:
selector: a.selection_a
attribute: href
filters:
- name: replace
args: ["details.php?id=", "download.php?torrent="]
title:
selector: a.selection_a
details:
selector: a.selection_a
attribute: href
category:
selector: div.kat_cat_pic
case:
# Movies
":has(div.kat_cat_pic_name:contains(\"Movie\")):has(div.kat_cat_pic_name_b:contains(\"4K/2160p\"))": "114"
":has(div.kat_cat_pic_name:contains(\"Movie\")):has(div.kat_cat_pic_name_b:contains(\"DVD\"))": "119"
":has(div.kat_cat_pic_name:contains(\"Movie\")):has(div.kat_cat_pic_name_b:contains(\"HD\"))": "32"
":has(div.kat_cat_pic_name:contains(\"Movie\")):has(div.kat_cat_pic_name_b:contains(\"SD\"))": "28"
":has(div.kat_cat_pic_name:contains(\"Movie\")):has(div.kat_cat_pic_name_b:contains(\"3D\"))": "26"
# Serien
":has(div.kat_cat_pic_name:contains(\"Serien\")):has(div.kat_cat_pic_name_b:contains(\"SD\"))": "60"
":has(div.kat_cat_pic_name:contains(\"Serien\")):has(div.kat_cat_pic_name_b:contains(\"HD\"))": "57"
":has(div.kat_cat_pic_name:contains(\"Serien\")):has(div.kat_cat_pic_name_b:contains(\"Pack\"))": "59"
":has(div.kat_cat_pic_name:contains(\"Serien\")):has(div.kat_cat_pic_name_b:contains(\"Show\"))": "122"
":has(div.kat_cat_pic_name:contains(\"Serien\")):has(div.kat_cat_pic_name_b:contains(\"Doku\"))": "123"
# Musik
":has(div.kat_cat_pic_name:contains(\"Music\")):has(div.kat_cat_pic_name_b:contains(\"Flac\"))": "48"
":has(div.kat_cat_pic_name:contains(\"Music\")):has(div.kat_cat_pic_name_b:contains(\"MP3\"))": "110"
":has(div.kat_cat_pic_name:contains(\"Music\")):has(div.kat_cat_pic_name_b:contains(\"Pack\"))": "52"
":has(div.kat_cat_pic_name:contains(\"Music\")):has(div.kat_cat_pic_name_b:contains(\"Videos\"))": "120"
# Doku
":has(div.kat_cat_pic_name:contains(\"Doku\")):has(div.kat_cat_pic_name_b:contains(\"SD\"))": "15"
":has(div.kat_cat_pic_name:contains(\"Doku\")):has(div.kat_cat_pic_name_b:contains(\"HD\"))": "14"
# Games
":has(div.kat_cat_pic_name:contains(\"Game\")):has(div.kat_cat_pic_name_b:contains(\"PC\"))": "17"
":has(div.kat_cat_pic_name:contains(\"Game\")):has(div.kat_cat_pic_name_b:contains(\"Wimmelbild\"))": "121"
":has(div.kat_cat_pic_name:contains(\"Game\")):has(div.kat_cat_pic_name_b:contains(\"Konsole\"))": "24"
":has(div.kat_cat_pic_name:contains(\"Game\")):has(div.kat_cat_pic_name_b:contains(\"Mobil\"))": "126"
# App
":has(div.kat_cat_pic_name:contains(\"App\")):has(div.kat_cat_pic_name_b:contains(\"PC\"))": "12"
":has(div.kat_cat_pic_name:contains(\"App\")):has(div.kat_cat_pic_name_b:contains(\"MacOS\"))": "125"
":has(div.kat_cat_pic_name:contains(\"App\")):has(div.kat_cat_pic_name_b:contains(\"Mobil\"))": "11"
# Sport
":has(div.kat_cat_pic_name:contains(\"Sport\")):has(div.kat_cat_pic_name_b:contains(\"SD\"))": "62"
":has(div.kat_cat_pic_name:contains(\"Sport\")):has(div.kat_cat_pic_name_b:contains(\"HD\"))": "61"
# Sonstiges
":has(div.kat_cat_pic_name:contains(\"Sonstiges\")):has(div.kat_cat_pic_name_b:contains(\"Anime\"))": "64"
":has(div.kat_cat_pic_name:contains(\"Sonstiges\")):has(div.kat_cat_pic_name_b:contains(\"E-Book\"))": "96"
":has(div.kat_cat_pic_name:contains(\"Sonstiges\")):has(div.kat_cat_pic_name_b:contains(\"Hörbuch\"))": "63"
":has(div.kat_cat_pic_name:contains(\"Sonstiges\")):has(div.kat_cat_pic_name_b:contains(\"Other\"))": "71"
# XXX
":has(div.kat_cat_pic_name:contains(\"XXX\")):has(div.kat_cat_pic_name_b:contains(\"SD\"))": "76"
":has(div.kat_cat_pic_name:contains(\"XXX\")):has(div.kat_cat_pic_name_b:contains(\"HD\"))": "73"
":has(div.kat_cat_pic_name:contains(\"XXX\")):has(div.kat_cat_pic_name_b:contains(\"Pack\"))": "75"
":has(div.kat_cat_pic_name:contains(\"XXX\")):has(div.kat_cat_pic_name_b:contains(\"Clips\"))": "124"
# Internal
":has(div.kat_cat_pic_name:contains(\"Internal\")):has(div.kat_cat_pic_name_b:contains(\"Film HD\"))": "128"
":has(div.kat_cat_pic_name:contains(\"Internal\")):has(div.kat_cat_pic_name_b:contains(\"Film SD\"))": "129"
":has(div.kat_cat_pic_name:contains(\"Internal\")):has(div.kat_cat_pic_name_b:contains(\"Serien HD\"))": "130"
":has(div.kat_cat_pic_name:contains(\"Internal\")):has(div.kat_cat_pic_name_b:contains(\"Serien SD\"))": "131"
":has(div.kat_cat_pic_name:contains(\"Internal\")):has(div.kat_cat_pic_name_b:contains(\"Sonstiges\"))": "132"
banner:
selector: div[id^="details"] img
attribute: src
size:
selector: div.selection_unter_ad
filters:
- name: replace
args: [".", ""]
- name: replace
args: [",", "."]
grabs:
selector: div.selection_unter_ae
filters:
- name: trim
args: "x"
- name: replace
args: [".", ""]
- name: replace
args: [",", "."]
seeders:
selector: div.selection_unter_aa
filters:
- name: replace
args: [".", ""]
- name: replace
args: [",", "."]
leechers:
selector: div.selection_unter_aaa
filters:
- name: replace
args: [".", ""]
- name: replace
args: [",", "."]
downloadvolumefactor:
case:
":root:has(div.onlyup)": "0"
"*": "1"
uploadvolumefactor:
case:
"*": "1"
# 2 flavours of dates
date:
# Heute 13:30:04
# Gestern 09:10:10
selector: div.selection_unter_ab:not(:contains("."))
optional: true
filters:
- name: replace
args: ["Heute", "Today"]
- name: replace
args: ["Gestern", "Yesterday"]
date:
# 30.02.2018 um 23:12:50
selector: div.selection_unter_ab:contains(".")
optional: true
filters:
- name: replace
args: [" um", ""]
- name: dateparse
args: "02.01.2006 15:04:05"
description:
selector: selection_unter_af
optional: true

View File

@@ -236,13 +236,22 @@
uploadvolumefactor:
case:
"*": "1"
# 2 flavours of dates
date:
selector: div.selection_unter_ab
# Heute 13:30:04
# Gestern 09:10:10
selector: div.selection_unter_ab:not(:contains("."))
optional: true
filters:
- name: replace
args: ["Heute", "Today"]
- name: replace
args: ["Gestern", "Yesterday"]
date:
# 30.02.2018 um 23:12:50
selector: div.selection_unter_ab:contains(".")
optional: true
filters:
- name: replace
args: [" um", ""]
- name: dateparse

View File

@@ -114,3 +114,4 @@
"i[data-original-title=\"Double upload\"]": "2" # Single Torrent Double Upload
"i[data-original-title=\"Double Upload\"]": "2" # Global Double Upload
"*": "1"
# UNIT3D

View File

@@ -21,55 +21,70 @@
caps:
categorymappings:
# ANIMES
- {id: 105, cat: TV/Anime, desc: "1080p"}
- {id: 104, cat: TV/Anime, desc: "720p"}
- {id: 90, cat: TV/Anime, desc: "HDRIP-720p"}
- {id: 93, cat: TV/Anime, desc: "HDRIP1080p"}
- {id: 131, cat: TV/Anime, desc: "SD"}
- {id: 120, cat: TV/Anime, desc: "X265-1080p"}
- {id: 119, cat: TV/Anime, desc: "X265-720p"}
- {id: 107, cat: TV/Anime, desc: "1080p"}
- {id: 106, cat: TV/Anime, desc: "720p"}
- {id: 94, cat: TV/Anime, desc: "HDRIP1080p"}
- {id: 91, cat: TV/Anime, desc: "HDRIP720p"}
- {id: 105, cat: TV/Anime, desc: "ANIMES 1080p-Bluray"}
- {id: 149, cat: TV/Anime, desc: "ANIMES 3D"}
- {id: 143, cat: TV/Anime, desc: "ANIMES 4K-2160p"}
- {id: 104, cat: TV/Anime, desc: "ANIMES 720p-Bluray"}
- {id: 90, cat: TV/Anime, desc: "ANIMES HDrip-720p"}
- {id: 93, cat: TV/Anime, desc: "ANIMES HDrip-1080p"}
- {id: 131, cat: TV/Anime, desc: "ANIMES SD"}
- {id: 120, cat: TV/Anime, desc: "ANIMES X265-1080p"}
- {id: 119, cat: TV/Anime, desc: "ANIMES X265-720p"}
# DOCUMENTAIRES
- {id: 107, cat: TV/Documentary, desc: "DOCS 1080p-Bluray"}
- {id: 152, cat: TV/Documentary, desc: "DOCS 2160p-Bluray"}
- {id: 106, cat: TV/Documentary, desc: "DOCS 720p-Bluray"}
- {id: 94, cat: TV/Documentary, desc: "DOCS HDrip-1080p"}
- {id: 91, cat: TV/Documentary, desc: "DOCS HDrip-720p"}
- {id: 142, cat: TV/Documentary, desc: "DOCS HDTV"}
- {id: 141, cat: TV/Documentary, desc: "DOCS SD"}
# EBOOK
- {id: 124, cat: Books, desc: "Livres et Magazines"}
# FILMS
- {id: 97, cat: Movies/HD, desc: "1080p"}
- {id: 103, cat: Movies/3D, desc: "3D"}
- {id: 111, cat: Movies/HD, desc: "4K"}
- {id: 96, cat: Movies/HD, desc: "720p"}
- {id: 127, cat: Movies/HD, desc: "BDrip"}
- {id: 128, cat: Movies/HD, desc: "BRrip"}
- {id: 126, cat: Movies/SD, desc: "DVDrip"}
- {id: 89, cat: Movies/HD, desc: "HDRIP-720p"}
- {id: 92, cat: Movies/HD, desc: "HDRIP1080p"}
- {id: 112, cat: Movies/SD, desc: "Team-Hush"}
- {id: 129, cat: Movies/HD, desc: "Team-Romkent"}
- {id: 125, cat: Movies/Other, desc: "WEBrip"}
- {id: 110, cat: Movies/HD, desc: "X265-1080p"}
- {id: 109, cat: Movies/HD, desc: "X265-720p"}
- {id: 97, cat: Movies/HD, desc: "FILMS Bluray-1080p"}
- {id: 103, cat: Movies/3D, desc: "FILMS 3D"}
- {id: 111, cat: Movies/UHD, desc: "FILMS 4K"}
- {id: 96, cat: Movies/HD, desc: "FILMS Bluray-720p"}
- {id: 127, cat: Movies/HD, desc: "FILMS BDrip"}
- {id: 128, cat: Movies/HD, desc: "FILMS BRrip"}
- {id: 140, cat: Movies/HD, desc: "FILMS BSD-Team"}
- {id: 126, cat: Movies/SD, desc: "FILMS DVDrip"}
- {id: 136, cat: Movies/BluRay, desc: "FILMS Full-Bluray"}
- {id: 135, cat: Movies/SD, desc: "FILMS Team Freedom-HD"}
- {id: 137, cat: Movies/SD, desc: "FILMS Team ticadow"}
- {id: 89, cat: Movies/HD, desc: "FILMS HDrip-720p"}
- {id: 92, cat: Movies/HD, desc: "FILMS HDrip-1080p"}
- {id: 112, cat: Movies/SD, desc: "FILMS Team-Hush"}
- {id: 129, cat: Movies/HD, desc: "FILMS Team-Romkent"}
- {id: 125, cat: Movies/Other, desc: "FILMS WEBrip"}
- {id: 110, cat: Movies/HD, desc: "FILMS X265-1080p"}
- {id: 109, cat: Movies/HD, desc: "FILMS X265-720p"}
# GAMES
- {id: 134, cat: PC/Games, desc: "jeu PC"}
# MUSIQUES
- {id: 114, cat: Audio/Lossless, desc: "Flac"}
- {id: 113, cat: Audio/MP3, desc: "MP3"}
- {id: 132, cat: Audio, desc: "Musiques-HQ"}
- {id: 130, cat: Audio/Video, desc: "video clip"}
# SERIE-sd
- {id: 121, cat: TV/SD, desc: "SD"}
# SERIES-HD
- {id: 102, cat: TV/HD, desc: "1080p"}
- {id: 101, cat: TV/HD, desc: "720p"}
- {id: 100, cat: TV/HD, desc: "HDrip1080p"}
- {id: 99, cat: TV/HD, desc: "HDrip720p"}
- {id: 114, cat: Audio/Lossless, desc: "MUSIQUES Flac"}
- {id: 113, cat: Audio/MP3, desc: "MUSIQUES MP3"}
- {id: 132, cat: Audio, desc: "MUSIQUES HQ"}
- {id: 130, cat: Audio/Video, desc: "MUSIQUES video clip"}
# SERIE
- {id: 121, cat: TV/SD, desc: "SERIE SD"}
- {id: 102, cat: TV/HD, desc: "SERIE 1080p-Bluray"}
- {id: 101, cat: TV/HD, desc: "SERIE 720p-Bluray"}
- {id: 100, cat: TV/HD, desc: "SERIE HDrip-1080p"}
- {id: 99, cat: TV/HD, desc: "SERIE HDrip-720p"}
- {id: 151, cat: TV/UHD, desc: "SERIE HDrip-2160p"}
# SPECTACLES
- {id: 118, cat: TV/Sport, desc: "HDRIP1080p"}
- {id: 117, cat: TV/Sport, desc: "HDRIP720p"}
- {id: 138, cat: TV, desc: "SPECTACLES Bluray-1080p"}
- {id: 139, cat: TV, desc: "SPECTACLES Bluray-720p"}
- {id: 133, cat: TV, desc: "SPECTACLES DVDrip"}
- {id: 118, cat: TV, desc: "SPECTACLES HDrip-1080p"}
- {id: 117, cat: TV, desc: "SPECTACLES HDrip-720p"}
# SPORT
- {id: 146, cat: TV/Sport, desc: "SPORT HDTV-1080p"}
- {id: 147, cat: TV/Sport, desc: "SPORT HDTV-720p"}
- {id: 148, cat: TV/Sport, desc: "SPORT SD"}
- {id: 144, cat: TV/Sport, desc: "SPORT WEB-DL-1080p"}
- {id: 145, cat: TV/Sport, desc: "SPORT WEB-DL-720p"}
modes:
search: [q]
@@ -134,6 +149,8 @@
selector: td:nth-child(4)
leechers:
selector: td:nth-child(5)
date:
text: now
downloadvolumefactor:
case:
img[alt="freeleech"]: "0"

View File

@@ -1,30 +1,33 @@
---
site: redtopia
name: Redtopia
description: "Tracker Music/Podcasts/Audiobooks"
site: freetorrent
name: FreeTorrent
description: "FreeTorrent is a Private Torrent Tracker for HD MOVIES / TV"
language: en-us
type: private
encoding: UTF-8
links:
- https://redtopia.xyz/
- https://freetorrent.tk/
caps:
categorymappings:
- {id: 1, cat: Audio, desc: "Studio Album"}
- {id: 2, cat: Audio, desc: "Studio Single"}
- {id: 3, cat: Audio, desc: "Studio Collection"}
- {id: 4, cat: Audio, desc: "Indie Album"}
- {id: 5, cat: Audio, desc: "Indie Single"}
- {id: 6, cat: Audio, desc: "Indie Collection"}
- {id: 7, cat: Audio, desc: "Live Album"}
- {id: 8, cat: Audio, desc: "OST"}
- {id: 9, cat: Audio, desc: "Podcast"}
- {id: 10, cat: Audio, desc: "Audio Book"}
- {id: 11, cat: Audio, desc: "Audio Drama"}
- {id: 1, cat: Movies, desc: "Movies"}
- {id: 2, cat: TV, desc: "TV"}
- {id: 3, cat: Audio, desc: "Music"}
- {id: 4, cat: PC/0day, desc: "Software"}
- {id: 5, cat: Books, desc: "Ebook"}
- {id: 6, cat: PC/Games, desc: "Games"}
- {id: 7, cat: TV, desc: "Animations"}
- {id: 8, cat: PC, desc: "Linux"}
- {id: 9, cat: PC/Mac, desc: "MacOS"}
- {id: 10, cat: PC/Phone-Android, desc: "Android app"}
- {id: 11, cat: PC/Phone-Android, desc: "Android ROMs"}
- {id: 12, cat: TV/Documentary, desc: "Documentaries"}
- {id: 13, cat: TV, desc: "Shows"}
modes:
search: [q]
music-search: [q]
tv-search: [q, season, ep, imdbid]
movie-search: [q, imdbid]
login:
path: login
@@ -42,9 +45,13 @@
- path: filterTorrents
inputs:
$raw: "{{range .Categories}}categories[]={{.}}&{{end}}"
search: "{{ .Keywords }}"
search: "{{if .Query.IMDBID}}{{else}}{{ .Keywords }}{{end}}"
uploader: ""
sorting: created_at
imdb: "{{ .Query.IMDBIDShort }}"
tvdb: ""
tmdb: ""
mal: ""
sort: created_at
direction: desc
qty: 100
rows:
@@ -65,16 +72,20 @@
selector: a.view-torrent
attribute: href
size:
selector: td:nth-child(4)
seeders:
selector: td:nth-child(6)
leechers:
selector: td:nth-child(7)
grabs:
selector: td:nth-child(5)
seeders:
selector: td:nth-child(7)
leechers:
selector: td:nth-child(8)
grabs:
selector: td:nth-child(6)
filters:
- name: regexp
args: ([\d\.]+)
imdb:
optional: true
selector: a[href^="https://www.imdb.com/title/"]
attribute: href
date:
selector: time
filters:
@@ -103,11 +114,13 @@
args: [" (ay|kuud|måneder|mesi|miesiące|meses|měsíce|месяца|месяцев|luni|meses|mois|Monaten|месеца|maanden)", "months"]
downloadvolumefactor:
case:
"i[data-original-title=\"100% Free\"]": "0"
"i[data-original-title=\"Global FreeLeech\"]": "0"
"i[data-original-title=\"100% Free\"]": "0" # Single Torrent Freeleech
"i[data-original-title=\"Global FreeLeech\"]": "0" # Global Freeleech
"i[data-original-title=\"Freeleech\"]": "0" # Freeleech
"*": "1"
uploadvolumefactor:
case:
"i[data-original-title=\"Double Upload\"]": "2" # global flag
"i[data-original-title=\"Double upload\"]": "2" # torrent specific flag
"i[data-original-title=\"Double upload\"]": "2" # Single Torrent Double Upload
"i[data-original-title=\"Double Upload\"]": "2" # Global Double Upload
"*": "1"
# UNIT3D

View File

@@ -7,7 +7,7 @@
encoding: UTF-8
followredirect: true
links:
- https://www.gktorrent.cx/
- https://www.gktorrent.tv/
legacylinks:
- https://www.gktorrent.com/
- http://www.gktorrent.com/
@@ -24,7 +24,7 @@
- https://www.gktorrent.me/
- https://www.rantop.org/
- https://www.gktorrent.net/
- https://www.gktorrent.tv/
- https://www.gktorrent.cx/
caps:
categorymappings:
- {id: movies, cat: Movies, desc: "Movies"}

View File

@@ -13,7 +13,7 @@
# Movie
- {id: 132, cat: Movies/BluRay, desc: "BluRay"}
- {id: 146, cat: Movies/HD, desc: "Remux"}
- {id: 186, cat: Movies/HD, desc: "UHD"}
- {id: 186, cat: Movies/UHD, desc: "UHD"}
- {id: 189, cat: Movies/HD, desc: "HD"}
- {id: 190, cat: Movies/SD, desc: "SD"}
- {id: 20, cat: Movies/DVD, desc: "DVD"}
@@ -21,10 +21,10 @@
- {id: 16, cat: Movies, desc: "Packs"}
# Serien
- {id: 187, cat: TV/HD, desc: "Staffeln UHD"}
- {id: 187, cat: TV/UHD, desc: "Staffeln UHD"}
- {id: 173, cat: TV/HD, desc: "Staffeln HD"}
- {id: 133, cat: TV/SD, desc: "Staffeln SD"}
- {id: 188, cat: TV/HD, desc: "Folgen UHD"}
- {id: 188, cat: TV/UHD, desc: "Folgen UHD"}
- {id: 174, cat: TV/HD, desc: "Folgen HD"}
- {id: 7, cat: TV/SD, desc: "Folgen SD"}
@@ -76,6 +76,7 @@
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
settings:
- name: pin

View File

@@ -113,3 +113,4 @@
"i[data-original-title=\"Double upload\"]": "2"
"i[data-original-title=\"Double Upload\"]": "2" # Global Double Upload
"*": "1"
# UNIT3D

View File

@@ -1,12 +1,12 @@
---
site: 420files
name: 420files
description: "Tracker Movies/TV/Music"
site: hdplus
name: HDplus
description: "HDplus is Private Torrent Tracker for MOVIES / TV / MUSIC"
language: en-us
type: private
encoding: UTF-8
links:
- https://420.org/
- https://hdplus.xyz/
caps:
categorymappings:
@@ -15,7 +15,7 @@
- {id: 3, cat: Audio, desc: "Music"}
modes:
search: [q]
search: [q, imdbid]
tv-search: [q, season, ep, imdbid]
movie-search: [q, imdbid]
@@ -25,10 +25,23 @@
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
remember: 1
selectorinputs:
_token:
selector: meta[name="csrf-token"]
attribute: content
error:
- selector: form[action*="/login"] .text-red
- selector: form[action$="/login"] .text-red
test:
path: torrents
path: /
selector: a[href$="/logout"]
ratio:
path: /
selector: span:has(i.fa-sync-alt)
filters:
- name: regexp
args: "Ratio : (\\d+)"
search:
paths:
@@ -40,8 +53,7 @@
imdb: "{{ .Query.IMDBIDShort }}"
tvdb: ""
tmdb: ""
mal: ""
sorting: created_at
sort: created_at
direction: desc
qty: 100
rows:
@@ -101,10 +113,11 @@
downloadvolumefactor:
case:
"i[data-original-title=\"100% Free\"]": "0" # Single Torrent Freeleech
"i[data-original-title=\"Global FreeLeech\"]": "0" # Global Freeleech
"i[data-original-title=\"Global freeleech\"]": "0" # Global Freeleech
"*": "1"
uploadvolumefactor:
case:
"i[data-original-title=\"Double upload\"]": "2" # Single Torrent Double Upload
"i[data-original-title=\"Double Upload\"]": "2" # Global Double Upload
"*": "1"
# UNIT3D

View File

@@ -26,19 +26,19 @@
tv-search: [q, season, ep, imdbid]
movie-search: [q, imdbid]
settings:
- name: cookie
type: text
label: Cookie
- name: info
type: info
label: How to get the Cookie
default: "<ol><li>Login to this tracker with your browser<li>Open the <b>DevTools</b> panel by pressing <b>F12</b><li>Select the <b>Network</b> tab<li>Click on the <b>Doc</b> button<li>Refresh the page by pressing <b>F5</b><li>Select the <b>Headers</b> tab<li>Find 'cookie:' in the <b>Request Headers</b> section<li>Copy & paste the whole cookie string to here.</ol>"
login:
path: login.php
method: form
form: form[action="takelogin.php"]
captcha:
type: image
selector: img[alt="CAPTCHA"]
input: imagestring
method: cookie
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: td.embedded:has(h2:contains("failed"))
cookie: "{{ .Config.cookie }}"
test:
path: torrents.php
@@ -58,11 +58,16 @@
inputs:
$raw: "{{range .Categories}}cat{{.}}=1&{{end}}"
search: "{{if .Query.IMDBID}}{{ .Query.IMDBID }}{{else}}{{ .Keywords }}{{end}}"
incldead: "1"
spstate: "0"
inclbookmarked: "0"
# 0=including dead 1=active 2=dead
incldead: 0
# show promotions 0=all 1=normal 2=free 3=2x 4=2x free 5=50% 6=2x50% 7=30%
spstate: 0
# 0=all 1=bookmarked 2=not
inclbookmarked: 0
# 0=title 1=descr 3=uploaded 4=imdb url
search_area: "{{ if .Query.IMDBID }}4{{else}}0{{end}}"
search_mode: "0"
# 0=AND 1=OR 2=exact
search_mode: 0
rows:
selector: table.torrents > tbody > tr:has(table.torrentname)
filters:
@@ -84,7 +89,7 @@
selector: form[action^="download.php?id="]
attribute: action
imdb:
selector: a[href^="http://www.imdb.com/title/tt"]
selector: a[href*="www.imdb.com/title/tt"]
attribute: href
size:
selector: td.rowfollow:nth-child(5)
@@ -118,4 +123,5 @@
"*": "1"
description:
selector: td:nth-child(2)
remove: a, img
remove: a, img
# NexusPHP

View File

@@ -118,13 +118,19 @@
attribute: href
size:
selector: td:nth-child(3)
seeders:
text: 1
seeders:
selector: td:nth-child(4)
optional: true
filters:
- name: re_replace
args: ["(\\d*) \\(\\+\\d*\\)\n? \\| (\\d*) \\(\\+\\d*\\)", "$1"]
leechers:
text: 1
leechers:
selector: td:nth-child(4)
optional: true
filters:
- name: re_replace
args: ["(\\d*) \\(\\+\\d*\\)\n? \\| (\\d*) \\(\\+\\d*\\)", "$2"]

View File

@@ -111,3 +111,4 @@
"i[data-original-title=\"Double upload\"]": "2" # Single Torrent Double Upload
"i[data-original-title=\"Double Upload\"]": "2" # Global Double Upload
"*": "1"
# UNIT3D

View File

@@ -26,7 +26,7 @@
- {id: 26, cat: PC/Games, desc: "Games/PC"}
- {id: 38, cat: PC/Phone-Other, desc: "Mobile"}
- {id: 59, cat: Movies/3D, desc: "Movies/3D"}
- {id: 92, cat: Movies/HD, desc: "Movies/4K-UHD"}
- {id: 92, cat: Movies/UHD, desc: "Movies/4K-UHD"}
- {id: 32, cat: Movies/BluRay, desc: "Movies/Blu-Ray"}
- {id: 28, cat: Movies/DVD, desc: "Movies/DVD"}
- {id: 42, cat: Movies/HD, desc: "Movies/HD-x264"}
@@ -60,7 +60,7 @@
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: font:contains("failed") + table
- selector: div.alert:contains("failed")
test:
path: browse.php
@@ -79,7 +79,7 @@
incldead: 1
search_by: "{{ if .Query.IMDBID }}imdb{{else}}name{{end}}"
rows:
selector: table.torrenttable > tbody > tr:has(a[title][href^="details.php?id="])
selector: table.table-striped > tbody > tr:has(a[title][href^="details.php?id="])
fields:
title:
selector: a[title][href^="details.php?id="]
@@ -93,13 +93,10 @@
filters:
- name: querystring
args: cat
imdb:
selector: a[title="IMDB"]
attribute: href
banner:
attribute: rel
imdb:
selector: a[href^="http://www.imdb.com/title/"]
selector: a[href*="https://www.imdb.com/title/"]
optional: true
attribute: href
download:
@@ -114,13 +111,10 @@
selector: td:has(a[href$="filelist=1#filelist"])
remove: a
date:
selector: td > span:has(i.fa-clock)
remove: b
selector: td > small:has(i.fa-clock)
filters:
- name: replace
args: ["\xA0", " "]
- name: replace
args: ["Added on ", ""]
- name: replace
args: ["st ", " "]
- name: replace
@@ -129,8 +123,8 @@
args: ["rd ", " "]
- name: replace
args: ["th ", " "]
- name: replace
args: [" by", ""]
- name: regexp
args: "(.+?) by"
- name: append
args: " +02:00"
- name: dateparse
@@ -145,6 +139,3 @@
uploadvolumefactor:
case:
"*": "1"
description:
selector: td:has(a[title][href^="details.php?id="])
remove: a[title][href^="details.php?id="], div, font:contains("Added on")

View File

@@ -1,92 +0,0 @@
---
site: idopeclone
name: IdopeClone
description: "This Clone of iDope is a Public torrent search engine"
language: en-us
type: public
encoding: UTF-8
links:
- https://www.idope.site/
legacylinks:
- https://idope.top/
caps:
categorymappings:
- {id: other, cat: Other, desc: "Others"}
- {id: movies, cat: Movies, desc: "Movies"}
- {id: videos, cat: Other, desc: "Videos"}
- {id: tv, cat: TV, desc: "TV"}
- {id: anime, cat: TV/Anime, desc: "Anime"}
- {id: xxx, cat: XXX, desc: "XXX"}
- {id: adult, cat: XXX, desc: "XXX"}
- {id: music, cat: Audio, desc: "Music"}
- {id: games, cat: PC/Games, desc: "Games"}
- {id: apps, cat: PC/0day, desc: "Apps"}
- {id: applications, cat: PC/0day, desc: "Apps"}
- {id: android, cat: PC/Phone-Android, desc: "Android"}
- {id: software, cat: PC/0day, desc: "Apps"}
- {id: books, cat: Books, desc: "Books"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
settings: []
search:
paths:
- path: "{{if .Keywords}}search/{{ .Keywords}}/{{else}}recent/{{end}}"
- path: "{{if .Keywords}}s/{{ .Keywords}}/page/2{{else}}recent/2{{end}}"
- path: "{{if .Keywords}}s/{{ .Keywords}}/page/3{{else}}recent/3{{end}}"
- path: "{{if .Keywords}}s/{{ .Keywords}}/page/4{{else}}recent/4{{end}}"
- path: "{{if .Keywords}}s/{{ .Keywords}}/page/5{{else}}recent/5{{end}}"
rows:
selector: li:has(div.opt-text-w3layouts)
filters:
- name: andmatch
fields:
title:
selector: div.opt-text-w3layouts a
details:
selector: div.opt-text-w3layouts a
attribute: href
category:
optional: true
selector: a[href^="/browse/"]
filters:
- name: replace
args: ["/browse/", ""]
magnet:
selector: a[href^="magnet:?"]
attribute: href
date:
selector: div.seedbar span:nth-child(4)
filters:
- name: replace
args: ["Age: ", ""]
- name: timeago
files:
selector: div.seedbar span:nth-child(5)
filters:
- name: replace
args: ["Files: ", ""]
size:
selector: div.seedbar span:nth-child(3)
filters:
- name: replace
args: ["Size: ", ""]
seeders:
selector: div.seedbar span:nth-child(1)
filters:
- name: replace
args: ["Seed: ", ""]
leechers:
selector: div.seedbar span:nth-child(2)
filters:
- name: replace
args: ["Leech: ", ""]
downloadvolumefactor:
text: "0"
uploadvolumefactor:
text: "1"

View File

@@ -6,8 +6,10 @@
type: public
encoding: UTF-8
links:
- https://ilcorsaronero.vip/
- https://ilcorsaronero.pizza/
legacylinks:
- https://ilcorsaronero.live/
- https://ilcorsaronero.vip/
- https://ilcorsaronero.info/
- https://ilcorsaronero.ch/
- https://ilcorsaronero.cc/

View File

@@ -0,0 +1,70 @@
---
site: kikibt
name: KikiBT
description: "KikiBT is a CHINESE Public BitTorrent DHT search engine."
language: cn-cn
type: public
encoding: UTF-8
followredirect: true
links:
- https://kikibt.cc/
- https://kikibt.me/
caps:
categorymappings:
- {id: 1, cat: Other, desc: "Other"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
settings:
- name: info
type: info
default: KikiBT does not use categories. In your software Indexer settings, set the category to 100001.
download:
selector: a[href^="magnet:?"]
search:
paths:
- path: /
method: post
followredirect: true
inputs:
keyword: "{{if .Keywords }}{{.Keywords}}{{else}}test{{end}}"
rows:
selector: dl.item
filters:
- name: andmatch
fields:
title:
selector: dt a
category:
text: "1"
details:
selector: dt a
attribute: href
download:
selector: dt a
attribute: href
size:
selector: dd span:nth-of-type(2) b
files:
selector: dd span:nth-of-type(3) b
date:
selector: dd span:nth-of-type(1) b
filters:
- name: dateparse
args: "2006-01-02"
grabs:
selector: dd span:nth-of-type(5) b
seeders:
text: "1"
leechers:
text: "1"
downloadvolumefactor:
text: "0"
uploadvolumefactor:
text: "1"

View File

@@ -88,6 +88,10 @@
"10" : "9.5GB or higher"
"11": "Gold (FreeLeech)"
"12": "Silver (50%DL)"
- name: striprussian
type: checkbox
label: Strip Russian Letters
default: true
login:
path: takelogin.php
@@ -106,6 +110,13 @@
paths:
# http://kinozal.tv/browse.php?s=lucifer+2017&g=0&c=0&v=0&d=0&w=0&t=0&f=0
- path: browse.php
keywordsfilters:
- name: diacritics
args: replace
- name: re_replace # S01 to 1
args: ["(?i)\\bS0*(\\d+)\\b", "$1"]
- name: re_replace # S01E01 to 1 1
args: ["(?i)\\bS0*(\\d+)E0*(\\d+)\\b", "$1 $2"]
inputs:
# multi cat is not supported. so defaulting to ALL
c: "0"
@@ -154,6 +165,28 @@
fields:
title:
selector: td.nam a[href^="/details.php?id="]
filters:
# normalize to SXXEYY format
- name: replace
args: [" / ", " "]
- name: replace
args: ["Кураж-Бамбей", "kurazh"]
- name: replace
args: ["Кубик в Кубе", "Kubik"]
- name: re_replace
args: ["\\((\\d+)\\s+[Сс]езон:\\s+(?:(\\d+-*\\d*)\\s+[Сс]ери[ия]\\s+.*\\d+)\\)(.*)\\s([12][0-9]{3})\\s(.*)", "$3 - S$1E$2 - rus $5"]
- name: re_replace
args: ["(\\([А-Яа-я\\W]+\\))|(^[А-Яа-я\\W\\d]+\\/ )|([а-яА-Я \\-]+,+)|([а-яА-Я]+)", "{{ if .Config.striprussian }}{{ else }}$1$2$3$4{{ end }}"]
- name: re_replace
args: ["\\((\\d+p)\\)", "$1"]
- name: replace
args: ["-Rip", "Rip"]
- name: replace
args: ["WEB-DL", "WEBDL"]
- name: replace
args: ["WEBDLRip", "WEBDL"]
- name: replace
args: ["HDTVRip", "HDTV"]
details:
selector: td.nam a[href^="/details.php?id="]
attribute: href

View File

@@ -0,0 +1,63 @@
---
site: mactorrents
name: MacTorrents
description: "MacTorrents is a Public tracker for Mac software"
language: en-us
type: public
encoding: UTF-8
links:
- https://mac-torrents.com/
caps:
categories:
"mac-os-apps": PC/Mac
"mac-os-games": PC/Games
modes:
search: [q]
settings: []
search:
paths:
- path: /
inputs:
s: "{{.Keywords}}"
rows:
selector: div.iso-item article
fields:
title:
selector: div.blog-content h3 a
category:
selector: a[href*="/category/"]
attribute: href
filters:
- name: split
args: ["/", 4]
details:
selector: div.blog-content h3 a
attribute: href
download:
selector: a.download
attribute: href
banner:
selector: div.blog-media p a img
attribute: data-src
date:
selector: div.blog-content div.entry-meta time
attribute: datetime
filters:
- name: replace
args: ["T", " "]
- name: dateparse
args: "2006-01-02 15:04:05-07:00"
size:
text: "500 MB"
seeders:
text: "1"
leechers:
text: "1"
downloadvolumefactor:
text: "0"
uploadvolumefactor:
text: "1"

View File

@@ -6,6 +6,8 @@
type: semi-private
encoding: UTF-8
links:
- https://en.metal-tracker.com/
legacylinks:
- http://en.metal-tracker.com/
caps:
@@ -20,7 +22,7 @@
login:
path: user/login.html
method: form
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"

View File

@@ -87,10 +87,7 @@
date:
selector: td:nth-child(4)
filters:
- name: append
args: " +0700"
- name: dateparse
args: "2006-01-0215:04:05 -0700"
- name: timeago
downloadvolumefactor:
case:
"span.label:contains(\"Free\")": "0"

View File

@@ -732,18 +732,22 @@
title:
selector: a[href^="viewtopic.php?t="] > b
filters:
- name: re_replace
args: ["\\b(\\d)\\b", "0$1"]
- name: replace
args: [" / ", " "]
- name: replace
args: ["Кураж-Бамбей", "kurazh"]
- name: replace
args: ["Кубик в Кубе", "Kubik"]
- name: re_replace
args: ["(\\([Сс]езон\\s+(\\d+).+[Сс]ери[ия]\\s+(?:(\\d+-*\\d*).*\\d+)*\\))", "(S$2E$3) RUS"]
args: ["((\\([12][0-9]{3}\\))(.+)\\([Сс]езон\\s+(\\d+).+[Сс]ери[ия]\\s+(?:(\\d+-*\\d*).*\\d+)*\\))", " - S$4E$5 - rus $3"]
- name: re_replace
args: ["(\\([А-Яа-я\\W]+\\))|(^[А-Яа-я\\W\\d]+\\/ )|([а-яА-Я \\-]+,+)|([а-яА-Я]+)", "{{ if .Config.striprussian }}{{ else }}$1$2$3$4{{ end }}"]
- name: replace
args: ["WEBDLRip", "WEBDL"]
args: ["-Rip", "Rip"]
- name: replace
args: ["WEB-DLRip", "WEBDL"]
args: ["WEB-DL", "WEBDL"]
- name: replace
args: ["WEBDLRip", "WEBDL"]
- name: replace
args: ["HDTVRip", "HDTV"]
details:

View File

@@ -12,6 +12,7 @@
encoding: UTF-8
links:
- https://nyaa.pantsu.cat/
- https://nyaa.pt/
settings:
- name: cat-id

View File

@@ -0,0 +1,169 @@
---
site: p2pbg
name: P2PBG
description: "P2PBG is a BULGARIAN Private Torrent Tracker for 0DAY / GENERAL"
language: bg
type: private
encoding: UTF-8
links:
- http://p2pbg.com/
caps:
categorymappings:
- {id: 1, cat: Movies/SD, desc: "Movies-XviD"}
- {id: 16, cat: Movies/HD, desc: "Movies-x264"}
- {id: 34, cat: Movies, desc: "Movies-BG"}
- {id: 17, cat: Movies/HD, desc: "Movies-MPEG2"}
- {id: 35, cat: Movies, desc: "Movies-GSM"}
- {id: 55, cat: Movies/3D, desc: "Movies-3D"}
- {id: 18, cat: Movies/BluRay, desc: "Movies-BR/HD-DVD"}
- {id: 7, cat: TV/Documentary , desc: "Movies-Documentaries"}
- {id: 11, cat: Movies/DVD, desc: "Movies-DVD"}
- {id: 24, cat: TV/SD, desc: "TV-BG"}
- {id: 14, cat: TV, desc: "TV-Shows"}
- {id: 15, cat: TV, desc: "TV-Boxset"}
- {id: 38, cat: TV/Anime, desc: "TV-Cartoons"}
- {id: 8, cat: PC/Games, desc: "Games-PC ISO"}
- {id: 9, cat: PC/Games, desc: "Games-PC Rips"}
- {id: 21, cat: Console/Xbox, desc: "Games-XboX"}
- {id: 22, cat: Console/Xbox 360, desc: "Games-X360"}
- {id: 33, cat: Console/Wii, desc: "Games-Wii"}
- {id: 20, cat: Console/PSP, desc: "Games-PSP"}
- {id: 23, cat: Console/PS3, desc: "Games-PS3"}
- {id: 12, cat: Console/PS3, desc: "Games-PS2"}
- {id: 2, cat: Audio/MP3, desc: "Music-Song"}
- {id: 28, cat: Audio, desc: "Music-Album"}
- {id: 19, cat: Audio/Video, desc: "Music-Video"}
- {id: 29, cat: Audio, desc: "Music-Discography"}
- {id: 3, cat: Audio/Video, desc: "Music-DVD"}
- {id: 31, cat: PC/0day, desc: "Appz Ripped"}
- {id: 26, cat: PC/ISO, desc: "Appz PC-ISO"}
- {id: 49, cat: PC/Mac, desc: "Appz MacOS"}
- {id: 30, cat: PC, desc: "Appz-Linux"}
- {id: 27, cat: PC, desc: "Appz-GSM"}
- {id: 39, cat: Other, desc: "e-Learning"}
- {id: 37, cat: Other/Misc, desc: "Pictures"}
- {id: 4, cat: Other, desc: "Other"}
- {id: 6, cat: Books, desc: "Books"}
- {id: 52, cat: PC/Phone-Other, desc: "Mobile-GSM"}
- {id: 40, cat: PC/Phone-IOS, desc: "Mobile-iPhone"}
- {id: 51, cat: TV/Sport, desc: "Sport"}
- {id: 5, cat: TV/Sport, desc: "Sport F1"}
- {id: 13, cat: XXX, desc: "XXX"}
- {id: 54, cat: XXX/x264, desc: "XXX HD"}
- {id: 32, cat: XXX/Imageset, desc: "XXX Pictures"}
- {id: 56, cat: XXX, desc: "XXX 3D"}
- {id: 53, cat: XXX, desc: "XXX Hentai"}
- {id: 48, cat: XXX, desc: "XXX BG Amateurs"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
settings:
- name: username
type: text
label: Username
- name: password
type: password
label: Password
- name: info_results
type: info
label: "Search results"
default: "For best results, increase the torrents number in your profile to 100.<br />Default is 15."
login:
path: index.php?page=login
method: form
form: form[action="index.php?page=login"]
inputs:
uid: "{{ .Config.username }}"
pwd: "{{ .Config.password }}"
error:
- selector: td.lista span[style="color:#FF0000;"]
test:
path: index.php
selector: :has(a[href="logout.php"])
search:
paths:
# http://p2pbg.com/index.php?page=torrents&search=%D0%9A%D0%B0%D1%82%D0%BE&category=0&active=0
- path: index.php
inputs:
page: "torrents"
category: "{{if .Categories }}{{range .Categories}}{{.}};{{end}}{{else}}0;{{end}}"
search: "{{if .Keywords }}{{.Keywords}}{{else}}{{end}}"
active: "1"
rows:
selector: table.lista tr td table.lista tr:has(a[href^="index.php?page=torrent-details"])
fields:
title:
selector: td a[onclick]
attribute: title
filters:
- name: replace
args: ["View details: ", ""]
- name: replace
args: ["Преглед на детайли: ", ""]
- name: replace
args: ["Преглед на детайли: ", ""]
details:
selector: td a[href*="id="]
attribute: href
category:
selector: td a[href*="category="]
attribute: href
filters:
- name: querystring
args: category
download:
selector: td a[href*="id="]
attribute: href
filters:
- name: querystring
args: id
- name: prepend
args: "download.php?id="
- name: append
args: "&f={{.Result.title}}.torrent"
banner:
selector: td img[src="/torrentimg/pic.png"]
attribute: onmouseover
filters:
- name: regexp
args: "src=(.+?) width="
# two flavours
date:
# Yesterday
# Вчера
selector: td:nth-child(6):not(:contains("/"))
optional: true
filters:
- name: replace
args: ["сейчас", "now"]
- name: replace
args: ["сегодня", "Today"]
- name: replace
args: ["вчера", "Yesterday"]
date:
# 14/03/2019
selector: td:nth-child(6):contains("/")
optional: true
filters:
- name: dateparse
args: "02/01/2006"
size:
selector: td:nth-child(7)
seeders:
selector: td:nth-child(8)
leechers:
selector: td:nth-child(9)
grabs:
selector: td:nth-child(10)
downloadvolumefactor:
text: "0"
uploadvolumefactor:
text: "1"

View File

@@ -6,6 +6,9 @@
type: private
encoding: UTF-8
links:
- https://piratbit.top/
- https://piratbit.ml/
legacylinks:
- https://pb.wtf/
- https://piratbit.pw/

View File

@@ -0,0 +1,137 @@
---
site: pleasuredome
name: PleasureDome
description: "PleasureDome is a private site for Arcade / Console / PC Games"
language: en
type: private
encoding: UTF-8
links:
- http://www.pleasuredome.org.uk/
caps:
categorymappings:
# Arcade
- {id: 10, cat: Console, desc: "MAME"}
- {id: 11, cat: Console, desc: "Pinball"}
- {id: 12, cat: Console, desc: "ZiNc"}
- {id: 13, cat: Console, desc: "Nebula"}
- {id: 14, cat: Console, desc: "Daphne"}
- {id: 17, cat: Console, desc: "Fruit"}
- {id: 32, cat: Console, desc: "Neo-Geo"}
- {id: 33, cat: Console, desc: "NonMAME"}
- {id: 34, cat: Console, desc: "RAINE"}
- {id: 35, cat: Console, desc: "Kawaks"}
- {id: 40, cat: Console, desc: "FBA"}
- {id: 51, cat: Console, desc: "HBMAME"}
- {id: 58, cat: Console, desc: "Dice"}
# Computer
- {id: 16, cat: Console, desc: "Amiga"}
- {id: 19, cat: Console, desc: "Amstrad"}
- {id: 20, cat: Console, desc: "Commodore 64"}
- {id: 22, cat: Console, desc: "Apple"}
- {id: 25, cat: Console, desc: "Sinclair"}
- {id: 41, cat: Console, desc: "Doom"}
- {id: 44, cat: Console, desc: "MS-DOS"}
- {id: 50, cat: Console, desc: "eXoDOS"}
- {id: 53, cat: Console, desc: "Win3xO"}
- {id: 55, cat: Console, desc: "Neo Kobe"}
# Computer / Console
- {id: 15, cat: Console, desc: "MESS"}
- {id: 24, cat: Console, desc: "Atari"}
- {id: 31, cat: Console, desc: "TOSEC"}
- {id: 38, cat: Console, desc: "Dreamcast"}
- {id: 43, cat: Console, desc: "ScummVM"}
- {id: 46, cat: Console, desc: "Redump"}
- {id: 48, cat: Console, desc: "Trurip"}
- {id: 52, cat: Console, desc: "GoodTools"}
- {id: 57, cat: Console, desc: "Hyperspin"}
- {id: 61, cat: Console, desc: "RAWdump"}
# Console
- {id: 18, cat: Console, desc: "Sega"}
- {id: 21, cat: Console, desc: "3DO"}
- {id: 23, cat: Console, desc: "PC Engine"}
- {id: 47, cat: Console, desc: "Demul"}
- {id: 49, cat: Console, desc: "Sega Saturn"}
- {id: 54, cat: Console, desc: "No-Intro"}
- {id: 59, cat: Console, desc: "XBOX"}
- {id: 60, cat: Console, desc: "DMC"}
# iscellaneous
- {id: 4, cat: Console, desc: "Other"}
- {id: 37, cat: Console, desc: "Remix Projects"}
- {id: 39, cat: Console, desc: "EmuMovies"}
- {id: 42, cat: Console, desc: "CDi"}
- {id: 45, cat: Console, desc: "NUON"}
modes:
search: [q]
login:
path: login2.php
method: form
form: form[action="login2.php"]
inputs:
uid: "{{ .Config.username }}"
pwd: "{{ .Config.password }}"
error:
- selector: div font[color="#FF0000"]
test:
path: torrents.php
selector: a[href="logout.php"]
search:
paths:
- path: torrents.php
inputs:
search: "{{ .Keywords }}"
category: 0
active: 0
sort: "data"
order: "DESC"
rows:
selector: table[width="100%"] > tbody tr:has(a[href^="download.php?id="])
fields:
title:
selector: td:nth-child(2) a
filters:
- name: replace
args: ["[FREE] ", ""]
details:
selector: td:nth-child(2) a
attribute: href
filters:
- name: replace
args: ["javascript:popdetails('", ""]
- name: replace
args: [");'", ""]
category:
selector: td:nth-child(1) a
attribute: href
filters:
- name: querystring
args: category
download:
optional: true
selector: td:nth-child(4) a
attribute: href
date:
# 19/01/2019
selector: td:nth-child(5)
filters:
- name: dateparse
args: "02/01/2006"
size:
selector: td:nth-child(6)
seeders:
selector: td:nth-child(8)
leechers:
selector: td:nth-child(9) a
grabs:
selector: td:nth-child(10)
downloadvolumefactor:
case:
"img[src=\"images/fdownload.gif\"]": "0"
"*": "1"
uploadvolumefactor:
case:
"*": "1"

View File

@@ -0,0 +1,123 @@
---
site: pthome
name: PThome
description: "PThome is a CHINESE Private Torrent Tracker for 0DAY / GENERAL"
language: zh-CN
type: private
encoding: UTF-8
followredirect: true
links:
- https://www.pthome.net/
caps:
categorymappings:
- {id: 401, cat: Movies, desc: "Movies(电影)"}
- {id: 404, cat: TV/Documentary, desc: "Documentaries(记录片)"}
- {id: 405, cat: TV/Anime, desc: "Animations(动漫)"}
- {id: 402, cat: TV, desc: "TV Series(电视剧)"}
- {id: 403, cat: TV/OTHER, desc: "TV Shows(综艺)"}
- {id: 406, cat: Audio/Video, desc: "Music Videos(MV)"}
- {id: 407, cat: TV/Sport, desc: "Sports(体育)"}
- {id: 408, cat: Audio/Lossless, desc: "HQ Audio(音乐)"}
- {id: 410, cat: Console, desc: "Games(游戏)"}
- {id: 411, cat: PC, desc: "Software(软件)"}
- {id: 412, cat: Books, desc: "Study(学习)"}
- {id: 409, cat: Other, desc: "Misc(其他)"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid]
movie-search: [q, imdbid]
settings:
- name: cookie
type: text
label: Cookie
- name: info
type: info
label: How to get the Cookie
default: "<ol><li>Login to this tracker in your browser<li>Open the <b>DevTools</b> panel by pressing <b>F12</b><li>Select the <b>Network</b> tab<li>Click on the <b>Doc</b> button<li>Refresh the page by pressing <b>F5</b><li>Select the <b>Headers</b> tab<li>Find 'cookie:' in the <b>Request Headers</b> section<li>Copy & paste the whole cookie string to here</ol>"
login:
method: cookie
inputs:
cookie: "{{ .Config.cookie }}"
test:
path: index.php
ratio:
path: index.php
selector: table tr td.bottom
filters:
- name: replace
args: ["分享率:","Ratio:"] # for simplified chinese language setting
- name: regexp
args: "Ratio:\\s(.*?)\\s\\s"
search:
paths:
- path: torrents.php
inputs:
$raw: "{{range .Categories}}cat{{.}}=1&{{end}}"
incldead: "0"
spstate: "0"
inclbookmarked: "0"
search: "{{if .Query.IMDBID}}{{.Query.IMDBID}}{{else}}{{.Keywords}}{{end}}"
search_area: "{{if .Query.IMDBID}}4{{else}}0{{end}}"
search_mode: "0"
rows:
selector: table.torrents tr:has(a[href^="?cat="])
filters:
- name: andmatch
fields:
title:
selector: td.torrents-box a
attribute: title
category:
selector: a[href^="?cat="]
attribute: href
filters:
- name: querystring
args: cat
details:
selector: a[href^="details.php?id="]
attribute: href
download:
selector: a[href^="details.php?id="]
attribute: href
filters:
- name: replace
args: ["details.php", "download.php"]
imdb:
selector: a[href^="http://www.imdb.com/title/tt"]
attribute: href
size:
selector: td:nth-child(5)
grabs:
selector: td:nth-child(8)
seeders:
selector: td:nth-child(6)
leechers:
selector: td:nth-child(7)
date:
selector: td:nth-child(4) span
attribute: title
filters:
- name: dateparse
args: "2006-01-02 15:04:05"
downloadvolumefactor:
case:
img.pro_free: "0"
img.pro_free2up: "0"
img.pro_50pctdown: "0.5"
img.pro_50pctdown2up: "0.5"
img.pro_30pctdown: "0.3"
"*": "1"
uploadvolumefactor:
case:
img.pro_50pctdown2up: "2"
img.pro_free2up: "2"
img.pro_2up: "2"
"*": "1"

View File

@@ -13,10 +13,8 @@
caps:
categorymappings:
- {id: 1, cat: TV/Sport, desc: "BTCC"}
- {id: 2, cat: TV/Sport, desc: "Documentaries/TV"}
- {id: 3, cat: TV/Sport, desc: "DTM"}
- {id: 4, cat: TV/Sport, desc: "Formula 1 2018"}
- {id: 6, cat: TV/Sport, desc: "Formula 1 2017-1950 (HD)"}
- {id: 21, cat: TV/Sport, desc: "Formula 1 2017-1950 (SD)"}
- {id: 22, cat: TV/Sport, desc: "Formula 2"}
- {id: 23, cat: TV/Sport, desc: "Formula E"}
- {id: 24, cat: TV/Sport, desc: "Misc"}
@@ -27,8 +25,19 @@
- {id: 33, cat: TV/Sport, desc: "Touring Cars"}
- {id: 50, cat: TV/Sport, desc: "WRC"}
- {id: 53, cat: TV/Sport, desc: "Open-Wheelers"}
- {id: 54, cat: TV/Sport, desc: "Documentaries/Movies"}
- {id: 55, cat: TV/Sport, desc: "Season Reviews"}
- {id: 56, cat: TV/Sport, desc: "WRX"}
- {id: 57, cat: TV/Sport, desc: "WEC"}
- {id: 58, cat: TV/Sport, desc: "Formula 1 Full Seasons"}
- {id: 60, cat: TV/Sport, desc: "Drag Racing"}
- {id: 61, cat: TV/Sport, desc: "Rally"}
- {id: 62, cat: TV/Sport, desc: "Formula 1 Testing"}
- {id: 63, cat: TV/Sport, desc: "Supercars"}
- {id: 64, cat: TV/Sport, desc: "Indycar Complete Seasons"}
- {id: 65, cat: TV/Sport, desc: "NASCAR Complete Seasons"}
- {id: 66, cat: TV/Sport, desc: "Documentaries"}
- {id: 67, cat: TV/Sport, desc: "Formula 1 2019"}
- {id: 68, cat: TV/Sport, desc: "Formula 1 2018-1950"}
modes:
search: [q]
@@ -39,10 +48,19 @@
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
remember: 1
error:
- selector: table.main:contains("Login Failed!")
- selector: form[action$="/login"] .text-red
test:
path: torrents
selector: a[href$="/logout"]
ratio:
path: /
selector: span:has(i.fa-sync-alt)
filters:
- name: regexp
args: "Ratio : (\\d+)"
search:
paths:
@@ -50,8 +68,12 @@
inputs:
$raw: "{{range .Categories}}categories[]={{.}}&{{end}}"
search: "{{ .Keywords }}"
description: ""
uploader: ""
sorting: created_at
imdb: ""
tvdb: ""
tmdb: ""
sort: created_at
direction: desc
qty: 100
rows:
@@ -118,3 +140,4 @@
"i[data-original-title=\"Double upload\"]": "2" # Single Torrent Double Upload
"i[data-original-title=\"Double Upload\"]": "2" # Global Double Upload
"*": "1"
# UNIT3D

View File

@@ -1,40 +1,54 @@
---
site: scenerush
name: SceneRush
description: "SceneRush is a Portuguese general tracker."
description: "SceneRush is a PORTUGUESE Private Torrent Tracker for 0DAY / GENERAL"
language: pt-PT
type: private
encoding: UTF-8
links:
- https://www.scene-rush.pt/
legacylinks:
- http://www.scene-rush.pt/
caps:
categorymappings:
- {id: 1, cat: PC, desc: "Apps"}
- {id: 2, cat: Movies, desc: "XVID"}
- {id: 3, cat: Movies/DVD, desc: "DVD"}
- {id: 4, cat: TV, desc: "TV XVID"}
- {id: 5, cat: PC/Games, desc: "PC Games"}
- {id: 6, cat: Movies/HD, desc: "HD"}
- {id: 7, cat: XXX, desc: "XXX"}
- {id: 8, cat: TV/Anime, desc: "ANIME"}
- {id: 8, cat: TV/Anime, desc: "Anime"}
- {id: 9, cat: Audio, desc: "Audio"}
- {id: 10, cat: Other, desc: "Other"}
- {id: 11, cat: Console/Xbox 360, desc: "XBOX 360"}
- {id: 12, cat: Console/PSP, desc: "PSP"}
- {id: 13, cat: TV/Documentary, desc: "DOC"}
- {id: 17, cat: TV/HD, desc: "TV-X264"}
- {id: 13, cat: TV/Documentary, desc: "Doc"}
- {id: 14, cat: Movies/DVD, desc: "Movies DVD"}
- {id: 15, cat: Console, desc: "PS2"}
- {id: 16, cat: TV/Sport, desc: "TV WWE"}
- {id: 17, cat: TV/HD, desc: "TV X264"}
- {id: 18, cat: TV, desc: "TV DVD"}
- {id: 19, cat: XXX/DVD, desc: "XXX DVD"}
- {id: 20, cat: Movies/DVD, desc: "A.DVD"}
- {id: 21, cat: PC/Mac, desc: "MAC"}
- {id: 20, cat: TV/Anime, desc: "Anime DVD"}
- {id: 21, cat: PC/Mac, desc: "Mac"}
- {id: 23, cat: Movies, desc: "Boxset"}
- {id: 31, cat: Other, desc: "OFF"}
- {id: 32, cat: Movies/BluRay, desc: "BluRay"}
- {id: 33, cat: Console/Wii, desc: "WII"}
- {id: 34, cat: Console/PS3, desc: "PS3"}
- {id: 35, cat: Movies/HD, desc: "A.HD"}
- {id: 35, cat: TV/Anime, desc: "Anime HD"}
- {id: 36, cat: PC/Phone-Android, desc: "Android"}
- {id: 37, cat: Movies/DVD, desc: "C.DVDR"}
- {id: 37, cat: Movies/DVD, desc: "Custom DVDR"}
- {id: 38, cat: Movies/Other, desc: "CAM TS"}
- {id: 39, cat: Other, desc: "GPS"}
- {id: 40, cat: Console/PS4, desc: "PS4"}
- {id: 41, cat: Movies/SD, desc: "BDRIP"}
- {id: 41, cat: Movies/BluRay, desc: "BDRIP"}
- {id: 42, cat: Movies/WEBDL, desc: "WEB DL"}
- {id: 43, cat: Books, desc: "EBOOK"}
- {id: 44, cat: TV/Sport, desc: "SPORTS"}
- {id: 43, cat: Books, desc: "Ebook"}
- {id: 44, cat: TV/Sport, desc: "Sports"}
- {id: 46, cat: Movies/UHD, desc: "4K"}
modes:
search: [q]
tv-search: [q]
@@ -45,18 +59,23 @@
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: td.embedded:has(h2:contains("failed")+table)
- selector: h2:contains("Falhou")
message:
selector: table tr td.text
test:
path: browse.php
path: index.php
selector: a[href="logout.php"]
ratio:
path: browse.php
selector: td[width='60'][style=['text-align:center;'] > span > font
selector: td.text:contains("Ratio")
filters:
- name: regexp
args: "Ratio actual (.*?) ]"
search:
paths:
- path: browse.php
method: post
inputs:
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
search: "{{ .Query.Keywords }}"
@@ -93,7 +112,7 @@
- name: re_replace
args: ["(\\d{4}-\\d{2}-\\d{2})(\\d{2}:\\d{2}:\\d{2})","$1 $2"]
- name: dateparse
args: "2018-12-30 22:30:31"
args: "2006-01-02 15:04:05"
downloadvolumefactor:
case:
"i.fg-gold": "0"

View File

@@ -0,0 +1,104 @@
---
site: sharewood
name: Sharewood
description: "sharewood is a Semi-Private FRENCH Torrent Tracker for GENERAL"
language: fr-fr
type: semi-private
encoding: UTF-8
links:
- https://www.sharewood.tv/
caps:
categorymappings:
- {id: "Vidéos Torrent", cat: Movies, desc: "Vidéos"}
- {id: "Vidéos Torrent", cat: TV, desc: "Vidéos"}
- {id: "Audios Torrent", cat: Audio, desc: "Audios"}
- {id: "Applications Torrent", cat: PC, desc: "Applications"}
- {id: "Ebooks Torrent", cat: Books, desc: "Ebooks"}
- {id: "Jeux-Vidéos Torrent", cat: Console, desc: "Jeux-Vidéos"}
- {id: "Formations Torrent", cat: Other, desc: "Formations"}
- {id: "XXX Torrent", cat: XXX, desc: "XXX"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
login:
path: login
method: form
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
remember: 1
selectorinputs:
_token:
selector: meta[name="csrf-token"]
attribute: content
error:
- selector: form[action$="/login"] .text-red
test:
path: /
selector: a[href$="/logout"]
ratio:
path: /
selector: li:has(i.fa-signal)
filters:
- name: regexp
args: "Ratio : (\\d+)"
search:
paths:
- path: filterTorrents
inputs:
search: "{{ .Keywords }}"
uploader: ""
sort: created_at
direction: desc
qty: 100
rows:
selector: div.table-responsive-line
fields:
category:
selector: i.torrent-icon
attribute: data-original-title
title:
selector: a.view-torrent
download:
selector: a.view-torrent
attribute: href
filters:
- name: replace
args: ["/torrents/", "/download/"]
details:
selector: a.view-torrent
attribute: href
size:
selector: div.col-detail div.row div:nth-child(2)
seeders:
selector: div.bouton-s
leechers:
selector: div.bouton-l
date:
selector: div.col-detail div.row div span
filters:
- name: replace
args: ["il y a ", ""]
- name: replace
args: ["heure", "hour"]
- name: replace
args: ["jour", "day"]
- name: replace
args: ["semaine", "week"]
- name: replace
args: ["mois", "month"]
- name: append
args: " ago"
downloadvolumefactor:
case:
"*": "1"
uploadvolumefactor:
case:
"*": "1"
# UNIT3D

View File

@@ -1,17 +1,19 @@
---
site: btxpress
name: BTXpress
description: "HD Tracker Movies/TV"
language: en-us
site: sharingue
name: Sharingue
description: "Sharingue is a BRAZILIAN Private Tracker for TV / MOVIES / ANIME / MUSIC"
language: pt-br
type: private
encoding: UTF-8
links:
- https://btxpress.org/
- https://www.sharingue.live/
caps:
categorymappings:
- {id: 1, cat: Movies, desc: "Movies"}
- {id: 2, cat: TV, desc: "TV"}
- {id: 1, cat: Movies, desc: "Movies (Filmes)"}
- {id: 3, cat: Audio, desc: "Music (Músicas)"}
- {id: 4, cat: TV, desc: "TV (Séries)"}
- {id: 5, cat: TV/Anime, desc: "Anime (Animes)"}
modes:
search: [q]
@@ -24,10 +26,23 @@
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
remember: 1
selectorinputs:
_token:
selector: meta[name="csrf-token"]
attribute: content
error:
- selector: table.main:contains("Login Failed!")
- selector: form[action$="/login"] .text-red
test:
path: torrents
path: /
selector: a[href$="/logout"]
ratio:
path: /
selector: span:has(i.fa-sync-alt)
filters:
- name: regexp
args: "Ratio : (\\d+)"
search:
paths:
@@ -40,7 +55,7 @@
tvdb: ""
tmdb: ""
mal: ""
sorting: created_at
sort: created_at
direction: desc
qty: 100
rows:
@@ -61,13 +76,13 @@
selector: a.view-torrent
attribute: href
size:
selector: td:nth-child(4)
seeders:
selector: td:nth-child(6)
leechers:
selector: td:nth-child(7)
grabs:
selector: td:nth-child(5)
seeders:
selector: td:nth-child(7)
leechers:
selector: td:nth-child(8)
grabs:
selector: td:nth-child(6)
filters:
- name: regexp
args: ([\d\.]+)
@@ -100,10 +115,11 @@
downloadvolumefactor:
case:
"i[data-original-title=\"100% Free\"]": "0" # Single Torrent Freeleech
"i[data-original-title=\"Global FreeLeech\"]": "0" # Global Freeleech
"i[data-original-title=\"Global freeleech\"]": "0" # Global Freeleech
"*": "1"
uploadvolumefactor:
case:
"i[data-original-title=\"Double upload\"]": "2" # Single Torrent Double Upload
"i[data-original-title=\"Double Upload\"]": "2" # Global Double Upload
"*": "1"
# UNIT3D

View File

@@ -29,14 +29,14 @@
movie-search: [q]
settings:
- name: itorrents-links
- name: btdb.eu-links
type: checkbox
label: Add download links via itorrents.org
label: Add download links via btdb.eu
default: true
- name: info
type: info
label: ITorrents Note
default: Without the itorrents option only magnet links will be provided.
label: btdb.eu Note
default: Without the btdb.eu option only magnet links will be provided.
search:
# https://www.skytorrents.lol/?search=mr+mercedes+s02e05&sort=created
@@ -62,11 +62,11 @@
details:
selector: td a
attribute: href
download-itorrents:
selector: a[href^="//itorrents"]
download-btdb.eu:
selector: a[href^="//btdb.eu"]
attribute: href
download:
text: "{{if .Config.itorrents-links}}{{ .Result.download-itorrents }}{{else}}{{end}}"
text: "{{if .Config.btdb.eu-links}}{{ .Result.download-btdb.eu }}{{else}}{{end}}"
magnet:
selector: a[href^="magnet:?"]
attribute: href

View File

@@ -128,3 +128,4 @@
"i[data-original-title=\"Double upload\"]": "2" # Single Torrent Double Upload
"i[data-original-title=\"Double Upload\"]": "2" # Global Double Upload
"*": "1"
# UNIT3D

View File

@@ -6,6 +6,8 @@
type: private
encoding: UTF-8
links:
- https://torrent-turk.co/
legacylinks:
- https://torrent-turk.org/
caps:
@@ -13,23 +15,43 @@
- {id: 149, cat: Movies, desc: "Movies/Turkish"}
- {id: 151, cat: Movies/HD, desc: "Movies/Turkish/1080p"}
- {id: 152, cat: Movies/HD, desc: "Movies/Turkish/720p"}
- {id: 153, cat: Movies/DVD, desc: "Movies/Turkish/DVD5-DVD9"}
- {id: 154, cat: Movies/WEBDL, desc: "Movies/Turkish/BRRip-HDRip-DVDRip-WebDL"}
- {id: 155, cat: Movies/Other, desc: "Movies/Turkish/Boxset"}
- {id: 156, cat: Movies, desc: "Movies/Foreign"}
- {id: 157, cat: Movies/UHD, desc: "Movies/Foreign/4K"}
- {id: 157, cat: Movies/UHD, desc: "Movies/Foreign/4K / 3D"}
- {id: 159, cat: Movies/HD, desc: "Movies/Foreign/1080p"}
- {id: 160, cat: Movies/HD, desc: "Movies/Foreign/720p"}
- {id: 161, cat: Movies/DVD, desc: "Movies/Foreign/DVD5-DVD9"}
- {id: 162, cat: Movies/WEBDL, desc: "Movies/Foreign/BRRip-HDRip-DVDRip-WebDL"}
- {id: 163, cat: Movies/Other, desc: "Movies/Foreign/Boxset"}
- {id: 164, cat: TV, desc: "TV"}
- {id: 165, cat: TV, desc: "TV/Turkish"}
- {id: 166, cat: TV, desc: "TV/Foreign"}
- {id: 167, cat: TV/Other, desc: "TV Programs"}
- {id: 185, cat: TV/Documentary, desc: "TV/Documentary"}
- {id: 168, cat: TV/Other, desc: "TV/Other"}
- {id: 171, cat: Audio, desc: "Music"}
- {id: 172, cat: Audio, desc: "Music/Turkish"}
- {id: 173, cat: Audio, desc: "Music/Foreign"}
- {id: 184, cat: Audio, desc: "Music/Discography"}
- {id: 174, cat: Audio/Video, desc: "Music/Video"}
- {id: 175, cat: PC, desc: "Apps / Game / Graphics"}
- {id: 176, cat: PC, desc: "Apps"}
- {id: 177, cat: Other, desc: "Pictures"}
- {id: 183, cat: Books/Ebook, desc: "EBook"}
- {id: 178, cat: Books/Technical, desc: "Training Sets"}
- {id: 179, cat: PC, desc: "OS"}
- {id: 180, cat: PC/Games, desc: "PC/Games"}
- {id: 181, cat: Console, desc: "Playstation"}
modes:
search: [q]
tv-search: [q]
tv-search: [q, season, ep]
movie-search: [q]
settings:
@@ -42,18 +64,18 @@
- name: info
type: info
label: Layout
default: Only the classic profile is supported. Make sure to set the "Torrent listesi" option in your profile to "Klasik".
default: "<ol><li>Only the English Classic profile is supported.<li>Make sure to set the <b>Torrent Listing (Listeleme Biçimi)</b> option in your profile to <b>Classic (Klasik)</b><li>And set the <b>Language (Dil)</b> to <b>English</b><li>Using the <i>Modern</i> theme will prevent results, and using <i>Turkish</i> will prevent upload dates.</ol>"
login:
path: ?p=home&pid=1
method: form
form: form#loginbox_form
form: form#sls_form
submitpath: ajax/login.php
inputs:
action: "login"
loginbox_membername: "{{ .Config.username }}"
loginbox_password: "{{ .Config.password }}"
loginbox_remember: "true"
loginbox_remember: 1
selectorinputs:
securitytoken:
selector: "script:contains(\"stKey: \")"
@@ -98,6 +120,26 @@
download:
selector: a[href*="?p=torrents&pid=10&action=download"]
attribute: href
date:
optional: true
# Uploaded 30-01-2019 15:02 by
selector: td.torrent_name:not(:contains(" at "))
filters:
- name: regexp
args: "Uploaded (.+?) by"
- name: dateparse
args: "02-01-2006 15:04"
date:
optional: true
# Uploaded Friday at 05:11 by
# Uploaded Today at 00:48 by
# Uploaded Yesterday at 23:57 by
selector: td.torrent_name:contains(" at ")
filters:
- name: regexp
args: "Uploaded (.+?) by"
- name: replace
args: [" at ", " "]
size:
selector: a[rel="torrent_size"]
seeders:
@@ -113,11 +155,9 @@
downloadvolumefactor:
case:
"img[title=\"FREE!\"]": "0"
"img[title=\"Download Multiplier: 0.5\"]": "0.5"
"*": "1"
uploadvolumefactor:
case:
"img[title=\"Upload Multiplier: 2\"]": "2"
"*": "1"
date:
selector: td.torrent_name > abbr.timeago
optional: true
attribute: data-time

View File

@@ -7,8 +7,8 @@
encoding: UTF-8
followredirect: true
links:
- https://wvw.torrent9.uno/
- https://wvw.t9.pe/
legacylinks:
- http://www.torrent9.ec/
- http://www.torrent9.red/
@@ -24,6 +24,8 @@
- https://ww1.torrent9.ph/
- https://torrent9.ga/
- https://www.torrent9.uno/
- https://wvw.torrent9.uno/
- https://ww1.torrent9.uno/
caps:
categorymappings:
@@ -39,12 +41,14 @@
search: [q]
tv-search: [q, season, ep]
settings: []
download:
selector: a[href^="/downloading/"]
search:
paths:
- path: "{{ if .Keywords }}/search_torrent/{{ .Keywords }}/page-0{{else}}/top_torrent.php{{end}}"
- path: "{{ if .Keywords }}/search_torrent/{{ re_replace .Keywords \"[']+\" \"\" }}/page-0{{else}}/top_torrent.php{{end}}"
rows:
selector: div.table-responsive > table tbody tr
fields:

View File

@@ -1,63 +0,0 @@
---
site: torrentcouch
name: TorrentCouch
description: "TorrentCounch is a Public TV tracker"
language: en-us
type: public
encoding: UTF-8
links:
- https://torrentcouch.net/
legacylinks:
- https://torrentcouch.com/
caps:
categorymappings:
- {id: 1, cat: TV, desc: "TV"}
modes:
search: [q]
tv-search: [q, season, ep]
settings: []
download:
selector: tr td a[href*="/files/download/"]
search:
# https://torrentcouch.com/?s=expanse
# https://torrentcouch.net/page/3/?s=expanse
paths:
- path: "{{if .Keywords}}/?s={{ .Keywords}}{{else}}/{{end}}"
- path: "{{if .Keywords}}/page/2/?s={{ .Keywords}}{{else}}{{end}}"
- path: "{{if .Keywords}}/page/3/?s={{ .Keywords}}{{else}}{{end}}"
- path: "{{if .Keywords}}/page/4/?s={{ .Keywords}}{{else}}{{end}}"
rows:
selector: article
fields:
title:
selector: h1.entry-title a
category:
text: "1"
details:
selector: h1.entry-title a
attribute: href
description:
selector: p
download:
selector: h1.entry-title a
attribute: href
size:
text: "500 MB"
seeders:
text: "1"
leechers:
text: "1"
date:
selector: span.posted-on a time
filters:
- name: dateparse
args: "January 2, 2006"
downloadvolumefactor:
text: "0"
uploadvolumefactor:
text: "1"

View File

@@ -66,39 +66,39 @@
selector: div[class="tgxtablerow clickable-row click"]
fields:
title:
selector: div.tgxtablecell:nth-child(3) div a
selector: div a[href^="/torrent/"]
attribute: title
category:
selector: div.tgxtablecell a
selector: div a[href^="/torrents.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
details:
selector: div.tgxtablecell:nth-child(3) div a
selector: div a[href^="/torrent/"]
attribute: href
download:
selector: div.tgxtablecell:nth-child(4) a
selector: div a[href*="/get/"]
attribute: href
magnet:
selector: div.tgxtablecell:nth-child(4) a:nth-child(2)
selector: div a[href^="magnet:?"]
attribute: href
size:
selector: div.tgxtablecell:nth-child(7) span
selector: div span[style^="border-radius"]
seeders:
selector: div.tgxtablecell:nth-child(10) span font b
selector: div span[title="Seeders/Leechers"] font b
leechers:
selector: div.tgxtablecell:nth-child(10) span font:nth-child(2) b
selector: div span[title="Seeders/Leechers"] font:nth-child(2) b
date:
# 20Mins ago
optional: true
selector: div.tgxtablecell:nth-child(11) small:contains("ago")
selector: div.tgxtablecell:last-of-type:contains("ago")
filters:
- name: timeago
date:
# 24/12/18 13:55
optional: true
selector: div.tgxtablecell:nth-child(11) small:contains(":")
selector: div.tgxtablecell:last-of-type small:contains(":")
filters:
- name: dateparse
args: "02/01/06 15:04"

View File

@@ -4,7 +4,7 @@
description: "Torrent Sector Crew (TSC) is a GERMAN Private Torrent Tracker for MOVIES / TV / GENERAL"
language: de-de
type: private
encoding: windows-1252
encoding: ISO-8859-1
links:
- https://tsctracker.org/
legacylinks:
@@ -13,70 +13,64 @@
caps:
categorymappings:
# Apps
- {id: 65, cat: PC/Phone-Android, desc: "Android"}
- {id: 83, cat: PC/Phone-IOS, desc: "iOS"}
- {id: 107, cat: PC/0day, desc: "Linux"}
- {id: 48, cat: PC/Mac, desc: "MAC"}
- {id: 109, cat: PC, desc: "Sonstige"}
- {id: 22, cat: PC/0day, desc: "Win"}
- {id: 65, cat: PC/Phone-Android, desc: "Apps Android"}
- {id: 83, cat: PC/Phone-IOS, desc: "Apps iOS"}
- {id: 107, cat: PC/0day, desc: "Apps Linux"}
- {id: 48, cat: PC/Mac, desc: "Apps MAC"}
- {id: 109, cat: PC, desc: "Apps Sonstige"}
- {id: 22, cat: PC/0day, desc: "Apps Win"}
# Audio
- {id: 24, cat: Audio/Audiobook, desc: "aBooks"}
- {id: 104, cat: Audio, desc: "Disco's"}
- {id: 38, cat: Audio/Audiobook, desc: "Hörspiel"}
- {id: 6, cat: Audio, desc: "Musik"}
- {id: 82, cat: Audio, desc: "Tracks"}
- {id: 29, cat: Audio/Video, desc: "Videos"}
- {id: 24, cat: Audio/Audiobook, desc: "Audio aBooks"}
- {id: 104, cat: Audio, desc: "Audio Disco's"}
- {id: 38, cat: Audio/Audiobook, desc: "Audio Hörspiel"}
- {id: 6, cat: Audio, desc: "Audio Musik"}
- {id: 82, cat: Audio, desc: "Audio Tracks"}
- {id: 29, cat: Audio/Video, desc: "Audio Videos"}
# Doku
- {id: 113, cat: TV/Documentary, desc: "3D"}
- {id: 76, cat: TV/Documentary, desc: "HD"}
- {id: 78, cat: TV/Documentary, desc: "Packs"}
- {id: 75, cat: TV/Documentary, desc: "SD"}
- {id: 114, cat: TV/Documentary, desc: "Sonstige"}
- {id: 77, cat: TV/Documentary, desc: "Untouched"}
- {id: 113, cat: TV/Documentary, desc: "Doku 3D"}
- {id: 76, cat: TV/Documentary, desc: "Doku HD"}
- {id: 78, cat: TV/Documentary, desc: "Doku Packs"}
- {id: 75, cat: TV/Documentary, desc: "Doku SD"}
- {id: 114, cat: TV/Documentary, desc: "Doku Sonstige"}
- {id: 77, cat: TV/Documentary, desc: "Doku Untouched"}
# Filme
- {id: 54, cat: Movies/HD, desc: "1080p"}
- {id: 5, cat: Movies/3D, desc: "3D"}
- {id: 55, cat: Movies/HD, desc: "720p"}
- {id: 111, cat: Movies, desc: "Anime"}
- {id: 43, cat: Movies/BluRay, desc: "BluRay"}
- {id: 20, cat: Movies/DVD, desc: "DVDR"}
- {id: 120, cat: Movies/Foreign, desc: "Int."}
- {id: 119, cat: Movies, desc: "Remux"}
- {id: 121, cat: Movies/HD, desc: "UHD"}
- {id: 36, cat: Movies/HD, desc: "x264"}
- {id: 19, cat: Movies/SD, desc: "XviD"}
- {id: 54, cat: Movies/HD, desc: "Filme 1080p"}
- {id: 5, cat: Movies/3D, desc: "Filme 3D"}
- {id: 55, cat: Movies/HD, desc: "Filme 720p"}
- {id: 111, cat: Movies, desc: "Filme Anime"}
- {id: 43, cat: Movies/BluRay, desc: "Filme BluRay"}
- {id: 20, cat: Movies/DVD, desc: "Filme DVDR"}
- {id: 120, cat: Movies/Foreign, desc: "Filme Int."}
- {id: 119, cat: Movies, desc: "Filme Remux"}
- {id: 121, cat: Movies/HD, desc: "Filme UHD"}
- {id: 124, cat: Movies/HD, desc: "Filme UHD Remux"}
- {id: 36, cat: Movies/HD, desc: "Filme SD"}
# Serien
- {id: 112, cat: TV/Anime, desc: "Anime"}
- {id: 69, cat: TV/HD, desc: "HD"}
- {id: 72, cat: TV/Foreign, desc: "Int."}
- {id: 68, cat: TV, desc: "Packs"}
- {id: 66, cat: TV/SD, desc: "SD"}
- {id: 108, cat: TV, desc: "TV-Shows"}
- {id: 112, cat: TV/Anime, desc: "Serien Anime"}
- {id: 69, cat: TV/HD, desc: "Serien HD"}
- {id: 72, cat: TV/Foreign, desc: "Serien Int."}
- {id: 68, cat: TV, desc: "Serien Packs"}
- {id: 66, cat: TV/SD, desc: "Serien SD"}
- {id: 108, cat: TV, desc: "Serien TV-Shows"}
# Sonstige
- {id: 117, cat: Other, desc: "Diverses"}
- {id: 28, cat: Books, desc: "eBooks"}
- {id: 42, cat: TV/Sport, desc: "Sport"}
- {id: 103, cat: Other, desc: "Tutorials"}
- {id: 9, cat: Other, desc: "Wallpaper"}
- {id: 64, cat: XXX, desc: "XXX"}
- {id: 117, cat: Other, desc: "Sonstige Diverses"}
- {id: 28, cat: Books, desc: "Sonstige eBooks"}
- {id: 42, cat: TV/Sport, desc: "Sonstige Sport"}
- {id: 103, cat: Other, desc: "Sonstige Tutorials"}
- {id: 9, cat: Other, desc: "Sonstige Wallpaper"}
- {id: 64, cat: XXX, desc: "Sonstige XXX"}
# Spiele
- {id: 115, cat: PC/Mac, desc: "MAC"}
- {id: 37, cat: Console/NDS, desc: "Nintendo"}
- {id: 4, cat: PC/Games, desc: "PC"}
- {id: 58, cat: Console/PS4, desc: "PSX"}
- {id: 116, cat: Other, desc: "Sonstige"}
- {id: 50, cat: Console/Xbox, desc: "XBOX"}
- {id: 115, cat: PC/Mac, desc: "Spiele MAC"}
- {id: 37, cat: Console/NDS, desc: "Spiele Nintendo"}
- {id: 4, cat: PC/Games, desc: "Spiele PC"}
- {id: 58, cat: Console/PS4, desc: "Spiele PSX"}
- {id: 116, cat: Other, desc: "Spiele Sonstige"}
- {id: 50, cat: Console/Xbox, desc: "Spiele XBOX"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
settings:
- name: pin
@@ -118,62 +112,103 @@
- path: browse.php
inputs:
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
search: "{{ .Query.Keywords }}"
search: "{{ .Keywords }}"
incldead: "1"
orderby: "added"
sort: desc
sort: "desc"
rows:
selector: "h2 +p + br + table.tablebrowse > tbody > tr[style=\"height: 45px;\"], tr:contains(\"Weiter\") > td > table.tablebrowse > tbody > tr[style=\"height: 45px;\"]"
selector: table.tableinborder:has(a[href^="download_ssl.php"])
fields:
title:
selector: a[title][href^="details.php"]
attribute: title
category:
selector: a[href*="cat="]
attribute: href
filters:
- name: querystring
args: cat
selector: td[style][colspan]
case:
td[style$="#000033;"]:contains("Android"): 65
td[style$="#000033;"]:contains("iOS"): 83
td[style$="#000033;"]:contains("Linux"): 107
td[style$="#000033;"]:contains("MAC"): 48
td[style$="#000033;"]:contains("Sonstige"): 109
td[style$="#000033;"]:contains("Win"): 22
td[style$="#1d2f8c;"]:contains("aBooks"): 24
td[style$="#1d2f8c;"]:contains("Disco's"): 104
td[style$="#1d2f8c;"]:contains("Hörspiel"): 38
td[style$="#1d2f8c;"]:contains("Musik"): 6
td[style$="#1d2f8c;"]:contains("Tracks"): 82
td[style$="#1d2f8c;"]:contains("Videos"): 29
td[style$="#000000;"]:contains("3D"): 113
td[style$="#000000;"]:contains("HD"): 76
td[style$="#000000;"]:contains("Packs"): 78
td[style$="#000000;"]:contains("SD"): 75
td[style$="#000000;"]:contains("Sonstige"): 114
td[style$="#000000;"]:contains("Untouched"): 77
td[style$="#55316e;"]:contains("1080p"): 54
td[style$="#55316e;"]:contains("3D"): 5
td[style$="#55316e;"]:contains("720p"): 55
td[style$="#55316e;"]:contains("Anime"): 111
td[style$="#55316e;"]:contains("BluRay"): 43
td[style$="#55316e;"]:contains("DVDR"): 20
td[style$="#55316e;"]:contains("Int"): 120
td[style$="#55316e;"]:contains("Remux"): 119
td[style$="#55316e;"]:contains("UHD"): 121
td[style$="#55316e;"]:contains("UHD Remux"): 124
td[style$="#55316e;"]:contains("SD"): 36
td[style$="#620000;"]:contains("Anime"): 112
td[style$="#620000;"]:contains("HD"): 69
td[style$="#620000;"]:contains("Int"): 72
td[style$="#620000;"]:contains("Packs"): 68
td[style$="#620000;"]:contains("SD"): 66
td[style$="#620000;"]:contains("TV-Shows"): 108
td[style$="#003300;"]:contains("Diverses"): 117
td[style$="#003300;"]:contains("eBooks"): 28
td[style$="#003300;"]:contains("Sport"): 42
td[style$="#003300;"]:contains("Tutorials"): 103
td[style$="#003300;"]:contains("Wallpaper"): 9
td[style$="#FF00FF;"]:contains("XXX"): 64
td[style$="#FF3300;"]:contains("MAC"): 115
td[style$="#FF3300;"]:contains("Nintendo"): 37
td[style$="#FF3300;"]:contains("PC"): 4
td[style$="#FF3300;"]:contains("PSX"): 58
td[style$="#FF3300;"]:contains("Sonstige"): 116
td[style$="#FF3300;"]:contains("XBOX"): 50
comments:
selector: a[href*="&tocomm="]
attribute: href
download:
selector: a[href^="download_ssl.php"]
attribute: href
files:
selector: td:nth-child(3)
grabs:
selector: td:nth-child(9)
selector: td:has(a[href*="&tosnatchers="])
filters:
- name: replace
args: ["-mal", ""]
- name: regexp
args: "(\\d+) x"
size:
selector: td:nth-child(6)
selector: td:has(a[href*="&filelist="])
filters:
- name: regexp
args: "(.*?) in"
- name: replace
args: [".", ""]
- name: replace
args: [",", "."]
files:
selector: td:has(a[href*="&filelist="]) > b
seeders:
selector: td:nth-child(7)
filters:
- name: regexp
args: "(\\d+)"
selector: td:has(a[href*="&toseeders="]) > font
leechers:
selector: td:nth-child(8)
filters:
- name: regexp
args: "(\\d+)"
selector: td:has(a[href*="&todlers="]) > font
date:
selector: td:nth-child(5)
remove: br
selector: td:has(a[href*="&tocomm="]) ~ td
filters:
- name: re_replace
args: ["\\s", " "]
- name: dateparse
args: "02.01.200615:04:05"
args: "02.01.2006 15:04:05"
downloadvolumefactor:
case:
"font:contains(\"[OnlyUpload]\")": "0"
"font:contains(\"[-40 Download]\")": "0.6"
img[src="pic/oupic.gif"]: "0"
img[src="pic/-40.gif"]: "0.6"
"*": "1"
uploadvolumefactor:
case:

View File

@@ -15,19 +15,22 @@
- {id: 9, cat: TV/Anime, desc: "Anime/SD"}
- {id: 1, cat: PC/0day, desc: "Apps"}
- {id: 27, cat: Books, desc: "Bookware"}
- {id: 32, cat: Books/EBook, desc: "EBOOK"}
- {id: 32, cat: Books/Ebook, desc: "EBOOK"}
- {id: 47, cat: Console/Other, desc: "GAMES/NSW"}
- {id: 60, cat: Console/Other, desc: "GAMES/ATARI"}
- {id: 63, cat: Console/Other, desc: "GAMES/UPDATES"}
- {id: 2, cat: PC/Games, desc: "Games/PC"}
- {id: 8, cat: Console/PS3, desc: "Games/PS3"}
- {id: 30, cat: Console/PS4, desc: "GAMES/PS4"}
- {id: 7, cat: Console/PSP, desc: "Games/PSP"}
- {id: 16, cat: Console/Wii, desc: "GAMES/WII"}
- {id: 29, cat: Console/WiiU, desc: "GAMES/WIIU"}
- {id: 17, cat: Console/XBox360, desc: "GAMES/XBOX360"}
- {id: 17, cat: Console/XBox 360, desc: "GAMES/XBOX360"}
- {id: 50, cat: Movies/BluRay, desc: "Movies/Bluray-UHD"}
- {id: 31, cat: Movies/BluRay, desc: "MOVIES/COMPLETE-BLURAY"}
- {id: 3, cat: Movies/DVD, desc: "MOVIES/DVDR"}
- {id: 39, cat: Movies/Foreign, desc: "MOVIES/HD-Foreign"}
- {id: 62, cat: Movies/Foreign, desc: "MOVIES/SD-Foreign"}
- {id: 19, cat: Movies/HD, desc: "MOVIES/X264"}
- {id: 49, cat: Movies/HD, desc: "Movies/X265"}
- {id: 25, cat: Movies/SD, desc: "MOVIES/XVID"}
@@ -56,6 +59,8 @@
- {id: 24, cat: TV/SD, desc: "TV/DVDRIP"}
- {id: 18, cat: TV/SD, desc: "TV/SD"}
- {id: 26, cat: TV/HD, desc: "TV/X264"}
- {id: 61, cat: TV/UHD, desc: "TV/2160P"}
- {id: 64, cat: TV/FOREIGN, desc: "TV/X264-FOREIGN"}
modes:
@@ -85,7 +90,7 @@
- name: info
type: info
label: Results Per Page
default: For best results, change the 'Torrents per page' setting to 100 on your 'Personal Options' from the 'Personal' menu on the Mega-Blitz webpage.
default: For best results, change the 'Torrents per page' setting to 100 on your 'Torrent Options' from the 'Pers Tools > UserCP' menu on the TorrentSeeds webpage.
login:
path: login.php
@@ -94,7 +99,6 @@
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
submitme: "X"
error:
- selector: h2:contains("Login failed!")
message:
@@ -148,11 +152,19 @@
attribute: href
files:
selector: td:nth-of-type(5)
# 2 flavours of dates
date:
selector: td:nth-of-type(7)
# Today<br /> 10:20 AM
# Yesterday<br /> 08:03 PM
optional: true
selector: td:nth-child(7):contains("day")
date:
# Feb 14 2019<br /> 10:20 AM
optional: true
selector: td:nth-child(7):not(:contains("day"))
filters:
- name: dateparse
args: "Jan 02 2006 03:04 PM"
args: "Jan 2 2006 03:04 pm"
size:
selector: td:nth-of-type(8)
grabs:

View File

@@ -1,117 +0,0 @@
---
site: torrof
name: Torrof
description: "Torrof (Torrentoff) is meta-search engine for torrents"
language: en-us
type: public
encoding: UTF-8
links:
- http://www.torrof.com/
caps:
categories:
"Software": PC
"Book": Books
"Video": Movies
"Music": Audio
"Other": Other
"Picture": Other/Misc
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
settings:
- name: category
type: select
label: Category
default: "_"
options:
"_": "All"
"Book": "Book"
"Music": "Music"
"Other": "Other"
"Picture": "Picture"
"Software": "Software"
"Video": "Video"
- name: verified
type: select
label: Verified
default: "_"
options:
"_": "Any"
"1": "Verified Only"
- name: sort
type: select
label: Sort
default: "_"
options:
"_": "Default"
"creation_date desc": "Age desc"
"creation_date asc": "Age asc"
"total_size desc": "Size desc"
"total_size asc": "Size asc"
download:
selector: section.file-info a:nth-child(2)
search:
paths:
- path: "{{if .Keywords}}{{.Keywords}}{{else}}test{{end}}"
method: post
inputs:
# torrof does not support trending/latest/new pages
text: "{{if .Keywords}}{{.Keywords}}{{else}}test{{end}}"
size: "0:inf"
date: "0:inf"
verified_only: "{{ re_replace .Config.verified \"_\" \"\" }}"
category: "{{ re_replace .Config.category \"_\" \"\" }}"
tags: ""
mode: "titles"
sort: "{{ re_replace .Config.sort \"_\" \"\" }}"
page: "0"
rows:
# ignore adverts
selector: tr:has(a[href^="/view/"])
filters:
# torrof uses fuzzy search logic
- name: andmatch
fields:
title:
selector: td:nth-child(2) a:nth-child(1)
category:
selector: td:nth-child(1) span
attribute: title
filters:
# grab first word
- name: split
args: [" ", 0]
details:
selector: td:nth-child(2) a:nth-child(1)
attribute: href
download:
selector: td:nth-child(2) a:nth-child(1)
attribute: href
date:
selector: td:nth-child(4)
filters:
- name: dateparse
args: "Jan 2006"
size:
selector: td:nth-child(3) span:nth-child(1)
files:
selector: td:nth-child(3) span:nth-last-child(1)
filters:
- name: replace
args: [" Files", ""]
seeders:
text: "1"
leechers:
text: "1"
downloadvolumefactor:
text: "0"
uploadvolumefactor:
text: "1"

View File

@@ -0,0 +1,125 @@
---
site: totallykids
name: TotallyKids
description: "TotallyKids (TK) is a Private Torrent Tracker for CHILDRENS MOVIES / TV / GENERAL"
language: en-us
type: private
encoding: UTF-8
links:
- http://www.totallykids.tv/
settings:
- name: username
type: text
label: Username
- name: password
type: password
label: Password
- name: info_results
type: info
label: "Search results"
default: "For best results, increase the torrents number in your profile to 100.<br />Default is 15."
caps:
categorymappings:
- {id: 5, cat: Audio, desc: "Music"}
- {id: 6, cat: Audio/Audiobook, desc: "Audiobooks"}
- {id: 4, cat: Books/Comics, desc: "Comics"}
- {id: 7, cat: Books/EBook, desc: "E-Books"}
- {id: 16, cat: Movies, desc: "Family Movies"}
- {id: 23, cat: Movies, desc: "Teen Movies"}
- {id: 8, cat: PC/Games, desc: "Games"}
- {id: 1, cat: TV, desc: "Kids"}
- {id: 2, cat: TV, desc: "Family"}
- {id: 15, cat: TV, desc: "Educational"}
- {id: 24, cat: TV, desc: "Teens"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
music-search: [q]
login:
path: index.php?page=login
method: form
form: form[action^="index.php?page=login"]
inputs:
uid: "{{ .Config.username }}"
pwd: "{{ .Config.password }}"
error:
- selector: tr td span[style="color:#FF0000;"]
test:
path: index.php
selector: a[href="logout.php"]
search:
paths:
# http://www.totallykids.tv/index.php?page=torrents&search=scooby&category=1;2;5;6;4;7;8;15;24;16;23&options=0&active=0
- path: index.php
inputs:
page: torrents
search: "{{ if .Keywords }}{{ .Keywords }}{{else}}{{end}}"
category: "{{if .Categories}}{{range .Categories}}{{.}};{{end}}{{else}}0{{end}}"
options: 0
active: 0
rows:
selector: table.lista tr td table.lista tr:has(a[href^="index.php?page=torrent-details"])
fields:
title:
selector: td a[href^="index.php?page=torrent-details"]
details:
selector: td a[href^="index.php?page=torrent-details"]
attribute: href
category:
selector: td a[href^="index.php?page=torrents&category="]
attribute: href
filters:
- name: querystring
args: category
download:
selector: td a[href^="download.php"]
attribute: href
imdb:
optional: true
selector: a[href*="http://www.imdb.com/title/"]
attribute: href
filters:
# http://anonym.to?javascript:popdetails('http://www.imdb.com/title/tt0086817');
- name: replace
args: [" http://anonym.to?javascript:popdetails('", ""]
- name: replace
args: ["');", ""]
size:
selector: td:nth-child(10)
# two flavours of dates
date:
# Yesterday at 10:03:30 PM
selector: td:nth-child(5):contains("day")
optional: true
filters:
- name: re_replace
args: ["[ ]at|[\\s+]|[//\xa0],\\/g", " "]
date:
# February 09, 2019, 06:35:08 AM
selector: td:nth-child(5):not(:contains("day"))
optional: true
filters:
- name: re_replace
args: ["[,]|[\\s+]|[//\xa0],\\/g", " "]
- name: dateparse
args: "January 02 2006 03:04:05 PM"
seeders:
selector: td:nth-child(6)
leechers:
selector: td:nth-child(7)
grabs:
selector: td:nth-child(8)
downloadvolumefactor:
case:
img[src="gold/gold.gif"]: "0"
"*": "1"
uploadvolumefactor:
text: "1"

View File

@@ -112,20 +112,26 @@
search:
paths:
- path: browse.php
keywordsfilters:
- name: re_replace # S01E01 to X.sezon X.blm
args: ["(?i)\\bS0*(\\d+)E0*(\\d+)\\b", "$1.sezon $2.blm"]
inputs:
# does not support multi categories so defaulting to ALL
do: "search"
keywords: "{{.Keywords}}"
keywords: "{{if .Keywords}}\"{{.Keywords}}\"{{else}}{{end}}"
category: "0"
search_type: "t_name"
include_dead_torrents: "yes"
rows:
selector: table#sortabletable tbody tr:has(div[id^="port-target-"])
filters:
- name: andmatch
fields:
title:
selector: div[id^="port-target-"] a
filters:
- name: re_replace # X.sezon X.blm to S01E01
args: ["(?i)\\b(\\d+).sezon\\s(\\d+).blm\\b", "S$1E$2"]
- name: re_replace # switch (dd.mm.yyyy) to mm.dd.yyyy
args: ["\\((\\d+)\\.(\\d+)\\.(\\d+)\\)", "$2/$1/$3"]
details:
selector: div[id^="port-target-"] a
attribute: href
@@ -159,4 +165,4 @@
uploadvolumefactor:
case:
img[src$="/x2.gif"]: "2"
"*": "1"
"*": "1"

View File

@@ -68,8 +68,9 @@
- {id: 6, cat: XXX/XviD, desc: "xXx-XviD"}
modes:
search: [q]
tv-search: [q, season, ep]
search: [q, imdbid]
tv-search: [q, season, ep, imdbid]
movie-search: [q, imdbid]
login:
path: login.php
@@ -89,9 +90,10 @@
- path: browse.php
inputs:
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
search: "{{ .Query.Keywords }}"
search: "{{if .Query.IMDBID}}{{.Query.IMDBID}}{{else}}{{.Keywords}}{{end}}"
incldead: "1"
searchin: "title"
# searchin: title, descr, genre, all
searchin: "{{if .Query.IMDBID}}all{{else}}title{{end}}"
rows:
selector: table > tbody > tr:has(a[href^="download.php?torrent="])

View File

@@ -0,0 +1,128 @@
---
site: xktorrent
name: XKTorrent
description: "XKTorrent is a FRENCH Private Torrent Tracker for MOVIES / TV / GENERAL"
language: fr-fr
type: private
encoding: UTF-8
links:
- https://xktorrent.com/
caps:
categorymappings:
- {id: 1, cat: Movies, desc: "Film"}
- {id: 2, cat: TV, desc: "Série"}
- {id: 3, cat: TV/Anime, desc: "Film d'Animation"}
- {id: 5, cat: TV/Sport, desc: "Sport"}
- {id: 6, cat: TV/Documentary, desc: "Documentaire"}
- {id: 7, cat: Audio, desc: "Musique"}
- {id: 8, cat: Audio/Other, desc: "Podcast Audio"}
- {id: 13, cat: Books/Ebook, desc: "eBooks"}
- {id: 14, cat: TV, desc: "Spectacle"}
- {id: 15, cat: Audio/Video, desc: "Concert"}
- {id: 18, cat: TV/Anime, desc: "Manga"}
- {id: 19, cat: Books/Comics, desc: "Comics"}
- {id: 20, cat: Books/Comics, desc: "Bande dessinée"}
- {id: 22, cat: Console, desc: "Jeux"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid]
movie-search: [q, imdbid]
login:
path: login
method: form
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
remember: 1
selectorinputs:
_token:
selector: meta[name="csrf-token"]
attribute: content
error:
- selector: form[action$="/login"] span strong
test:
path: /
selector: a[href$="/logout"]
ratio:
path: /
selector: span:has(i.fa-sync-alt)
filters:
- name: regexp
args: "Ratio : (\\d+)"
search:
paths:
- path: filterTorrents
inputs:
$raw: "{{range .Categories}}categories[]={{.}}&{{end}}"
search: "{{if .Query.IMDBID}}{{else}}{{ .Keywords }}{{end}}"
uploader: ""
imdb: "{{ .Query.IMDBIDShort }}"
tvdb: ""
tmdb: ""
mal: ""
sorting: created_at
direction: desc
qty: 100
rows:
selector: table > tbody > tr
fields:
category:
selector: a[href*="/categories/"]
attribute: href
filters:
- name: regexp
args: "/categories/.*?\\.(\\d+)"
title:
selector: a.view-torrent
download:
selector: a[href*="/download/"]
attribute: href
details:
selector: a.view-torrent
attribute: href
imdb:
selector: a[href^="https://www.imdb.com/title/"]
attribute: href
optional: true
size:
selector: td:nth-child(5)
seeders:
selector: td:nth-child(7)
leechers:
selector: td:nth-child(8)
grabs:
selector: td:nth-child(6)
filters:
- name: regexp
args: ([\d\.]+)
date:
selector: time
filters:
- name: replace
args: ["il y a ", ""]
- name: replace
args: ["heure", "hour"]
- name: replace
args: ["jour", "day"]
- name: replace
args: ["semaine", "week"]
- name: replace
args: ["mois", "month"]
- name: append
args: " ago"
downloadvolumefactor:
case:
"i[data-original-title=\"100% Free\"]": "0" # Single Torrent Freeleech
"i[data-original-title=\"Global freeleech\"]": "0" # Global Freeleech
"*": "1"
uploadvolumefactor:
case:
"i[data-original-title=\"Double upload\"]": "2" # Single Torrent Double Upload
"i[data-original-title=\"Double Upload\"]": "2" # Global Double Upload
"*": "1"
# UNIT3D

View File

@@ -3,7 +3,7 @@
name: Xtreme Zone
description: "XtreMeZone (MYXZ) is a ROMANIAN Private Torrent Tracker for MOVIES / TV / GENERAL"
language: ro-ro
type: semi-private
type: private
encoding: UTF-8
links:
- https://www.myxz.eu/

View File

@@ -160,9 +160,10 @@
args: ["(.*)[sS](\\d{1,4})$", "$1"]
- name: replace
args: ["\"", ""]
- name: trim
paths:
- path: "https://{{ .Config.searchanddlurl }}/engine/search?category={{ .Config.category }}&name={{if .Config.enhancedAnime}}{{ re_replace .Keywords \"([\\.\\s\\[\\-])(\\d+)$\" \"$1e$2\" }}{{else}}{{ re_replace .Keywords \"\\s\" \"\"\"\" }}{{end}}&description=&file=&uploader=&sub_category=&do=search&order=desc&sort=publish_date"
- path: "https://{{ .Config.searchanddlurl }}/engine/search?category={{ .Config.category }}&name={{if .Config.enhancedAnime}}{{ re_replace .Keywords \"([\\.\\s\\[\\-])(\\d+)$\" \"$1e$2\" }}{{else}}{{ re_replace .Keywords \"\\s\" \"\"\"\" }}{{end}}&description=&file=&uploader=&sub_category=&do=search&order=desc&sort=publish_date&page=50"
- path: "https://{{ .Config.searchanddlurl }}/engine/search?category={{ .Config.category }}&name={{if .Config.enhancedAnime}}{{ re_replace .Keywords \"([\\.\\s\\[\\-])(\\d+)$\" \"$1e$2\" }}{{else}}{{ .Keywords }}{{end}}&description=&file=&uploader=&sub_category=&do=search&order=desc&sort=publish_date"
- path: "https://{{ .Config.searchanddlurl }}/engine/search?category={{ .Config.category }}&name={{if .Config.enhancedAnime}}{{ re_replace .Keywords \"([\\.\\s\\[\\-])(\\d+)$\" \"$1e$2\" }}{{else}}{{ .Keywords }}{{end}}&description=&file=&uploader=&sub_category=&do=search&order=desc&sort=publish_date&page=50"
rows:
selector: "table.table > tbody > tr"
fields:

View File

@@ -60,6 +60,7 @@ namespace Jackett.Common.Indexers
AddCategoryMapping(66, TorznabCatType.TVSport, "Football - Super Bowls");
AddCategoryMapping(53, TorznabCatType.TVSport, "Football - NCAA");
AddCategoryMapping(99, TorznabCatType.TVSport, "Football - CFL");
AddCategoryMapping(101, TorznabCatType.TVSport, "Football - AAF");
AddCategoryMapping(54, TorznabCatType.TVSport, "Football - Reviews and highlights");
AddCategoryMapping(97, TorznabCatType.TVSport, "Football - Documentaries");
AddCategoryMapping(44, TorznabCatType.TVSport, "Football - Other");
@@ -103,6 +104,7 @@ namespace Jackett.Common.Indexers
AddCategoryMapping(94, TorznabCatType.TVSport, "Other sports - Misc");
AddCategoryMapping(56, TorznabCatType.TVSport, "Sports on tv");
AddCategoryMapping(30, TorznabCatType.TVSport, "Sports");
}
public override async Task<IndexerConfigurationStatus> ApplyConfiguration(JToken configJson)

View File

@@ -41,6 +41,7 @@ namespace Jackett.Common.Indexers
Type = "semi-private";
AddCategoryMapping(30, TorznabCatType.Movies, "Video content");
AddCategoryMapping(1918, TorznabCatType.Movies, "UHD Video");
AddCategoryMapping(31, TorznabCatType.TVDocumentary, " Documentary films, TV and other video");
AddCategoryMapping(127, TorznabCatType.TVDocumentary, " Documentary movies and TV shows");
AddCategoryMapping(1071, TorznabCatType.TVDocumentary, " Documentary (DVD)");
@@ -114,17 +115,10 @@ namespace Jackett.Common.Indexers
AddCategoryMapping(1111, TorznabCatType.TV, " Evening Quarter");
AddCategoryMapping(1112, TorznabCatType.TV, " Films with a funny transfer (parody)");
AddCategoryMapping(1113, TorznabCatType.TV, " Stand-up comedy");
AddCategoryMapping(1114, TorznabCatType.TV, " Moment of glory");
AddCategoryMapping(1115, TorznabCatType.TV, " Ukrainian Show");
AddCategoryMapping(1116, TorznabCatType.TV, " Star Factory");
AddCategoryMapping(1117, TorznabCatType.TV, " Dance shows, concerts, performances");
AddCategoryMapping(1118, TorznabCatType.TV, " Circus");
AddCategoryMapping(1119, TorznabCatType.TV, " School for Scandal");
AddCategoryMapping(1120, TorznabCatType.TV, " Satirists and humorists");
AddCategoryMapping(1873, TorznabCatType.TV, " Musical show");
AddCategoryMapping(1121, TorznabCatType.TV, " Humorous audio transmission");
AddCategoryMapping(1122, TorznabCatType.TV, " Audio and video clips (Jokes and humor)");
AddCategoryMapping(32, TorznabCatType.Movies, " Foreign movies");
AddCategoryMapping(1906, TorznabCatType.Movies, " Foreign films of 2019");
AddCategoryMapping(33, TorznabCatType.Movies, " Russian movies");
AddCategoryMapping(567, TorznabCatType.Movies, " Foreign films 2016");
AddCategoryMapping(37, TorznabCatType.Movies, " Foreign films 2011 - 2015 the year");
AddCategoryMapping(38, TorznabCatType.Movies, " Foreign films of the year 2006-2010");
@@ -173,11 +167,8 @@ namespace Jackett.Common.Indexers
AddCategoryMapping(51, TorznabCatType.TV, " Domestic series");
AddCategoryMapping(1860, TorznabCatType.TV, " Domestic series 2016");
AddCategoryMapping(1810, TorznabCatType.TV, " Domestic series 2015");
AddCategoryMapping(574, TorznabCatType.TV, " Domestic series 2014");
AddCategoryMapping(50, TorznabCatType.TV, " Foreign TV series");
AddCategoryMapping(1861, TorznabCatType.TV, " Foreign series 2016");
AddCategoryMapping(1809, TorznabCatType.TV, " Foreign series 2015");
AddCategoryMapping(575, TorznabCatType.TV, " Foreign series 2014");
AddCategoryMapping(1181, TorznabCatType.TV, " Foreign TV shows (HD Video)");
AddCategoryMapping(1184, TorznabCatType.TV, " Soaps Spain, Italy, Latin America, Turkey and India");
AddCategoryMapping(1185, TorznabCatType.TV, " Indian series");
@@ -300,6 +291,7 @@ namespace Jackett.Common.Indexers
AddCategoryMapping(1152, TorznabCatType.TVSport, " Ukraine");
AddCategoryMapping(1153, TorznabCatType.TVSport, " Other national championships and cups");
AddCategoryMapping(1154, TorznabCatType.TVSport, " International football tournaments");
AddCategoryMapping(1901, TorznabCatType.TVSport, " Confederations Cup 2017");
AddCategoryMapping(1157, TorznabCatType.TVSport, " European Cups");
AddCategoryMapping(1156, TorznabCatType.TVSport, " Eurocup 2011-2014");
AddCategoryMapping(1155, TorznabCatType.TVSport, " Eurocup 2014-2015");
@@ -324,15 +316,7 @@ namespace Jackett.Common.Indexers
AddCategoryMapping(1886, TorznabCatType.TVSport, " Football");
AddCategoryMapping(1887, TorznabCatType.TVSport, " Basketball");
AddCategoryMapping(1888, TorznabCatType.TVSport, " Volleyball / Beach Volleyball / Handball / Water Polo");
AddCategoryMapping(1889, TorznabCatType.TVSport, " Athletics");
AddCategoryMapping(1890, TorznabCatType.TVSport, " Tennis / Table Tennis / Badminton");
AddCategoryMapping(1891, TorznabCatType.TVSport, " Boxing / Martial Arts and Martial Arts / Weightlifting");
AddCategoryMapping(1892, TorznabCatType.TVSport, " Water Sports / Boating");
AddCategoryMapping(1893, TorznabCatType.TVSport, " cycle racing");
AddCategoryMapping(1894, TorznabCatType.TVSport, " Gymnastics");
AddCategoryMapping(1895, TorznabCatType.TVSport, " Other Sports");
AddCategoryMapping(1896, TorznabCatType.TVSport, " The survey and analysis of transmission");
AddCategoryMapping(1897, TorznabCatType.Books, " Books, manuals, periodicals on the Olympic theme");
AddCategoryMapping(1907, TorznabCatType.TVSport, " 2018 Winter Olympics");
AddCategoryMapping(1575, TorznabCatType.Movies, " Video for mobile devices");
AddCategoryMapping(1576, TorznabCatType.Movies, " Video for Smartphones and PDAs");
AddCategoryMapping(1577, TorznabCatType.Movies, " Mobile Video (3GP)");
@@ -390,18 +374,17 @@ namespace Jackett.Common.Indexers
AddCategoryMapping(73, TorznabCatType.PCGames, " Simulations");
AddCategoryMapping(74, TorznabCatType.PCGames, " Autos and Racing");
AddCategoryMapping(75, TorznabCatType.PCGames, " Sports simulators");
AddCategoryMapping(464, TorznabCatType.PCGames, " Other simulators");
AddCategoryMapping(1531, TorznabCatType.PCGames, " Space and flight simulators");
AddCategoryMapping(76, TorznabCatType.PCGames, " Aviasimulators");
AddCategoryMapping(463, TorznabCatType.PCGames, " space Simulation");
AddCategoryMapping(1540, TorznabCatType.PCGames, " Microsoft Flight Simulator add-ons, and for him");
AddCategoryMapping(1541, TorznabCatType.PCGames, " Scripts, meshes and airports");
AddCategoryMapping(1542, TorznabCatType.PCGames, " Airplanes and helicopters");
AddCategoryMapping(1902, TorznabCatType.PCGames, " Planes, helicopters (FSX-P3D)");
AddCategoryMapping(1903, TorznabCatType.PCGames, " Planes and helicopters [FS2004]");
AddCategoryMapping(1543, TorznabCatType.PCGames, " Mission, traffic sounds, packs and tools");
AddCategoryMapping(1899, TorznabCatType.PCGames, " Scenarios (FSX-P3D)");
AddCategoryMapping(77, TorznabCatType.PCGames, " Arcade");
AddCategoryMapping(459, TorznabCatType.PCGames, " Arcade (various)");
AddCategoryMapping(461, TorznabCatType.PCGames, " Board &amp; Card Arcade");
AddCategoryMapping(78, TorznabCatType.PCGames, " Adventure Quests");
AddCategoryMapping(746, TorznabCatType.PCGames, " Quest-style \"search objects\"");
AddCategoryMapping(79, TorznabCatType.PCGames, " Online Games");
@@ -409,25 +392,17 @@ namespace Jackett.Common.Indexers
AddCategoryMapping(744, TorznabCatType.PCGames, " paid");
AddCategoryMapping(742, TorznabCatType.PCGames, " Other online gaming");
AddCategoryMapping(157, TorznabCatType.PCGames, " For the little ones");
AddCategoryMapping(465, TorznabCatType.PCGames, " Old games for PC");
AddCategoryMapping(466, TorznabCatType.PCGames, " Arcade and Puzzle Games (old games)");
AddCategoryMapping(1871, TorznabCatType.PCGames, " Arcade (Old Games)");
AddCategoryMapping(1872, TorznabCatType.PCGames, " Puzzle games (old games)");
AddCategoryMapping(467, TorznabCatType.PCGames, " Adventure quests (old games)");
AddCategoryMapping(468, TorznabCatType.PCGames, " Action (old games)");
AddCategoryMapping(469, TorznabCatType.PCGames, " Strategy (old games)");
AddCategoryMapping(470, TorznabCatType.PCGames, " RPG (old games)");
AddCategoryMapping(471, TorznabCatType.PCGames, " Simulations (old games)");
AddCategoryMapping(1532, TorznabCatType.PCGames, " Autos and Racing (old games)");
AddCategoryMapping(1533, TorznabCatType.PCGames, " Space simulators, flight simulators and aviaigry (old games)");
AddCategoryMapping(1534, TorznabCatType.PCGames, " Sports simulators (old games)");
AddCategoryMapping(1535, TorznabCatType.PCGames, " Other simulators (Old Games)");
AddCategoryMapping(472, TorznabCatType.PCGames, " Multi-genre compilations (old games)");
AddCategoryMapping(1536, TorznabCatType.PCGames, " Erotic games (old games)");
AddCategoryMapping(1537, TorznabCatType.PCGames, " For the little ones (Old Games)");
AddCategoryMapping(1538, TorznabCatType.PCGames, " Puzzle Games (Old Games)");
AddCategoryMapping(1539, TorznabCatType.PCGames, " IBM PC are not compatible (old games)");
AddCategoryMapping(473, TorznabCatType.PCGames, " Erotic games");
AddCategoryMapping(745, TorznabCatType.PCGames, " Chess");
AddCategoryMapping(924, TorznabCatType.PCGames, " game Collections");
AddCategoryMapping(970, TorznabCatType.PCGames, " Other for PC-games");
@@ -469,15 +444,12 @@ namespace Jackett.Common.Indexers
AddCategoryMapping(622, TorznabCatType.ConsolePSP, " PS1 games for PSP");
AddCategoryMapping(143, TorznabCatType.ConsolePSP, " PSP | Programs | Other");
AddCategoryMapping(1548, TorznabCatType.ConsolePSP, " Software for PSP (Homebrew)");
AddCategoryMapping(455, TorznabCatType.ConsolePSVita, " PS Vita | Games");
AddCategoryMapping(130, TorznabCatType.ConsoleOther, " Nintendo");
AddCategoryMapping(144, TorznabCatType.ConsoleNDS, " NDS | Games");
AddCategoryMapping(145, TorznabCatType.ConsoleWii, " Wii | Games");
AddCategoryMapping(146, TorznabCatType.ConsoleWiiwareVC, " WiiWare | Games");
AddCategoryMapping(147, TorznabCatType.ConsoleOther, " GameCube | Games");
AddCategoryMapping(456, TorznabCatType.ConsoleOther, " Sega");
AddCategoryMapping(588, TorznabCatType.ConsoleOther, " Dreamcast");
AddCategoryMapping(457, TorznabCatType.ConsoleOther, " Games for older consoles");
AddCategoryMapping(589, TorznabCatType.ConsoleOther, " Games for the DVD player");
AddCategoryMapping(928, TorznabCatType.PCGames, " Games for Linux");
AddCategoryMapping(1868, TorznabCatType.PCGames, " Native games for Linux");
@@ -514,7 +486,6 @@ namespace Jackett.Common.Indexers
AddCategoryMapping(282, TorznabCatType.PC0day, " Operating Systems (Linux, Unix)");
AddCategoryMapping(1574, TorznabCatType.PC0day, " Program (Linux, Unix)");
AddCategoryMapping(284, TorznabCatType.PC0day, " Other operating systems and software for them");
AddCategoryMapping(287, TorznabCatType.PC0day, " Archive (Linux OS, Unix etc)");
AddCategoryMapping(276, TorznabCatType.PCMac, " Apple OS");
AddCategoryMapping(277, TorznabCatType.PCMac, " Mac OS [for Macintosh]");
AddCategoryMapping(278, TorznabCatType.PCMac, " Mac OS [PC-Hackintosh]");
@@ -538,13 +509,11 @@ namespace Jackett.Common.Indexers
AddCategoryMapping(1811, TorznabCatType.PC0day, " Windows 10");
AddCategoryMapping(274, TorznabCatType.PC0day, " Windows Server");
AddCategoryMapping(927, TorznabCatType.PC0day, " Other (Operating Systems from Microsoft)");
AddCategoryMapping(275, TorznabCatType.PC0day, " Archive (OS from Microsoft)");
AddCategoryMapping(84, TorznabCatType.PC0day, " System programs");
AddCategoryMapping(86, TorznabCatType.PC0day, " Programs for configuring and optimizing OS");
AddCategoryMapping(87, TorznabCatType.PC0day, " Archivers and File Managers");
AddCategoryMapping(1630, TorznabCatType.PC0day, " Safety protection system and PC");
AddCategoryMapping(93, TorznabCatType.PC0day, " Software to protect your computer (antivirus software, firewalls)");
AddCategoryMapping(580, TorznabCatType.PC0day, " Keys and Activation");
AddCategoryMapping(94, TorznabCatType.PC0day, " Anti-spyware and anti-trojan");
AddCategoryMapping(95, TorznabCatType.PC0day, " Programs for the protection of information");
AddCategoryMapping(88, TorznabCatType.PC0day, " Backup");
@@ -585,29 +554,20 @@ namespace Jackett.Common.Indexers
AddCategoryMapping(941, TorznabCatType.PC0day, " Libraries and projects for architects and interior designers");
AddCategoryMapping(942, TorznabCatType.PC0day, " Other reference systems");
AddCategoryMapping(107, TorznabCatType.PC0day, " Web Development and Programming");
AddCategoryMapping(293, TorznabCatType.PC0day, " Search / Offer");
AddCategoryMapping(943, TorznabCatType.PC0day, " WYSIWYG editors for web design");
AddCategoryMapping(496, TorznabCatType.PC0day, " Database Management Systems (DBMS)");
AddCategoryMapping(494, TorznabCatType.PC0day, " programming environments, compilers and software tools");
AddCategoryMapping(290, TorznabCatType.PC0day, " The components for the development of media");
AddCategoryMapping(495, TorznabCatType.PC0day, " Text editors Illuminated");
AddCategoryMapping(291, TorznabCatType.PC0day, " Scripting engines and websites, CMS and extensions to it");
AddCategoryMapping(944, TorznabCatType.PC0day, " Templates for websites and CMS");
AddCategoryMapping(292, TorznabCatType.PC0day, " Miscellaneous (Web Development and Programming)");
AddCategoryMapping(294, TorznabCatType.PC0day, " Archive (Web Development and Programming)");
AddCategoryMapping(108, TorznabCatType.PC0day, " Programs to work with multimedia and 3D");
AddCategoryMapping(487, TorznabCatType.PC0day, " Software kits");
AddCategoryMapping(488, TorznabCatType.PC0day, " Plug-ins for Adobe's programs");
AddCategoryMapping(491, TorznabCatType.PC0day, " 3D modeling, rendering and plugins for them");
AddCategoryMapping(489, TorznabCatType.PC0day, " Graphic editor");
AddCategoryMapping(303, TorznabCatType.PC0day, " Editors video");
AddCategoryMapping(305, TorznabCatType.PC0day, " Virtual Studios, sequencers and audio editor");
AddCategoryMapping(492, TorznabCatType.PC0day, " Animation");
AddCategoryMapping(490, TorznabCatType.PC0day, " Programs for typesetting, printing, and working with fonts");
AddCategoryMapping(304, TorznabCatType.PC0day, " Video, Audio Conversion");
AddCategoryMapping(493, TorznabCatType.PC0day, " Creating a BD / HD / DVD-Video");
AddCategoryMapping(306, TorznabCatType.PC0day, " Plug-ins for sound processing");
AddCategoryMapping(308, TorznabCatType.PC0day, " Archive (Programme for multimedia and 3D)");
AddCategoryMapping(595, TorznabCatType.PC0day, " Miscellaneous (Programme for multimedia and 3D)");
AddCategoryMapping(596, TorznabCatType.PC0day, " Miscellaneous (Programs for working with audio)");
AddCategoryMapping(597, TorznabCatType.PC0day, " Virtual instruments and synthesizers");
@@ -637,8 +597,6 @@ namespace Jackett.Common.Indexers
AddCategoryMapping(955, TorznabCatType.PC0day, " Multitracks");
AddCategoryMapping(956, TorznabCatType.PC0day, " Materials for creating menus and DVD covers");
AddCategoryMapping(351, TorznabCatType.PC0day, " Styles, brushes, shapes and patterns for Adobe Photoshop");
AddCategoryMapping(356, TorznabCatType.PC0day, " Fonts");
AddCategoryMapping(358, TorznabCatType.PC0day, " Miscellaneous (Materials for Multimedia and Design)");
AddCategoryMapping(1632, TorznabCatType.PC0day, " Digital Juice");
AddCategoryMapping(1874, TorznabCatType.PC0day, " Projects");
AddCategoryMapping(1875, TorznabCatType.PC0day, " Children (projects)");
@@ -653,14 +611,8 @@ namespace Jackett.Common.Indexers
AddCategoryMapping(1884, TorznabCatType.PC0day, " Miscellaneous (projects)");
AddCategoryMapping(1898, TorznabCatType.PC0day, " Trailers (projects)");
AddCategoryMapping(295, TorznabCatType.PC0day, " Reference and legal system");
AddCategoryMapping(296, TorznabCatType.PC0day, " Consultant Plus");
AddCategoryMapping(584, TorznabCatType.PC0day, " Consultant Accountant");
AddCategoryMapping(755, TorznabCatType.PC0day, " Archive irrelevant hands");
AddCategoryMapping(297, TorznabCatType.PC0day, " code");
AddCategoryMapping(298, TorznabCatType.PC0day, " Guarantee");
AddCategoryMapping(299, TorznabCatType.PC0day, " other");
AddCategoryMapping(300, TorznabCatType.PC0day, " Archive (Reference and legal system)");
AddCategoryMapping(301, TorznabCatType.PC0day, " RG PCA - a hidden forum");
AddCategoryMapping(587, TorznabCatType.PC0day, " Collections of programs and WPI");
AddCategoryMapping(929, TorznabCatType.PC0day, " Test drives to adjust the audio / video equipment");
AddCategoryMapping(957, TorznabCatType.PC0day, " GIS, navigation systems and maps");
@@ -683,16 +635,11 @@ namespace Jackett.Common.Indexers
AddCategoryMapping(544, TorznabCatType.AudioVideo, " Concert recording");
AddCategoryMapping(1781, TorznabCatType.AudioVideo, " Concerts (DVD)");
AddCategoryMapping(1782, TorznabCatType.AudioVideo, " Concerts (HD)");
AddCategoryMapping(1784, TorznabCatType.AudioVideo, " Opera, Ballet, Musicals");
AddCategoryMapping(1785, TorznabCatType.AudioVideo, " Music videos (transit)");
AddCategoryMapping(501, TorznabCatType.AudioLossless, " unsorted Lossless");
AddCategoryMapping(532, TorznabCatType.Audio, " Multi-channel HD Audio and Music");
AddCategoryMapping(533, TorznabCatType.Audio, " DVD-Audio, SACD, Audio-DVD");
AddCategoryMapping(1687, TorznabCatType.Audio, " DVD-Audio");
AddCategoryMapping(1688, TorznabCatType.Audio, " SACD-R");
AddCategoryMapping(534, TorznabCatType.Audio, " DTS");
AddCategoryMapping(535, TorznabCatType.Audio, " Vinyl-Rip and Hand-Made");
AddCategoryMapping(536, TorznabCatType.Audio, " Hi-Res stereo");
AddCategoryMapping(529, TorznabCatType.Audio, " discography");
AddCategoryMapping(530, TorznabCatType.Audio, " Domestic");
AddCategoryMapping(531, TorznabCatType.Audio, " foreign");
@@ -754,7 +701,6 @@ namespace Jackett.Common.Indexers
AddCategoryMapping(1735, TorznabCatType.Audio, " Rap, Hip-hop domestic (transit Lossy)");
AddCategoryMapping(1736, TorznabCatType.Audio, " RnB, Reggae (transit Lossless)");
AddCategoryMapping(1737, TorznabCatType.Audio, " RnB, Reggae (transit Lossy)");
AddCategoryMapping(1819, TorznabCatType.Audio, " Rap, Hip-hop, RnB (transit Lossless)");
AddCategoryMapping(1738, TorznabCatType.Audio, " East Asian Music (transit)");
AddCategoryMapping(1739, TorznabCatType.Audio, " Asian Traditional, Ethnic (transit Lossless)");
AddCategoryMapping(1740, TorznabCatType.Audio, " Asian Traditional, Ethnic (transit Lossy)");
@@ -797,14 +743,7 @@ namespace Jackett.Common.Indexers
AddCategoryMapping(1798, TorznabCatType.Audio, " Author and war songs (transit Lossless)");
AddCategoryMapping(1799, TorznabCatType.Audio, " Author and war songs (transit Lossy)");
AddCategoryMapping(1772, TorznabCatType.Audio, " Unofficial collections (transit)");
AddCategoryMapping(1773, TorznabCatType.Audio, " Jazz, Blues, Soul (transit collections)");
AddCategoryMapping(1774, TorznabCatType.Audio, " Chanson, Author and war songs (collections transit)");
AddCategoryMapping(1775, TorznabCatType.Audio, " Rock, Alternative, Punk, Metal (collections of transit)");
AddCategoryMapping(1776, TorznabCatType.Audio, " Pop (transit collections)");
AddCategoryMapping(1777, TorznabCatType.Audio, " Electronic (transit collections)");
AddCategoryMapping(1778, TorznabCatType.Audio, " Rap, Hip-hop, RnB, Reggae (transit collections)");
AddCategoryMapping(1779, TorznabCatType.Audio, " Instrumental / New Age / Meditative / Relax (transit collections)");
AddCategoryMapping(1780, TorznabCatType.Audio, " Other (transit collections)");
AddCategoryMapping(1816, TorznabCatType.Audio, " Chanson, Author and war songs (transit)");
AddCategoryMapping(1677, TorznabCatType.Audio, " Chanson, Author and war songs (transit lossless)");
AddCategoryMapping(1678, TorznabCatType.Audio, " Chanson, Author and war songs (transit lossy)");
@@ -1192,9 +1131,9 @@ namespace Jackett.Common.Indexers
AddCategoryMapping(1606, TorznabCatType.Audio, " Music Lossy (AAC) (Singles, EPs)");
AddCategoryMapping(113, TorznabCatType.Books, "Books, Audio Books, Journals");
AddCategoryMapping(561, TorznabCatType.Books, " Books, Audio Books, Journals (General Discussion)");
AddCategoryMapping(316, TorznabCatType.Books, " Archive (Books, Audio Books, Journals)");
AddCategoryMapping(1620, TorznabCatType.Books, " Meditation");
AddCategoryMapping(1802, TorznabCatType.Books, " Historiography");
AddCategoryMapping(1900, TorznabCatType.Books, " Classic, modern prose and poetry");
AddCategoryMapping(116, TorznabCatType.AudioAudiobook, " Audiobooks");
AddCategoryMapping(1231, TorznabCatType.AudioAudiobook, " Audio, history, memoirs (Audiobooks)");
AddCategoryMapping(119, TorznabCatType.AudioAudiobook, " Audio and literary readings (Audiobooks)");
@@ -1203,6 +1142,8 @@ namespace Jackett.Common.Indexers
AddCategoryMapping(321, TorznabCatType.AudioAudiobook, " Science fiction, fantasy, mystery, horror, fanfiction (Audiobooks)");
AddCategoryMapping(1234, TorznabCatType.AudioAudiobook, " Russian fiction, fantasy, mystery, horror, fanfiction (audiobook)");
AddCategoryMapping(1235, TorznabCatType.AudioAudiobook, " Foreign fiction, fantasy, mystery, horror, fanfiction (audiobook)");
AddCategoryMapping(1904, TorznabCatType.AudioAudiobook, " Love-fiction novel (audiobooks)");
AddCategoryMapping(1905, TorznabCatType.AudioAudiobook, " Compilations / Miscellaneous Fantastic, Fantasy, Mystic, Horror, Fan-fiction (Audiobooks)");
AddCategoryMapping(317, TorznabCatType.AudioAudiobook, " Fiction (Audiobooks)");
AddCategoryMapping(1236, TorznabCatType.AudioAudiobook, " Poetry (audiobook)");
AddCategoryMapping(118, TorznabCatType.AudioAudiobook, " Foreign literature (audiobook)");
@@ -1218,7 +1159,6 @@ namespace Jackett.Common.Indexers
AddCategoryMapping(1242, TorznabCatType.AudioAudiobook, " Nontraditional religious philosophies (Audio)");
AddCategoryMapping(1243, TorznabCatType.AudioAudiobook, " Educational, scientific and popular literature (Audio)");
AddCategoryMapping(1244, TorznabCatType.AudioAudiobook, " Audiobooks in lossless-format");
AddCategoryMapping(323, TorznabCatType.AudioAudiobook, " Business (Audio)");
AddCategoryMapping(319, TorznabCatType.AudioAudiobook, " Historical literature (Audiobooks)");
AddCategoryMapping(1245, TorznabCatType.AudioAudiobook, " Miscellaneous (Audiobooks)");
AddCategoryMapping(1622, TorznabCatType.AudioAudiobook, " Meditation (Audio)");
@@ -1235,7 +1175,6 @@ namespace Jackett.Common.Indexers
AddCategoryMapping(889, TorznabCatType.Books, " Celebrities and idols");
AddCategoryMapping(890, TorznabCatType.Books, " Miscellaneous");
AddCategoryMapping(982, TorznabCatType.Books, " Magazines and newspapers (general section)");
AddCategoryMapping(566, TorznabCatType.Books, " Men's magazines");
AddCategoryMapping(1204, TorznabCatType.Books, " For women (magazines and books)");
AddCategoryMapping(1793, TorznabCatType.Books, " Popular science magazines");
AddCategoryMapping(1794, TorznabCatType.Books, " Journals of Electrical and Electronics");
@@ -1617,23 +1556,22 @@ namespace Jackett.Common.Indexers
queryCollection.Add("t", "0");
queryCollection.Add("submit", "Search");
queryCollection.Add("sr", "topics");
//queryCollection.Add("sr", "posts");
//queryCollection.Add("ch", "99999");
// if the search string is empty use the getnew view
if (string.IsNullOrWhiteSpace(searchString))
{
queryCollection.Add("search_id", "newposts");
//queryCollection.Add("search_id", "newposts");
searchString = "test";
}
else // use the normal search
{
//else // use the normal search
//{
searchString = searchString.Replace("-", " ");
queryCollection.Add("terms", "all");
queryCollection.Add("keywords", searchString);
queryCollection.Add("author", "");
queryCollection.Add("sc", "1");
queryCollection.Add("sf", "titleonly");
}
//}
var searchUrl = SearchUrl + "?" + queryCollection.GetQueryString();
results = await RequestStringWithCookies(searchUrl);

View File

@@ -198,18 +198,21 @@ namespace Jackett.Common.Indexers
var catStr = qCatLink.GetAttribute("href").Split('=')[1];
release.Title = FixAbsoluteNumbering(release.Title);
var quality = qQuality.TextContent;
switch (quality)
if (qQuality != null)
{
case "Full HD":
release.Title += " 1080p";
break;
case "HD":
release.Title += " 720p";
break;
default:
release.Title += " 480p";
break;
var quality = qQuality.TextContent;
switch (quality)
{
case "Full HD":
release.Title += " 1080p";
break;
case "HD":
release.Title += " 720p";
break;
default:
release.Title += " 480p";
break;
}
}
release.Category = MapTrackerCatToNewznab(catStr);

View File

@@ -18,7 +18,7 @@ namespace Jackett.Common.Indexers
{
public class BeyondHD : BaseWebIndexer
{
private string SearchUrl { get { return SiteLink + "browse.php?searchin=title&incldead=0&"; } }
private string SearchUrl { get { return SiteLink + "browse.php?searchin=descr&incldead=1&"; } }
private new ConfigurationDataLoginLink configData
{
@@ -43,6 +43,8 @@ namespace Jackett.Common.Indexers
configData.DisplayText.Value = "Go to the general tab of your BeyondHD user profile and create/copy the Login Link.";
TorznabCaps.SupportsImdbSearch = true;
AddCategoryMapping(37, TorznabCatType.MoviesBluRay, "Movie / Blu-ray");
AddCategoryMapping(71, TorznabCatType.Movies3D, "Movie / 3D");
AddCategoryMapping(83, TorznabCatType.Movies3D, "FraMeSToR 3D");
@@ -83,6 +85,7 @@ namespace Jackett.Common.Indexers
AddCategoryMapping(55, TorznabCatType.AudioVideo, "Music / 1080p/i");
AddCategoryMapping(56, TorznabCatType.AudioVideo, "Music / 720p");
AddCategoryMapping(42, TorznabCatType.AudioVideo, "Music / Blu-ray");
AddCategoryMapping(41, TorznabCatType.AudioVideo, "Music / Movie OST");
}
public override async Task<IndexerConfigurationStatus> ApplyConfiguration(JToken configJson)
@@ -101,12 +104,22 @@ namespace Jackett.Common.Indexers
protected override async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query)
{
List<ReleaseInfo> releases = new List<ReleaseInfo>();
Regex IMDBRegEx = new Regex(@"tt(\d+)", RegexOptions.Compiled);
var searchString = query.GetQueryString();
var searchUrl = SearchUrl;
var queryCollection = new NameValueCollection();
var searchStringIsImdbQuery = (ParseUtil.GetImdbID(searchString) != null);
if (!string.IsNullOrWhiteSpace(searchString))
if (query.IsImdbQuery)
{
queryCollection.Add("search", query.ImdbID);
}
else if (searchStringIsImdbQuery)
{
queryCollection.Add("search", searchString);
}
else if (!string.IsNullOrWhiteSpace(searchString))
{
Regex ReplaceRegex = new Regex("[^a-zA-Z0-9]+");
searchString = "%" + ReplaceRegex.Replace(searchString, "%") + "%";
@@ -139,13 +152,15 @@ namespace Jackett.Common.Indexers
release.Category = MapTrackerCatToNewznab(catStr);
var qLink = row.ChildElements.ElementAt(2).FirstChild.Cq();
release.Link = new Uri(SiteLink + "/" + qLink.Attr("href"));
release.Link = new Uri(SiteLink + qLink.Attr("href"));
var torrentId = qLink.Attr("href").Split('=').Last();
var descCol = row.ChildElements.ElementAt(3);
var qCommentLink = descCol.FirstChild.Cq();
release.Title = qCommentLink.Text();
release.Comments = new Uri(SiteLink + "/" + qCommentLink.Attr("href"));
if (!query.IsImdbQuery && !query.MatchQueryStringAND(release.Title))
continue;
release.Comments = new Uri(SiteLink + qCommentLink.Attr("href"));
release.Guid = release.Comments;
release.Link = new Uri($"{SiteLink}download.php?torrent={torrentId}");
@@ -164,7 +179,14 @@ namespace Jackett.Common.Indexers
var grabs = qRow.Find("td:nth-child(9) > a").Get(0).FirstChild.ToString();
release.Grabs = ParseUtil.CoerceInt(grabs);
release.DownloadVolumeFactor = 1;
var imdbLink = qRow.Find("a[href*=\"imdb.com/title/\"]").Attr("href");
if (imdbLink != null)
{
var IMDBMatch = IMDBRegEx.Match(imdbLink);
release.Imdb = ParseUtil.CoerceLong(IMDBMatch.Groups[1].Value);
}
release.DownloadVolumeFactor = 0;
release.UploadVolumeFactor = 1;
releases.Add(release);

View File

@@ -1570,6 +1570,8 @@ namespace Jackett.Common.Indexers
OnParseError(results, ex);
}
}
if (query.Limit > 0)
releases = releases.Take(query.Limit).ToList();
return releases;
}

View File

@@ -49,6 +49,11 @@ namespace Jackett.Common.Indexers.Feeds
var enclosure = enclosures.First().Attribute("url").Value;
release.Link = enclosure.ToUri();
}
// add some default values if none returned by feed
release.Seeders = release.Seeders > 0 ? release.Seeders : 0;
release.Peers = release.Peers > 0 ? release.Peers : 0;
release.DownloadVolumeFactor = release.DownloadVolumeFactor > 0 ? release.DownloadVolumeFactor : 0;
release.UploadVolumeFactor = release.UploadVolumeFactor > 0 ? release.UploadVolumeFactor : 1;
return release;
}

View File

@@ -216,6 +216,9 @@ namespace Jackett.Common.Indexers
else
release.DownloadVolumeFactor = 1;
var imdblink = qRow.Find("a[href^=\"https://www.imdb.com/title/\"]").Attr("href");
release.Imdb = ParseUtil.GetLongFromString(imdblink);
releases.Add(release);
}
}

View File

@@ -18,11 +18,15 @@ namespace Jackett.Common.Indexers
{
class MejorTorrent : BaseWebIndexer
{
public static Uri WebUri = new Uri("http://www.mejortorrent.org/");
public static Uri WebUri = new Uri("http://www.mejortorrent.tv/");
public static Uri DownloadUri = new Uri(WebUri, "secciones.php?sec=descargas&ap=contar_varios");
private static Uri SearchUriBase = new Uri(WebUri, "secciones.php");
public static Uri NewTorrentsUri = new Uri(WebUri, "secciones.php?sec=ultimos_torrents");
public static Encoding MEEncoding = Encoding.GetEncoding("windows-1252");
public static Encoding MEEncoding = Encoding.GetEncoding("iso-8859-1");
public override string[] LegacySiteLinks { get; protected set; } = new string[] {
"http://www.mejortorrent.org/"
};
public MejorTorrent(IIndexerConfigurationService configService, WebClient wc, Logger l, IProtectionService ps)
: base(name: "MejorTorrent",
@@ -458,6 +462,8 @@ namespace Jackett.Common.Indexers
this.Seeders = 1;
this.Size = ReleaseInfo.BytesFromGB(1);
this._originalTitle = "";
this.DownloadVolumeFactor = 0;
this.UploadVolumeFactor = 1;
}
public int Season { get { return _season; } set { _season = value; TitleOriginal = _originalTitle; } }

View File

@@ -117,7 +117,7 @@ namespace Jackett.Common.Indexers
return IndexerConfigurationStatus.RequiresTesting;
}
List<ReleaseInfo> parseTorrents(WebClientStringResult results, String seasonep, TorznabQuery query, int already_founded, int limit)
List<ReleaseInfo> parseTorrents(WebClientStringResult results, String seasonep, TorznabQuery query, int already_founded, int limit, int previously_parsed_on_page)
{
var releases = new List<ReleaseInfo>();
try
@@ -128,7 +128,7 @@ namespace Jackett.Common.Indexers
var rows = dom[".box_torrent_all"].Find(".box_torrent");
// Check torrents only till we reach the query Limit
for(int i=0; (i<rows.Length && ((already_founded + releases.Count) < limit )); i++)
for(int i= previously_parsed_on_page; (i<rows.Length && ((already_founded + releases.Count) < limit )); i++)
{
try
{
@@ -172,7 +172,7 @@ namespace Jackett.Common.Indexers
release.Category = MapTrackerCatToNewznab(cat);
/* if the release name not contains the language we add it because it is know from category */
if (cat.Contains("hun") && !release.Title.Contains("hun"))
if (cat.Contains("hun") && !release.Title.ToLower().Contains("hun"))
release.Title += ".hun";
if (seasonep == null)
@@ -272,6 +272,15 @@ namespace Jackett.Common.Indexers
CQ dom = results.Content;
int numVal = 0;
// find number of torrents / page
int torrent_per_page = dom[".box_torrent_all"].Find(".box_torrent").Length;
if (torrent_per_page==0)
return releases;
int start_page = (query.Offset / torrent_per_page)+1;
int previously_parsed_on_page = query.Offset - (start_page * torrent_per_page) + 1; //+1 because indexing start from 0
if (previously_parsed_on_page < 0)
previously_parsed_on_page = query.Offset;
// find pagelinks in the bottom
var pagelinks = dom["div[id=pager_bottom]"].Find("a");
if (pagelinks.Length > 0)
@@ -293,15 +302,22 @@ namespace Jackett.Common.Indexers
if (limit == 0)
limit = 100;
releases = parseTorrents(results, seasonep, query, releases.Count, limit);
if (start_page == 1)
{
releases = parseTorrents(results, seasonep, query, releases.Count, limit, previously_parsed_on_page);
previously_parsed_on_page = 0;
start_page++;
}
// Check all the pages for the torrents.
// The starting index is 2. (the first one is the original where we parse out the pages.)
for (int i=2; (i<= numVal && releases.Count < limit); i++ )
for (int i= start_page; (i<= numVal && releases.Count < limit); i++ )
{
pairs.Add(new KeyValuePair<string, string>("oldal", i.ToString()));
results = await PostDataWithCookiesAndRetry(SearchUrl, pairs);
releases.AddRange(parseTorrents(results, seasonep, query, releases.Count, limit));
releases.AddRange(parseTorrents(results, seasonep, query, releases.Count, limit, previously_parsed_on_page));
previously_parsed_on_page = 0;
pairs.Remove(new KeyValuePair<string, string>("oldal", i.ToString()));
}

View File

@@ -290,7 +290,7 @@ namespace Jackett.Common.Indexers
release.MinimumSeedTime = 172800;
var qLink = row.ChildElements.ElementAt(1).Cq().Find("a").First();
release.Title = qLink.Text().Trim();
release.Title = qLink.Attr("title");
if (qLink.Find("span").Count() == 1 && release.Title.StartsWith("NEW! |"))
{
release.Title = release.Title.Substring(6).Trim();

View File

@@ -18,7 +18,7 @@ namespace Jackett.Common.Indexers
{
public class Rarbg : BaseWebIndexer
{
// API doc: https://torrentapi.org/apidocs_v2.txt
// API doc: https://torrentapi.org/apidocs_v2.txt?app_id=Jackett
private static readonly string defaultSiteLink = "https://torrentapi.org/";
private Uri BaseUri
@@ -232,8 +232,8 @@ namespace Jackett.Common.Indexers
release.MagnetUri = new Uri(item.Value<string>("download"));
release.InfoHash = release.MagnetUri.ToString().Split(':')[3].Split('&')[0];
release.Comments = new Uri(item.Value<string>("info_page"));
// append app_id to prevent api server returning 403 forbidden
release.Comments = new Uri(item.Value<string>("info_page") + "&app_id=" + app_id);
if (provideTorrentLink)
release.Link = release.Comments; // in case of a torrent download we grab the link from the details page in Download()
release.Guid = release.MagnetUri;

View File

@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Net;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
@@ -32,7 +33,7 @@ namespace Jackett.Common.Indexers
set { base.configData = value; }
}
public TVstore(IIndexerConfigurationService configService, WebClient wc, Logger l, IProtectionService ps)
public TVstore(IIndexerConfigurationService configService, Utils.Clients.WebClient wc, Logger l, IProtectionService ps)
: base(name: "TVstore",
description: "TV Store is a HUNGARIAN Private Torrent Tracker for TV",
link: "https://tvstore.me/",
@@ -215,7 +216,7 @@ namespace Jackett.Common.Indexers
try
{
var id = seriesknowbysite[i];
string[] serieselement = id.Split(';');
string[] serieselement = WebUtility.HtmlDecode(id).Split(';');
SeriesDetail sd = new SeriesDetail();
sd.HunName = serieselement[1].Split('=')[1].Trim('\'').ToLower();
sd.EngName = serieselement[2].Split('=')[1].Trim('\'').ToLower();
@@ -224,7 +225,9 @@ namespace Jackett.Common.Indexers
series.Add(sd);
}
catch (IndexOutOfRangeException e)
{ }
{
throw (e);
}
}
}
}

View File

@@ -74,7 +74,7 @@ namespace Jackett.Common.Indexers {
var queryCollection = new NameValueCollection ();
queryCollection.Add ("q", searchString);
queryCollection.Add ("size", "100");
queryCollection.Add ("size", "500");
queryCollection.Add ("type_", "torrent");
var searchUrl = ApiEndpoint + "?" + queryCollection.GetQueryString ();

View File

@@ -53,6 +53,8 @@ namespace Jackett.Common.Indexers
configData.DisplayText.Value = "Expect an initial delay (often around 10 seconds) due to XSpeeds CloudFlare DDoS protection";
configData.DisplayText.Name = "Notice";
TorznabCaps.SupportsImdbSearch = true;
AddCategoryMapping(92, TorznabCatType.MoviesUHD, "4K Movies");
AddCategoryMapping(91, TorznabCatType.TVUHD, "4K TV");
AddCategoryMapping(94, TorznabCatType.TVUHD, "4K TV Boxsets");
@@ -214,6 +216,8 @@ namespace Jackett.Common.Indexers
var releases = new List<ReleaseInfo>();
var searchString = query.GetQueryString();
var prevCook = CookieHeader + "";
Regex IMDBRegEx = new Regex(@"tt(\d+)", RegexOptions.Compiled);
var searchStringIsImdbQuery = (ParseUtil.GetImdbID(searchString) != null);
// If we have no query use the RSS Page as their server is slow enough at times!
// ~15.01.2019 they removed the description tag making the RSS feed almost useless, we don't use it for now. See #4458
@@ -286,11 +290,26 @@ namespace Jackett.Common.Indexers
*/
var searchParams = new Dictionary<string, string> {
{ "do", "search" },
{ "keywords", searchString },
{ "search_type", "t_name" },
{ "category", "0" },
{ "include_dead_torrents", "no" }
};
if (query.IsImdbQuery)
{
searchParams.Add("keywords", query.ImdbID);
searchParams.Add("search_type", "t_both");
}
else if (searchStringIsImdbQuery)
{
searchParams.Add("keywords", searchString);
searchParams.Add("search_type", "t_both");
}
else
{
searchParams.Add("keywords", searchString);
searchParams.Add("search_type", "t_name");
}
var pairs = new Dictionary<string, string> {
{ "username", configData.Username.Value },
{ "password", configData.Password.Value }

View File

@@ -0,0 +1,200 @@
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Globalization;
using System.Text;
using System.Threading.Tasks;
using Jackett.Common.Models;
using Jackett.Common.Models.IndexerConfig;
using Jackett.Common.Services.Interfaces;
using Jackett.Common.Utils;
using Jackett.Common.Utils.Clients;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using NLog;
namespace Jackett.Common.Indexers
{
public class Digitalcore : BaseWebIndexer
{
private string SearchUrl { get { return SiteLink + "api/v1/torrents"; } }
private string LoginUrl { get { return SiteLink + "api/v1/auth"; } }
private new ConfigurationDataBasicLogin configData
{
get { return (ConfigurationDataBasicLogin)base.configData; }
set { base.configData = value; }
}
public Digitalcore(IIndexerConfigurationService configService, WebClient w, Logger l, IProtectionService ps)
: base(name: "DigitalCore",
description: "DigitalCore is a Private Torrent Tracker for MOVIES / TV / GENERAL",
link: "https://digitalcore.club/",
caps: new TorznabCapabilities(),
configService: configService,
client: w,
logger: l,
p: ps,
configData: new ConfigurationDataBasicLogin())
{
Encoding = Encoding.UTF8;
Language = "en-us";
Type = "private";
TorznabCaps.SupportsImdbSearch = true;
AddCategoryMapping(1, TorznabCatType.MoviesDVD, "Movies/DVDR");
AddCategoryMapping(2, TorznabCatType.MoviesSD, "Movies/XviD");
AddCategoryMapping(3, TorznabCatType.MoviesBluRay, "Movies/BluRay");
AddCategoryMapping(4, TorznabCatType.MoviesUHD, "Movies/4K");
AddCategoryMapping(5, TorznabCatType.MoviesHD, "Movies/720p");
AddCategoryMapping(6, TorznabCatType.MoviesHD, "Movies/1080p");
AddCategoryMapping(8, TorznabCatType.TVHD, "Tv/720p");
AddCategoryMapping(9, TorznabCatType.TVHD, "Tv/1080p");
AddCategoryMapping(10, TorznabCatType.TVSD, "Tv/XVID");
AddCategoryMapping(11, TorznabCatType.TVSD, "Tv/DVDR");
AddCategoryMapping(12, TorznabCatType.TVHD, "Tv/PACKS");
AddCategoryMapping(13, TorznabCatType.TVUHD, "Tv/4K");
AddCategoryMapping(14, TorznabCatType.TVHD, "Tv/BluRay");
AddCategoryMapping(17, TorznabCatType.Other, "Unknown");
AddCategoryMapping(18, TorznabCatType.PC0day, "Apps/0day");
AddCategoryMapping(19, TorznabCatType.PCGames, "Games/PC");
AddCategoryMapping(20, TorznabCatType.PCISO, "Apps/PC");
AddCategoryMapping(22, TorznabCatType.AudioMP3, "Music/MP3");
AddCategoryMapping(23, TorznabCatType.AudioLossless, "Music/FLAC");
AddCategoryMapping(24, TorznabCatType.Audio, "Music/MTV");
AddCategoryMapping(30, TorznabCatType.XXX, "XXX/SD");
AddCategoryMapping(31, TorznabCatType.XXX, "XXX/HD");
AddCategoryMapping(32, TorznabCatType.XXX, "XXX/4K");
}
public override async Task<IndexerConfigurationStatus> ApplyConfiguration(JToken configJson)
{
LoadValuesFromJson(configJson);
var queryCollection = new NameValueCollection();
queryCollection.Add("username", configData.Username.Value);
queryCollection.Add("password", configData.Password.Value);
var loginUrl = LoginUrl + "?" + queryCollection.GetQueryString();
var loginResult = await RequestStringWithCookies(loginUrl, null, SiteLink);
await ConfigureIfOK(loginResult.Cookies, loginResult.Content.Contains("\"user\""), () =>
{
throw new ExceptionWithConfigData(loginResult.Content, configData);
});
return IndexerConfigurationStatus.RequiresTesting;
}
protected override async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query)
{
List<ReleaseInfo> releases = new List<ReleaseInfo>();
var queryCollection = new NameValueCollection();
var searchString = query.GetQueryString();
var searchUrl = SearchUrl;
queryCollection.Add("extendedSearch", "false");
queryCollection.Add("freeleech", "false");
queryCollection.Add("index", "0");
queryCollection.Add("limit", "100");
queryCollection.Add("order", "desc");
queryCollection.Add("page", "search");
if (query.ImdbID != null)
queryCollection.Add("searchText", query.ImdbID);
else
queryCollection.Add("searchText", searchString);
queryCollection.Add("sort", "d");
queryCollection.Add("section", "all");
queryCollection.Add("stereoscopic", "false");
queryCollection.Add("watchview", "false");
searchUrl += "?" + queryCollection.GetQueryString();
foreach (var cat in MapTorznabCapsToTrackers(query))
searchUrl += "&categories[]=" + cat;
var results = await RequestStringWithCookies(searchUrl, null, SiteLink);
try
{
//var json = JArray.Parse(results.Content);
dynamic json = JsonConvert.DeserializeObject<dynamic>(results.Content);
foreach (var row in json ?? System.Linq.Enumerable.Empty<dynamic>())
{
var release = new ReleaseInfo();
var descriptions = new List<string>();
var tags = new List<string>();
release.MinimumRatio = 1.1;
release.MinimumSeedTime = 48 * 60 * 60;
release.Title = row.name;
release.Category = MapTrackerCatToNewznab(row.category.ToString());
release.Size = row.size;
release.Seeders = row.seeders;
release.Peers = row.leechers + release.Seeders;
release.PublishDate = DateTime.ParseExact(row.added.ToString() + " +01:00", "yyyy-MM-dd HH:mm:ss zzz", CultureInfo.InvariantCulture);
release.Files = row.numfiles;
release.Grabs = row.times_completed;
release.Comments = new Uri(SiteLink + "torrent/" + row.id.ToString() + "/");
release.Guid = release.Comments;
release.Link = new Uri(SiteLink + "api/v1/torrents/download/" + row.id.ToString());
if (row.frileech == 1)
release.DownloadVolumeFactor = 0;
else
release.DownloadVolumeFactor = 1;
release.UploadVolumeFactor = 1;
// if (!string.IsNullOrWhiteSpace(row.customcover.ToString()))
// {
// release.BannerUrl = new Uri(SiteLink + row.customcover);
//}
if (row.imdbid2 != null && row.imdbid2.ToString().StartsWith("tt"))
{
release.Imdb = ParseUtil.CoerceLong(row.imdbid2.ToString().Substring(2));
descriptions.Add("Title: " + row.title);
descriptions.Add("Year: " + row.year);
descriptions.Add("Genres: " + row.genres);
descriptions.Add("Tagline: " + row.tagline);
descriptions.Add("Cast: " + row.cast);
descriptions.Add("Rating: " + row.rating);
//descriptions.Add("Plot: " + row.plot);
release.BannerUrl = new Uri(SiteLink + "img/imdb/" + row.imdbid2 + ".jpg");
}
if ((int)row.p2p == 1)
tags.Add("P2P");
if ((int)row.pack == 1)
tags.Add("Pack");
if ((int)row.reqid != 0)
tags.Add("Request");
if (tags.Count > 0)
descriptions.Add("Tags: " + string.Join(", ", tags));
// var preDate = row.preDate.ToString();
// if (!string.IsNullOrWhiteSpace(preDate) && preDate != "1970-01-01 01:00:00")
// descriptions.Add("PRE: " + preDate);
descriptions.Add("Section: " + row.section);
release.Description = string.Join("<br>\n", descriptions);
releases.Add(release);
}
}
catch (Exception ex)
{
OnParseError(results.Content, ex);
}
return releases;
}
}
}

View File

@@ -7,14 +7,15 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="AngleSharp" Version="0.10.1" />
<PackageReference Include="Autofac" Version="4.8.1" />
<PackageReference Include="AngleSharp" Version="0.11.0" />
<PackageReference Include="Autofac" Version="4.9.1" />
<PackageReference Include="AutoMapper" Version="8.0.0" />
<PackageReference Include="BencodeNET" Version="2.2.24" />
<PackageReference Include="CloudFlareUtilities" Version="1.2.0" />
<PackageReference Include="BencodeNET" Version="2.3.0" />
<PackageReference Include="CloudFlareUtilities" Version="1.3.0" />
<PackageReference Include="CommandLineParser" Version="2.4.3" />
<PackageReference Include="CsQuery.NETStandard" Version="1.3.6.1" />
<PackageReference Include="DotNet4.SocksProxy" Version="1.4.0.1" />
<PackageReference Include="Microsoft.AspNetCore.Http" Version="2.2.2" />
<PackageReference Include="Microsoft.AspNetCore.WebUtilities" Version="2.2.0" />
<PackageReference Include="Microsoft.CSharp" Version="4.5.0" />
<PackageReference Include="MimeMapping" Version="1.0.1.12" />
@@ -23,7 +24,7 @@
<PackageReference Include="SharpZipLib" Version="1.1.0" />
<PackageReference Include="System.IO.FileSystem.AccessControl" Version="4.5.0" />
<PackageReference Include="System.ServiceProcess.ServiceController" Version="4.5.0" />
<PackageReference Include="YamlDotNet" Version="5.3.0" />
<PackageReference Include="YamlDotNet" Version="5.4.0" />
</ItemGroup>
<ItemGroup>

View File

@@ -45,10 +45,10 @@ namespace Jackett.Common.Models
public static readonly TorznabCategory MoviesSD = new TorznabCategory(2030, "Movies/SD");
public static readonly TorznabCategory MoviesHD = new TorznabCategory(2040, "Movies/HD");
public static readonly TorznabCategory MoviesUHD = new TorznabCategory(2045, "Movies/UHD");
public static readonly TorznabCategory Movies3D = new TorznabCategory(2050, "Movies/3D");
public static readonly TorznabCategory MoviesUHD = new TorznabCategory(2045, "Movies/UHD");
public static readonly TorznabCategory Movies3D = new TorznabCategory(2050, "Movies/3D");
public static readonly TorznabCategory MoviesBluRay = new TorznabCategory(2060, "Movies/BluRay");
@@ -95,10 +95,10 @@ namespace Jackett.Common.Models
public static readonly TorznabCategory TVSD = new TorznabCategory(5030, "TV/SD");
public static readonly TorznabCategory TVHD = new TorznabCategory(5040, "TV/HD");
public static readonly TorznabCategory TVUHD = new TorznabCategory(5045, "TV/UHD");
public static readonly TorznabCategory TVOTHER = new TorznabCategory(5050, "TV/OTHER");
public static readonly TorznabCategory TVUHD = new TorznabCategory(5045, "TV/UHD");
public static readonly TorznabCategory TVOTHER = new TorznabCategory(5050, "TV/OTHER");
public static readonly TorznabCategory TVSport = new TorznabCategory(5060, "TV/Sport");

View File

@@ -26,6 +26,7 @@
2020: Movies/Other
2030: Movies/SD
2040: Movies/HD
2045: Movies/UHD
2050: Movies/3D
2060: Movies/BluRay
2070: Movies/DVD
@@ -50,6 +51,7 @@
5020: TV/FOREIGN
5030: TV/SD
5040: TV/HD
5045: TV/UHD
5050: TV/OTHER
5060: TV/Sport
5070: TV/Anime
@@ -76,7 +78,7 @@
"; #>
using System.Collections.Generic;
namespace Jackett.Models
namespace Jackett.Common.Models
{
public static partial class TorznabCatType

View File

@@ -137,6 +137,7 @@ namespace Jackett.Common.Models
TorznabCatType.MoviesBluRay.ID,
TorznabCatType.MoviesDVD.ID,
TorznabCatType.MoviesWEBDL.ID,
TorznabCatType.MoviesUHD.ID,
};
}
ret.SearchTerm = search;
@@ -175,6 +176,8 @@ namespace Jackett.Common.Models
ret.QueryStringParts = new string[QueryStringParts.Length];
Array.Copy(QueryStringParts, ret.QueryStringParts, QueryStringParts.Length);
}
ret.RageID = RageID;
ret.ImdbID = ImdbID;
return ret;
}

View File

@@ -0,0 +1,7 @@
namespace Jackett.Common.Services.Interfaces
{
public interface IFilePermissionService
{
void MakeFileExecutable(string path);
}
}

View File

@@ -1,6 +1,6 @@
using System;
using System.Collections.Generic;
using System.Net.Http;
using Microsoft.AspNetCore.Http;
namespace Jackett.Common.Services.Interfaces
{
@@ -12,7 +12,7 @@ namespace Jackett.Common.Services.Interfaces
void ReserveUrls(bool doInstall = true);
Uri ConvertToProxyLink(Uri link, string serverUrl, string indexerId, string action = "dl", string file = "t");
string BasePath();
string GetServerUrl(object Request); //TODO: Once Mono is removed, change type to HttpRequest
string GetServerUrl(HttpRequest Request);
List<string> notices { get; }
string GetBlackholeDirectory();
string GetApiKey();

View File

@@ -30,17 +30,23 @@ namespace Jackett.Common.Services
IConfigurationService configService;
ManualResetEvent locker = new ManualResetEvent(false);
ITrayLockService lockService;
IProcessService processService;
IServiceConfigService windowsService;
IFilePermissionService filePermissionService;
private ServerConfig serverConfig;
bool forceupdatecheck = false;
Variants.JackettVariant variant = Variants.JackettVariant.NotFound;
public UpdateService(Logger l, WebClient c, IConfigurationService cfg, ITrayLockService ls, ServerConfig sc)
public UpdateService(Logger l, WebClient c, IConfigurationService cfg, ITrayLockService ls, IProcessService ps, IServiceConfigService ws, IFilePermissionService fps, ServerConfig sc)
{
logger = l;
client = c;
configService = cfg;
lockService = ls;
processService = ps;
windowsService = ws;
serverConfig = sc;
filePermissionService = fps;
}
private string ExePath()
@@ -94,12 +100,6 @@ namespace Jackett.Common.Services
variant = variants.GetVariant();
logger.Info("Jackett variant: " + variant.ToString());
if (DotNetCoreUtil.IsRunningOnDotNetCore)
{
logger.Info($"Skipping update check as running Jackett on .NET Core is still in preview. Updates must be performed manually at this time.");
return;
}
forceupdatecheck = true;
var isWindows = System.Environment.OSVersion.Platform != PlatformID.Unix;
@@ -117,7 +117,6 @@ namespace Jackett.Common.Services
try
{
var response = await client.GetString(new WebRequest()
{
Url = "https://api.github.com/repos/Jackett/Jackett/releases",
@@ -147,12 +146,14 @@ namespace Jackett.Common.Services
logger.Info($"New release found. Current: {currentVersion} New: {latestRelease.Name}");
try
{
var tempDir = await DownloadRelease(latestRelease.Assets, isWindows, latestRelease.Name);
var tempDir = await DownloadRelease(latestRelease.Assets, isWindows, latestRelease.Name);
// Copy updater
var installDir = Path.GetDirectoryName(ExePath());
var updaterPath = Path.Combine(tempDir, "Jackett", "JackettUpdater.exe");
var updaterPath = GetUpdaterPath(tempDir);
if (updaterPath != null)
{
StartUpdate(updaterPath, installDir, isWindows, serverConfig.RuntimeSettings.NoRestart, trayIsRunning);
}
}
catch (Exception e)
{
@@ -178,6 +179,19 @@ namespace Jackett.Common.Services
}
}
private string GetUpdaterPath(string tempDirectory)
{
if (variant == Variants.JackettVariant.CoreMacOs || variant == Variants.JackettVariant.CoreLinuxAmdx64 ||
variant == Variants.JackettVariant.CoreLinuxArm32 || variant == Variants.JackettVariant.CoreLinuxArm64)
{
return Path.Combine(tempDirectory, "Jackett", "JackettUpdater");
}
else
{
return Path.Combine(tempDirectory, "Jackett", "JackettUpdater.exe");
}
}
private string GetCurrentVersion()
{
var assembly = Assembly.GetExecutingAssembly();
@@ -204,8 +218,8 @@ namespace Jackett.Common.Services
logger.Error("Temp dir doesn't exist: " + tempDir.ToString());
return;
}
try {
try {
DirectoryInfo d = new DirectoryInfo(tempDir);
foreach (var dir in d.GetDirectories("JackettUpdate-*"))
{
@@ -276,6 +290,32 @@ namespace Jackett.Common.Services
tarArchive.Close();
gzipStream.Close();
inStream.Close();
if (variant == Variants.JackettVariant.CoreMacOs || variant == Variants.JackettVariant.CoreLinuxAmdx64
|| variant == Variants.JackettVariant.CoreLinuxArm32 || variant == Variants.JackettVariant.CoreLinuxArm64)
{
//Calling the file permission service to limit usage to netcoreapp. The Mono.Posix.NETStandard library causes issues outside of .NET Core
//https://github.com/xamarin/XamarinComponents/issues/282
// When the files get extracted, the execute permission for jackett and JackettUpdater don't get carried across
string jackettPath = tempDir + "/Jackett/jackett";
filePermissionService.MakeFileExecutable(jackettPath);
string jackettUpdaterPath = tempDir + "/Jackett/JackettUpdater";
filePermissionService.MakeFileExecutable(jackettUpdaterPath);
if (variant == Variants.JackettVariant.CoreMacOs)
{
string macosServicePath = tempDir + "/Jackett/install_service_macos";
filePermissionService.MakeFileExecutable(macosServicePath);
}
else
{
string systemdPath = tempDir + "/Jackett/install_service_systemd.sh";
filePermissionService.MakeFileExecutable(systemdPath);
}
}
}
return tempDir;
@@ -284,9 +324,6 @@ namespace Jackett.Common.Services
private void StartUpdate(string updaterExePath, string installLocation, bool isWindows, bool NoRestart, bool trayIsRunning)
{
string appType = "Console";
//DI once off Owin
IProcessService processService = new ProcessService(logger);
IServiceConfigService windowsService = new WindowsServiceConfigService(processService, logger);
if (isWindows && windowsService.ServiceExists() && windowsService.ServiceRunning())
{
@@ -294,19 +331,14 @@ namespace Jackett.Common.Services
}
var exe = Path.GetFileName(ExePath());
var args = string.Join(" ", Environment.GetCommandLineArgs().Skip(1).Select(a => a.Contains(" ") ? "\"" +a + "\"" : a )).Replace("\"", "\\\"");
var args = string.Join(" ", Environment.GetCommandLineArgs().Skip(1).Select(a => a.Contains(" ") ? "\"" + a + "\"" : a )).Replace("\"", "\\\"");
var startInfo = new ProcessStartInfo();
startInfo.UseShellExecute = false;
startInfo.CreateNoWindow = true;
// Note: add a leading space to the --Args argument to avoid parsing as arguments
if (isWindows)
{
startInfo.Arguments = $"--Path \"{installLocation}\" --Type \"{appType}\" --Args \" {args}\"";
startInfo.FileName = Path.Combine(updaterExePath);
}
else
if (variant == Variants.JackettVariant.Mono)
{
// Wrap mono
args = exe + " " + args;
@@ -315,6 +347,11 @@ namespace Jackett.Common.Services
startInfo.Arguments = $"{Path.Combine(updaterExePath)} --Path \"{installLocation}\" --Type \"{appType}\" --Args \" {args}\"";
startInfo.FileName = "mono";
}
else
{
startInfo.Arguments = $"--Path \"{installLocation}\" --Type \"{appType}\" --Args \" {args}\"";
startInfo.FileName = Path.Combine(updaterExePath);
}
try
{

View File

@@ -1,7 +1,5 @@
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Text;
namespace Jackett.Common.Utils
{
@@ -14,7 +12,7 @@ namespace Jackett.Common.Utils
Mono,
CoreWindows,
CoreMacOs,
CoreLinuxAmd64,
CoreLinuxAmdx64,
CoreLinuxArm32,
CoreLinuxArm64
}
@@ -37,7 +35,7 @@ namespace Jackett.Common.Utils
if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux) && RuntimeInformation.ProcessArchitecture == Architecture.X64)
{
return JackettVariant.CoreLinuxAmd64;
return JackettVariant.CoreLinuxAmdx64;
}
if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux) && RuntimeInformation.ProcessArchitecture == Architecture.Arm)
@@ -67,7 +65,6 @@ namespace Jackett.Common.Utils
return JackettVariant.NotFound;
}
public string GetArtifactFileName(JackettVariant variant)
{
switch (variant)
@@ -88,9 +85,9 @@ namespace Jackett.Common.Utils
{
return "Jackett.Binaries.macOS.tar.gz";
}
case JackettVariant.CoreLinuxAmd64:
case JackettVariant.CoreLinuxAmdx64:
{
return "Jackett.Binaries.LinuxAMD64.tar.gz";
return "Jackett.Binaries.LinuxAMDx64.tar.gz";
}
case JackettVariant.CoreLinuxArm32:
{

View File

@@ -22,12 +22,13 @@
<!-- Conditionally obtain references for the .NET Core App 2.2 target -->
<ItemGroup Condition=" '$(TargetFramework)' == 'netcoreapp2.2' ">
<PackageReference Include="Mono.Posix.NETStandard" Version="1.0.0" />
<PackageReference Include="System.Security.Cryptography.ProtectedData" Version="4.5.0" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Autofac" Version="4.8.1" />
<PackageReference Include="Autofac.Extensions.DependencyInjection" Version="4.3.1" />
<PackageReference Include="Autofac" Version="4.9.1" />
<PackageReference Include="Autofac.Extensions.DependencyInjection" Version="4.4.0" />
<PackageReference Include="AutoMapper" Version="8.0.0" />
<PackageReference Include="CommandLineParser" Version="2.4.3" />
<PackageReference Include="Microsoft.AspNetCore" Version="2.2.0" />
@@ -39,7 +40,7 @@
<PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="2.2.0" />
<PackageReference Include="Microsoft.Extensions.Configuration" Version="2.2.0" />
<PackageReference Include="NLog" Version="4.5.11" />
<PackageReference Include="NLog.Web.AspNetCore" Version="4.7.1" />
<PackageReference Include="NLog.Web.AspNetCore" Version="4.8.0" />
<PackageReference Include="System.ServiceProcess.ServiceController" Version="4.5.0" />
<PackageReference Include="System.Text.Encoding.CodePages" Version="4.5.1" />
</ItemGroup>

View File

@@ -0,0 +1,41 @@
using Jackett.Common.Services.Interfaces;
using NLog;
using System;
#if NETCOREAPP2_2
using Mono.Unix;
#endif
namespace Jackett.Server.Services
{
public class FilePermissionService : IFilePermissionService
{
private Logger logger;
public FilePermissionService(Logger l)
{
logger = l;
}
public void MakeFileExecutable(string path)
{
#if NETCOREAPP2_2
//Calling the file permission service to limit usage to netcoreapp. The Mono.Posix.NETStandard library causes issues outside of .NET Core
//https://github.com/xamarin/XamarinComponents/issues/282
logger.Debug($"Attempting to give execute permission to: {path}");
try
{
UnixFileInfo jackettUpdaterFI = new UnixFileInfo(path)
{
FileAccessPermissions = FileAccessPermissions.UserReadWriteExecute | FileAccessPermissions.GroupRead | FileAccessPermissions.OtherRead
};
}
catch (Exception ex)
{
logger.Error(ex);
}
#endif
}
}
}

View File

@@ -314,36 +314,33 @@ namespace Jackett.Server.Services
// Only needed for Owin
}
public string GetServerUrl(Object obj)
public string GetServerUrl(HttpRequest request)
{
string serverUrl = "";
if (obj is HttpRequest request)
var scheme = request.Scheme;
var port = request.HttpContext.Request.Host.Port;
// Check for protocol headers added by reverse proxys
// X-Forwarded-Proto: A de facto standard for identifying the originating protocol of an HTTP request
var X_Forwarded_Proto = request.Headers.Where(x => x.Key == "X-Forwarded-Proto").Select(x => x.Value).FirstOrDefault();
if (X_Forwarded_Proto.Count > 0)
{
var scheme = request.Scheme;
var port = request.HttpContext.Request.Host.Port;
// Check for protocol headers added by reverse proxys
// X-Forwarded-Proto: A de facto standard for identifying the originating protocol of an HTTP request
var X_Forwarded_Proto = request.Headers.Where(x => x.Key == "X-Forwarded-Proto").Select(x => x.Value).FirstOrDefault();
if (X_Forwarded_Proto.Count > 0)
{
scheme = X_Forwarded_Proto.First();
}
// Front-End-Https: Non-standard header field used by Microsoft applications and load-balancers
else if (request.Headers.Where(x => x.Key == "Front-End-Https" && x.Value.FirstOrDefault() == "on").Any())
{
scheme = "https";
}
//default to 443 if the Host header doesn't contain the port (needed for reverse proxy setups)
if (scheme == "https" && !request.HttpContext.Request.Host.Value.Contains(":"))
{
port = 443;
}
serverUrl = string.Format("{0}://{1}:{2}{3}/", scheme, request.HttpContext.Request.Host.Host, port, BasePath());
scheme = X_Forwarded_Proto.First();
}
// Front-End-Https: Non-standard header field used by Microsoft applications and load-balancers
else if (request.Headers.Where(x => x.Key == "Front-End-Https" && x.Value.FirstOrDefault() == "on").Any())
{
scheme = "https";
}
//default to 443 if the Host header doesn't contain the port (needed for reverse proxy setups)
if (scheme == "https" && !request.HttpContext.Request.Host.Value.Contains(":"))
{
port = 443;
}
serverUrl = string.Format("{0}://{1}:{2}{3}/", scheme, request.HttpContext.Request.Host.Host, port, BasePath());
return serverUrl;
}

Some files were not shown because too many files have changed in this diff Show More