Compare commits

..

398 Commits

Author SHA1 Message Date
kaso17
108213f098 DanishBits: use couchpotato API 2017-09-15 18:57:43 +02:00
kaso17
861271ac04 TorznabQuery: allow % in search term 2017-09-15 18:54:33 +02:00
kaso17
b378f74202 zetorrents: remove 2017-09-15 17:08:33 +02:00
kaso17
866e1df174 Add GkTorrent tracker 2017-09-15 17:05:55 +02:00
kaso17
0bb231eeca Back-ups: minor changes 2017-09-15 08:20:57 +02:00
halali
fb5c82ff85 Add Back-ups and SkTorrent trackers (#1830)
* Fix Date and inprove seasson searching for CzTorrent

* Update title filter

* Add Back-ups and SkTorrent

* Update reabme

* Update backups.yml
2017-09-15 08:15:40 +02:00
garfield69
d9f57b4e13 Definitions: replace deprecated optional (#1827)
* bithumen: replace deprecated use of optional

* bitspyder: replace deprecated use of optional

* chdbits: replace deprecated use of optional

* diablotorrent: replace deprecated use of optional

* eztv: replace deprecated use of optional

* funkytorrents: replace deprecated use of optional

* hon3yhd: replace deprecated use of optional

* insanetracker: replace deprecated use of optional

* kapaki: replace deprecated use of optional

* limetorrents: replace deprecated use of optional

* linkomanija: replace deprecated use of optional

* losslessclub: replace deprecated use of optional

* magico: replace deprecated use of optional

* majomparade: replace deprecated use of optional

* ourbits: replace deprecated use of optional

* polishsource: replace deprecated use of optional

* rodvd: replace deprecated use of optional

* torrentccf: replace deprecated use of optional

* torrenthr: replace deprecated use of optional

* torrentproject: replace deprecated use of optional

* torrentz2: replace deprecated use of optional

* oops

* Update bitspyder.yml

* Update insanetracker.yml

* Update kapaki.yml

* Update magico.yml

* Update polishsource.yml

* Update torrenthr.yml

* Update polishsource.yml
2017-09-15 08:14:46 +02:00
garfield69
4676972493 add Zooqle tracker (#1826)
fix #1185
2017-09-15 08:01:10 +02:00
kaso17
1d3ac34011 add innerstacktrace on request exception 2017-09-14 15:01:01 +02:00
kaso17
634a860f5c DigitalHive: Captcha is optional now 2017-09-14 15:00:33 +02:00
kaso17
eb00665df1 Hounddawgs: fix bannerUri usage 2017-09-13 12:53:38 +02:00
kaso17
5e77d27021 ArcheTorrent: improve parsing 2017-09-13 12:50:21 +02:00
Malte Baden Hansen
8fec3ede4e Hounddawgs: fix wrong image path causing torrent parsing to fail. (#1808)
* Wrapped item parsing in try catch / one erranious torrent should not fuck up the entire parsing.
Changed Uri creation to use TryCreate, to harden against invalid image paths.

* Woops, can't use new C# features...
2017-09-13 12:06:44 +02:00
kaso17
ae6d5ccfc6 ResultsController: fix request exception handling 2017-09-13 12:01:07 +02:00
kaso17
e309d96c51 Hounddawgs: handle invalid BannerUrls 2017-09-13 11:56:05 +02:00
kaso17
2a3b42f83a BaseIndexer: include original stack trace in OnParseError exceptions 2017-09-13 11:49:24 +02:00
kaso17
4819a3c8ed Continue loading cardigann definition in case of an error 2017-09-13 11:33:17 +02:00
halali
34d091942a CzTorrent : Fix Date and improve season searching (#1812)
* Fix Date and inprove seasson searching for CzTorrent

* Update title filter
2017-09-13 11:19:01 +02:00
kaso17
ee2abe6751 TorrentVault: fix date format 2017-09-13 11:15:24 +02:00
kaso17
27f0448caf TorrentVault: add certificate 2017-09-13 11:14:26 +02:00
kaso17
6493037251 UpdateService: always print current/latest version 2017-09-13 10:35:51 +02:00
kaso17
0cd11e1882 Improve error handling if the tracker is down 2017-09-13 09:57:39 +02:00
kaso17
cfdafa01c9 Torlock: fix date parsing 2017-09-13 09:29:30 +02:00
kaso17
e3852bcb1b Merge branch 'master' of https://github.com/Jackett/Jackett.git 2017-09-13 09:13:58 +02:00
kaso17
e33e95c1b2 The Empire: update site link 2017-09-13 09:13:49 +02:00
garfield69
3d0e777d22 SceneAccess: remove (shutdown) (#1818)
* docs: delete sceneAccess

* Delete SceneAccess.cs

* cleanup for Indexers/SceneAccess.cs

* remove SceneAccess.cs

* revert, as SceneAccess is not a yml definition but a cs indexer
2017-09-13 09:00:54 +02:00
kaso17
aeb3d49c06 fix Definitions include 2017-09-11 15:16:16 +02:00
kaso17
c2cf5adeb2 PolishTracker: update for new reaper engine 2017-09-11 15:10:54 +02:00
kaso17
40ab7280ca add TorrentVault tracker 2017-09-11 12:39:22 +02:00
kaso17
0c37a191fd added Synthesiz3r tracker 2017-09-11 12:02:45 +02:00
kaso17
19547bc58f AnimeBytes: remove useless request 2017-09-11 11:39:47 +02:00
adamwinn
bcbe18214b Karagarga: Fix parsing (#1798) 2017-09-11 11:03:57 +02:00
Alan Gregory
eb60a6854c manicomioshare: Fixed "Unknown series" on sonarr (#1802)
* Fixed "Unknown series on sonarr"

* Changed whitespace to E
2017-09-11 11:03:22 +02:00
adamwinn
11406697be Secret Cinema: change definition to match new site (#1803) 2017-09-11 11:02:39 +02:00
kaso17
b2b576a72d SpeedCD: fix row selector 2017-09-11 10:50:23 +02:00
kaso17
e537e4976e Dream Team: fix definition 2017-09-11 10:33:18 +02:00
kaso17
490254d16b Revert "Dream Team: remove (dead)"
This reverts commit a5cc7d973f.
2017-09-11 10:26:11 +02:00
kaso17
a5cc7d973f Dream Team: remove (dead) 2017-09-09 14:36:47 +02:00
kaso17
3e000453a5 add error message 2017-09-08 19:05:10 +02:00
kaso17
8f090fabef UI: revert target blank change 2017-09-08 19:02:53 +02:00
kaso17
91eb4c37cb TNTVillage: remove diacritics 2017-09-08 19:01:36 +02:00
kaso17
da43f17558 Cardigann: add diacritics filter 2017-09-08 19:00:25 +02:00
kaso17
3b3c3b0947 EliteTracker: update categories 2017-09-08 18:04:28 +02:00
kaso17
06e386c253 readme: update CA certificates error 2017-09-08 17:47:50 +02:00
thebluepotato
a2ae2d3384 Enhance the service installation on MacOS (#1793)
* Make the script self-executing

* Update script with colors

Since it’s self-executing, at least the output is more visible

* Changes to README

* Update Jackett.Console.csproj

* Clarify README
2017-09-08 17:12:47 +02:00
thebluepotato
3532a73d59 UI: Change the type locks to labels (#1773)
* Changing the locks

* Changing the locks to labels

* Update index.html

update chagned param

* whitespaces
2017-09-08 09:06:06 +02:00
thebluepotato
b7daffea87 Enhance the macOS install script (#1786)
Fixes #1784
2017-09-08 09:04:41 +02:00
kaso17
e7b9f8c5ec HDTorrents: fix parsing 2017-09-05 18:37:25 +02:00
garfield69
9ada58a6e3 HDClub: remove (#1772)
* drop HDClub

* delete hdclub

* Delete hdclub.yml
2017-09-03 12:16:37 +02:00
kaso17
c8d974cf52 Add AST4u tracker 2017-09-03 10:03:38 +02:00
kaso17
c544de8fed Demonoid: add recaptcha support 2017-09-02 14:40:29 +02:00
kaso17
93ec102a86 7Tor: add automatic relogin 2017-09-01 18:17:14 +02:00
kaso17
92bda2b09b Anidex: fix definition 2017-09-01 18:08:47 +02:00
kaso17
1cd0358531 SceneTime: make category optional 2017-09-01 17:46:24 +02:00
kaso17
222fec2fd0 whitespace fixes 2017-09-01 17:32:20 +02:00
kaso17
3790cbb894 Add support for X-Forwarded-Proto/Front-End-Https headers 2017-09-01 17:28:56 +02:00
kaso17
05d5798046 Add root privileges notice 2017-08-31 17:48:49 +02:00
kaso17
9e9deb17c7 attempt to fix caching related issues 2017-08-31 12:21:59 +02:00
kaso17
2aedc4f335 IPTorrents: fix AlternativeSiteLinks 2017-08-31 12:14:31 +02:00
kaso17
dfa708e355 IPTorrents: update Alternative Site Links 2017-08-31 11:13:09 +02:00
kaso17
6d1997ef96 UI: Improve Alternative Site Link selection 2017-08-31 11:12:50 +02:00
kaso17
db479d8de8 fix AlternativeSiteLinks 2017-08-31 10:50:47 +02:00
kaso17
741e6407ce FullMixMusic: update URL 2017-08-31 10:50:12 +02:00
kaso17
141f3e57e5 Introduce LegacySiteLinks to automatically update to new SiteLinks 2017-08-30 18:46:36 +02:00
kaso17
00027a41c1 manual search: add multiselect support for tracker/category dropdowns 2017-08-30 17:40:32 +02:00
kaso17
e754d3da9f Merge branch 'master' of https://github.com/Jackett/Jackett.git 2017-08-30 13:52:37 +02:00
kaso17
bf54a2f171 manual search: fix selected indexer log output 2017-08-30 13:52:31 +02:00
garfield69
7b7d0082b6 Docs: refresh public, semi-private, private lists (#1754) 2017-08-30 11:54:56 +02:00
kaso17
3614b1b3da Merge branch 'master' of https://github.com/Jackett/Jackett.git 2017-08-30 11:54:06 +02:00
kaso17
39b0670a29 UI: adjust base path override placeholder 2017-08-30 11:52:27 +02:00
kaso17
1689c46c91 ServerConfiguration: add basePathOverride validation/normalization 2017-08-30 11:51:25 +02:00
kaso17
0143bdfe14 UI: fix updateServerConfig error handling 2017-08-30 11:50:11 +02:00
garfield69
93a9568a77 docs: T411v2 is now public as per #1740 (#1752) 2017-08-29 21:23:53 +02:00
Jonas Stendahl
40079b0365 SceneAccess: site is now permanently free-leech (#1749) 2017-08-29 18:50:25 +02:00
kaso17
168f04e786 SanitizedSearchTerm: allow + 2017-08-29 17:34:38 +02:00
kaso17
861a33f4af DataScene: fix free detection 2017-08-29 15:36:57 +02:00
kaso17
57c52d9eb2 2 Fast 4 You: fix whitespaces 2017-08-29 15:33:51 +02:00
kaso17
f574dedbe8 GigaTorrents: add search error detection 2017-08-29 15:33:19 +02:00
kaso17
a6d2ecffbb DataScene: fix definition 2017-08-29 15:33:00 +02:00
kaso17
300354ef13 update DataFolder description 2017-08-29 14:12:05 +02:00
kaso17
4a519226f5 2 Fast 4 You: remove Nouveau flag from titles 2017-08-29 11:56:41 +02:00
kaso17
6a4f6e3638 ReleaseInfo: ignore Origin during JSON serialization 2017-08-29 11:56:10 +02:00
kaso17
157b042c0a Merge branch 'master' of https://github.com/Jackett/Jackett.git 2017-08-29 10:53:39 +02:00
kaso17
9385218c9d Demonoid: ignore more ads 2017-08-29 10:53:32 +02:00
thebluepotato
7482e8d9c4 Make T411v2 public (#1740)
I'm 99% sure that since they've resurrected they're fully public (no login needed, no ratio, etc.) and since even Jackett isn't asking for login info, it should be reflected here.
2017-08-28 19:03:25 +02:00
kaso17
5501d282de Merge branch 'master' of https://github.com/Jackett/Jackett.git 2017-08-28 18:55:03 +02:00
kaso17
123bb4af5f add tracker and category to location.hash 2017-08-28 18:54:57 +02:00
halali
4d36dae634 Add CzTorrent tracker (#1739) 2017-08-28 17:32:16 +02:00
kaso17
eac11ab807 add SpeedTorrent Reloaded tracker 2017-08-28 15:49:44 +02:00
kaso17
b6892f1dc6 Dragon World (DTW): remove (dead) 2017-08-28 14:51:33 +02:00
thebluepotato
0695b8f84e Fix instructions for certificates on macOS (#1737)
* Fix instructions for certificates on macOS

* Remove an awful double space

* README cleanup

* Updated command
2017-08-28 14:37:47 +02:00
thebluepotato
04995f1a10 Fixes for 3 French trackers (#1736)
Non-critical fixes:
 - NextTorrent and Zetorrents: error in logs when no results were
returned from search
 - T411v2: improved selector to disregard VPN add in search results
2017-08-28 13:01:51 +02:00
kaso17
44d9b3ecc8 Norbits: fix download links 2017-08-28 12:51:04 +02:00
kaso17
a311509b7c Norbits: fix temp directory path generation 2017-08-28 12:50:42 +02:00
kaso17
0db4229bd4 Merge branch 'master' of https://github.com/Jackett/Jackett.git 2017-08-28 11:42:37 +02:00
kaso17
441aad5a18 Demonoid: ignore ad lines 2017-08-28 11:42:28 +02:00
thebluepotato
d8d911abf8 Add a script to install Jackett as service on macOS (#1705)
* Add instructions tu run Jackett as service on macOS

* Changed restart logic

* Replace plist with install script

* Update README and add some more checks

* Fix README

* Move and rename script

* Include script inside project

* README corrections and cleanup

* Slight improvement of the script

Put `launchctl remove` earlier so it has the time to quit the service before testing if it's still running.
2017-08-28 11:05:41 +02:00
kaso17
7423e3f5bc add workaround for mono relative redirect bug 2017-08-28 11:01:45 +02:00
kaso17
48fea35645 Merge branch 'master' of https://github.com/Jackett/Jackett 2017-08-24 12:29:57 +02:00
kaso17
cef72f11d0 manual search: improve error handling (#1717)
* manual search: improve error handling

* add index changes
2017-08-24 12:28:41 +02:00
kaso17
ad3039b70f Best Friends: remove (dead) 2017-08-24 12:05:18 +02:00
kaso17
73d590cebd include stacktrace in error 2017-08-24 12:02:38 +02:00
kaso17
1d0790471f Karagarga: fix download attempt 2017-08-24 10:48:11 +02:00
kaso17
3b3048aa01 Merge branch 'master' of https://github.com/Jackett/Jackett.git 2017-08-24 10:21:29 +02:00
kaso17
183fb56b0a Gazelle: improve isPersonalFreeleech handling 2017-08-24 10:21:20 +02:00
kaso17
466be31e6f Best Friends: remove (dead) 2017-08-24 10:13:41 +02:00
Khogniak
db42bc944b Fixed typo in regex 2017-08-23 11:39:34 +02:00
Khogniak
102e7338f9 Make regex case incesitive 2017-08-23 11:39:34 +02:00
Khogniak
01b30b0743 Added option to normalize release name 2017-08-23 11:39:34 +02:00
kaso17
947dbac485 SceneAccess: fix long titles 2017-08-23 11:37:54 +02:00
kaso17
0d29e85c80 Kapaki: fix error on no results 2017-08-22 19:26:56 +02:00
kaso17
89a28e2e95 myAmity: fix login detection 2017-08-22 19:17:47 +02:00
kaso17
66b2c20b42 ImmortalSeed: fix error on no results 2017-08-22 19:17:47 +02:00
kaso17
e6035bcaa5 Hardbay: fix error on no results 2017-08-22 19:17:47 +02:00
kaso17
68aac78360 EoT-Forum: update URL 2017-08-22 19:17:47 +02:00
kaso17
4b02141250 BTNext: fix error on no results 2017-08-22 19:17:47 +02:00
kaso17
8e1d321817 BroadcastTheNet: fix error on no results 2017-08-22 19:17:47 +02:00
kaso17
3354d37aa3 TorrentNetwork: fix typo 2017-08-22 17:46:58 +02:00
kaso17
7675214092 TorrentNetwork: fix indexer 2017-08-22 17:43:39 +02:00
kaso17
7af8e1916e Tasmanit: use wildcards for search 2017-08-22 13:34:21 +02:00
kaso17
6d4720e58f Hounddawgs: add support for alternative time format 2017-08-22 11:00:10 +02:00
kaso17
9928815777 fix cookie fallback login 2017-08-21 15:02:36 +02:00
kaso17
a7d65fedfb PotatoFeed: fix potatoenabled flag 2017-08-21 15:02:06 +02:00
kaso17
464b142130 Waffles: fix download 2017-08-21 14:07:44 +02:00
kaso17
e1bcdce019 Merge branch 'master' of https://github.com/Jackett/Jackett.git 2017-08-21 13:06:57 +02:00
kaso17
ced9bad4f8 BroadcastTheNet: various improvements 2017-08-21 13:06:44 +02:00
thebluepotato
c6140d7eef fix(indexers): updated browse page endpoint (#1696)
They changed the url for the latest torrents once again…
2017-08-21 11:17:17 +02:00
thebluepotato
97f4a9de5d fix(indexers): updated t411v2 definition (#1694) 2017-08-20 17:00:21 +02:00
thebluepotato
be1f6a43a7 fix(indexers): kat clone (#1693)
kat.how -> thekat.se
fixes #1607
2017-08-20 16:56:55 +02:00
thebluepotato
c8d96990d5 feat(indexers): added gaytorrent.ru (#1689)
* Add GayTorrent.ru tracker

🏳️‍🌈

* Small name fix

* Update category

* Category cleanup

* Add it to the list
2017-08-20 15:28:29 +02:00
thebluepotato
e9db6edce8 feat(indexers): added gay-torrents.net (#1690)
* Adding tracker Gay-Torrents.net

* Various fixes incl. testing and free leech detection
2017-08-20 15:26:39 +02:00
JigSawFr
eee7f2999f feat(gui): more explicit errors with link to open issue (automatic generated title) 2017-08-20 14:54:34 +02:00
JigSawFr
01e5ad792e fix(indexers): better error messages for Xthor 2017-08-20 14:06:37 +02:00
JigSawFr
aa02644e05 fix(gui): null pointer exception verification 2017-08-20 14:05:57 +02:00
JigSawFr
26dd740a53 fix(gui): return error message instead of generic while problems occured when updating an indexer 2017-08-20 13:11:46 +02:00
garfield69
952b6d7f95 readme correction: Torlock is public (#1688) 2017-08-20 13:09:24 +02:00
kaso17
e8742554c2 The Pirate Bay: remove \u000f from title 2017-08-18 19:01:18 +02:00
kaso17
7229da2fbb QcTorrent: removed (dead) 2017-08-18 18:28:39 +02:00
kaso17
39db77eb7c The-Torrents: include dead is working again 2017-08-18 18:25:57 +02:00
kaso17
d866758a0d The-Torrents: fix definition 2017-08-18 18:23:52 +02:00
kaso17
4d72d08e26 TranceTraffic: update certificate 2017-08-18 18:06:25 +02:00
kaso17
2e169a8c3a GhostCity: add auto re login 2017-08-18 18:00:50 +02:00
kaso17
978ce0827f Le Paradis Du Net: removed (dead) 2017-08-18 17:59:40 +02:00
kaso17
fe94e4833d PolishTracker: add expired certificate/search error detector 2017-08-18 11:42:27 +02:00
kaso17
592f04389f Secret Cinema: update default URL 2017-08-18 11:28:03 +02:00
kaso17
5992e6d701 SceneFZ: fix null pointer exception 2017-08-18 11:11:55 +02:00
kaso17
d44ebb7d43 Diablo Torrent: fix definition 2017-08-18 10:56:11 +02:00
Guizzoni
852142e9ae feat(indexers): added torlock tracker (#1681)
* Create torlock.yml

* Update README.md

* Update torlock.yml

added date
2017-08-18 02:38:57 +02:00
JigSaw
3ba52f15dd fix(indexers): rewritted scenefz from scratch (#1684) 2017-08-18 02:29:45 +02:00
kaso17
502a4dc763 New Real World: update URL and add relogin 2017-08-17 18:53:38 +02:00
kaso17
d336a761a7 myAmity: fix relogin detection 2017-08-17 18:32:16 +02:00
kaso17
9240f9d72b Merge branch 'master' of https://github.com/Jackett/Jackett.git 2017-08-17 18:01:11 +02:00
kaso17
cab91ff346 Demonoid: fix download links 2017-08-17 18:01:04 +02:00
JigSaw
2a327549f5 docs(readme): added bountysource shield 2017-08-17 14:25:54 +02:00
kaso17
5748881a29 torznab caps: exclude indexer specific categories for meta indexers 2017-08-17 09:57:58 +02:00
kaso17
69aa38c1ff AggregateIndexer: set result limits to 1000 2017-08-17 09:50:10 +02:00
kaso17
aa157cfcb9 torznab caps: add support for limits 2017-08-17 09:48:54 +02:00
kaso17
f963f8d173 caps: add server element 2017-08-17 09:22:04 +02:00
thebluepotato
1d75164aaf KickAssTorrent: Remove login (#1674)
* Add KAT definition without login

* Remove old definition with login

Bye bye lovely work
2017-08-16 12:41:55 +02:00
Guizzoni
f503f0543e Manicomio Share: improve search results (#1670)
* Fixes episode search in Manicomio Share

The tracker uses the pattern "name - s??e??" instead of "name s??e??" so we have to manually add a "-" in the query

* Better fix

Updated to a better fix!

* Fixed the input name

* Added a workaround to solve the year issue

* Fixed the re_replace order
2017-08-16 12:38:04 +02:00
Guizzoni
333f7297fa fix(indexers): B2S-Share search (#1671)
This fixes the search for episodes and movies in general
2017-08-16 12:31:57 +02:00
Guizzoni
3fdfc4a142 fix(indexers): Manicomio Share login method (#1669)
Removed cookie and added POST method.
2017-08-14 16:43:30 +02:00
JigSawFr
0ac58224f9 style(indexers): cleanup BTN tracker indexer 2017-08-14 16:23:40 +02:00
JigSaw
3d08fcb4b9 docs(readme): added discord chat server (#1668) 2017-08-14 12:02:22 +02:00
chibidev
c2f11306b1 Fixing SupportsCategories (or at least making it better)
I cannot wrap my head around why it has started to fail now as it was
faulty from the beginning... Anyway, SupportsCategories didn't really
take sub categories into account, which is bad.

- Potentially fixes #1654 and #1656
2017-08-14 10:38:51 +02:00
JigSaw
07a0c2c828 fix(indexers): fixed wihd, added ssl support and misc things (#1666)
* docs(config): add warning on wihd config to use classic view only

* refactor(wihd): refactor indexer, optimized dev mode, added freeleech and SSL

* fix(indexers): removed T411 orginal tracker

closed tracker by gov

* refactor(clean): removed old orphan config files

* docs(readme): updated for wihd
2017-08-14 02:10:50 +02:00
JigSaw
28eaa637df fix(indexers): Abn Indexer, Added 4K to Xthor (#1665)
* feat(xthor): added 4K category

* fix(abn): optimized abnormal indexer, fixed scraping for pending and dev mode
2017-08-14 00:15:11 +02:00
JigSaw
8707e6b2e9 fix(indexers): fixed and optimized xthor indexer
* feat(utils): added sha1 hash function and refactored md5 hash function

* fix(indexers): now use cross plateform path building for dev mode

* fix(indexers): fix output log of xthor for dev mode

* feat(release): added ToString method

* refactor(dev): optimized dev mode

* style(clean): cleanup code

* feat(indexer): added tmdb info to releases

* fix(cat): enabled categories on xthor
2017-08-13 20:49:03 +02:00
chibidev
7a8d83b693 Allow anonymous access to results - probably fixes #1654 2017-08-13 02:23:39 +02:00
chibidev
403c0ef7e4 Correct API path in JS client 2017-08-12 20:12:30 +02:00
chibidev
3374c14311 Fix download handling in AggregateIndexer 2017-08-12 11:12:02 +02:00
chibidev
9eade51d89 Increase Sonarr compatbility 2017-08-12 10:46:12 +02:00
David Torosyan
bc9e4a30cb Fix thepiratebay.xml for General Hospital (#1647)
* Fix thepiratebay.xml for General Hospital

* Add comment
2017-08-12 16:19:41 +10:00
flightlevel
0103c48c97 Fix settings update from UI (#1655)
https://github.com/Jackett/Jackett/issues/1654
2017-08-12 11:12:56 +10:00
chibidev
29ecf8a584 "Fix" ShowRSS category handling 2017-08-12 01:59:50 +02:00
chibidev
eec07bc5b8 Fix manual search - append apikey 2017-08-12 01:04:30 +02:00
chibidev
bf23878477 Manual search URL fix - hash will reset now 2017-08-12 01:04:07 +02:00
chibidev
043085e8f3 Fix torznab capability API 2017-08-12 00:30:43 +02:00
chibidev
39e612d60c Move debug data to appropriate log level 2017-08-11 23:55:55 +02:00
chibidev
6f8b1b749d Fix default torznab query 2017-08-11 23:55:40 +02:00
kaso17
439e9296f9 dummy commit 2017-08-11 19:10:48 +02:00
kaso17
1332b49370 UI: fix searchCategory dropdown 2017-08-11 18:55:47 +02:00
kaso17
33a7db5ec4 NextTorrent: update default URLs 2017-08-11 18:46:32 +02:00
kaso17
2075e914eb fix /api route names 2017-08-11 18:34:54 +02:00
kaso17
758ad91a55 add /api legacy routes 2017-08-11 18:27:45 +02:00
kaso17
e9b604d3c4 fix potato API 2017-08-11 18:13:22 +02:00
kaso17
51aa4f35bd AnimeBytes: stop emulating browser 2017-08-11 16:53:49 +02:00
kaso17
fc55882f16 IndexerManagerService: create own IWebClient instance for each indexer 2017-08-11 16:53:27 +02:00
kaso17
d03cbefa57 IWebClient: add EmulateBrowser flag 2017-08-11 16:52:58 +02:00
kaso17
e079c90535 Torrent Downloads: don't ask for user/password and fix empty search 2017-08-11 16:05:19 +02:00
kaso17
8591add0bf FileList: use full title if available 2017-08-11 15:57:55 +02:00
kaso17
fbbe4f9c45 FileList: don't use FL token DL link 2017-08-11 15:48:34 +02:00
kaso17
289c5cd24f encrypt original path in download links and move apikey to parameters 2017-08-11 15:14:40 +02:00
flightlevel
84a45737d3 Revert "Fixes #1606 " (#1649)
* Revert "Pretome: Attempted parsing fix (#1648)"

This reverts commit d083cf774a.

* Revert "t411 v2 (#1620)"

This reverts commit f2ce167bbf.

* Revert "Fixes #1606  (#1625)"

This reverts commit 4e04bbbcf4.
2017-08-11 22:29:15 +10:00
flightlevel
d083cf774a Pretome: Attempted parsing fix (#1648)
* Pretome: Attempted parsing fix
2017-08-11 21:54:44 +10:00
Francis Noel
f2ce167bbf t411 v2 (#1620)
* New nextorrent URL

Change url to : http://www.nextorrent.cx
Fix search url

* new cpasbien url

Change to : http://cpabien.cc

* Add zetorrents tracker

* t411 v2 + remove maniatorrent

* Update Jackett.Updater (remove maniatorrent)

* fix the formatting

Change TAB with SPACE
2017-08-11 21:45:49 +10:00
Benoît Sauvère
4e04bbbcf4 Fixes #1606 (#1625)
* Fixed the TorrentPotato requests with the indexers that does not support imdbid requests

* Fixed the "CanHandleQuery" which was not working if we make the request only with an imdbid (and a valid OMDB key)

* Fixed the "CanHandleQuery" which was not working if we make the request only with an imdbid (and a valid OMDB key)

* Removed PotatoController.cs
2017-08-11 21:41:50 +10:00
garfield69
7f5d00e89f torrents-search.php -> search-torrents.php (#1642)
KAT seem to have changed the name of the search php
2017-08-10 22:03:41 +10:00
flightlevel
f777114644 Pretome: Attempted parsing fix (#1644) 2017-08-10 22:01:41 +10:00
flightlevel
7c63a6b8f2 ArcheTorrent: Update categories (#1643)
Fixes https://github.com/Jackett/Jackett/issues/1614
2017-08-10 21:51:59 +10:00
aurelien
f0140999bf 2 Fixes (#1637)
* lower case for search term

* fix thanksyou call before download torrent file
2017-08-10 08:23:19 +02:00
Khogniak
6f0a249503 YGG config update (#1635)
* YGG config update

* Followed gprime44 on seeder/leecher selector #1634
2017-08-10 08:21:12 +02:00
mueslo
2e79500f50 Improve season query logic for bB (#1632)
* Tweak BB indexer

Remove explicit tracker URL
Add tracker-specific season query

* Query for "S##" and "Season #" simultaneously on bB

* Fix tabs/spaces

* Rewrite title from "Season #" to "S##"

* Fix bug

Fix bug where searching for whole shows would rewrite Season # to S00, since no season was specified.

* Add new categories mappings

So that e.g. headphones can correctly query bB for music
2017-08-10 08:19:27 +02:00
chibidev
720b5971d3 Feature/new api (#1584)
* Introducing API v2

There were multiple inconsistencies in the old API and I have been
toying with the idea to replace it. This will suck for everyone who was
building on top of the Jackett API, however as it was probably too
painful to do so I'd say no one really tried.

Now API v2.0 should be much more constistent as it uses DTObjects, and
instead of manually constructing a json response it is handled by the
ASP.NET web api. It is much more RESTful than it was, proper GET
endpoints are introduced, and updating resources are now done via POST -
it might be improved by introducing other type of REST methods.

I know this sucks as completely breaks backward compatibility, however
it'll probably make it easier to maintain and build on top of in the
long run.

* Use DELETE method to unconfigure an indexer

* Remove debugging format from NLog

* Fixing an null exception

* Properly implementing IExceptionFilter interface

* Enable adding public indexers without configuration

* Fix missing manual search results

* Basic modularization of the JS API

* Introduce API versioning

* Fix redirects to the dashboard

* Cleaning up a little bit

* Revamping Torznab and Potato as well

* Move preconditions to FilterAttributes and simplify logic

* Remove legacy filtering... will move to IResultFilter

* Minor adjustment on results interface

* Use Interpolated strings in ResultsController

* DTO-ify

* Remove fallback logic from potato results

* DTO everywhere!!!

* DTO-ify everything!

* I hope this is my last piece of modification to this PR

* Remove test variables...

* Left out a couple conflicts... It's late
2017-08-08 17:02:16 +02:00
chibidev
dba63857e4 Improve results and fix download link on AnimeTosho 2017-08-08 09:27:21 +02:00
danmed
b05ee653d3 Update skytorrents.yml (#1626) 2017-08-08 01:19:04 +02:00
chibidev
84df60368c Improve response time of metaindexers 2017-08-07 22:33:23 +02:00
chibidev
76102ac171 Fix exception in BaseNewznabIndexer in some cases... Might not catch all of them. 2017-08-06 20:44:22 +02:00
Francis Noel
3c6e77a2ca Fix issue : #1615 (#1619)
* New nextorrent URL

Change url to : http://www.nextorrent.cx
Fix search url

* new cpasbien url

Change to : http://cpabien.cc

* Add zetorrents tracker
2017-08-06 10:41:53 +10:00
flightlevel
f6272032a6 MoreThanTv: Improve Number parsing (#1618)
Fixes #1616
2017-08-05 11:20:50 +10:00
Florentin Le Moal
41fb5e89b4 Fixed little typo (#1609) 2017-08-05 10:46:03 +10:00
Indrek Ardel
42c9967844 Use local time for dates in TorrentBytes (#1586)
TorrentBytes allows changing timezone in settings, which makes listed dates to be more likely local time than UTC.
2017-08-05 10:45:38 +10:00
chibidev
e740e2434d Fix selector on World of P2P 2017-07-29 14:02:04 +02:00
chibidev
057df28d1b Fixing a null exception when searching AnimeTosho
AnimeTosho failed to populate the Origin field of the results when
searching thereby creating an issue upon creating the proxy link. This
was mainly because an IEnumerable can contain a deferred LINQ query as
well (e.g. in the case of AnimeTosho a Select) that will re-execute
every single time. So when iterating over IEnumerables we cannot really
pose any assumption on what we are dealing with, so either explicitly
force an execution (e.g. via ToList), or use LINQ queries as well. Since
the second is probably more performant, let's stick with that.
2017-07-29 13:20:10 +02:00
Indrek Ardel
6fbc4b6904 Use only one request on Torrentbytes to search (#1587)
To get a larger number of results, users should increase the number on the website, similar to how it's implemented for TorrentLeech. Since TorrentBytes can be slow at times, making one large request will not be that much slower from one small request, but will nearly half the time taken compared to two smaller requests.
2017-07-27 23:49:20 +02:00
chibidev
cab608f0ec Adding the ability to launch a search from with a URL
You can now pass a parameter to the dashboard which will immediately pop
the search box and start searching for the results.
This should be what #1345 and #1577 wants, or at least a basic version
of it.
2017-07-23 02:08:19 +02:00
Ben Houshmand
f5592d04e2 Added yts.ag as an indexer. (#1579) 2017-07-23 01:12:12 +02:00
chibidev
5138496436 Display the master branch build status rather than any branch 2017-07-21 17:57:41 +02:00
chibidev
bcc1e5ff6c Fix OMDB key handling (#1581) 2017-07-21 17:56:29 +02:00
chibidev
7eb57d8e9a Minor fixes for Anime Tosho 2017-07-21 00:32:57 +02:00
chibidev
929c12ccc6 Implementing Anime Tosho - introducing feed based indexers 2017-07-20 23:55:42 +02:00
chibidev
1ba1b91b8e Very basic range check for port number 2017-07-19 22:25:01 +02:00
chibidev
d90a2613fc #1573 - Handle Potato IMDB queries without fallback 2017-07-19 19:31:07 +02:00
chibidev
0d25ed2921 #1575 - Fix invalid URL handling 2017-07-19 19:24:32 +02:00
thebluepotato
a07bffa773 Update KAT definition for real login test, error handling and indexer testing logic (#1569)
* Update KAT definition for real login test

* Add error handling to KAT definition's login

* Even better error handling...

Sorry for the inelegant successive commits

* Add better test behaviour for KAT

Added some logic so tests return results. Previously did a search with an empty string which would return no results. NB : it does test with "torrents.php?search=%22%22" but that's not an issue, the parameter is ignored on that page.
2017-07-19 19:11:29 +02:00
chibidev
f0da6ce247 #1535 - Using a real User-Agent with AnimeBytes 2017-07-16 13:24:14 +02:00
Guizzoni
32d0a8d703 Add "Torrent Downloads" tracker (#1563)
* Add "Torrent Downloads" tracker

Add "Torrent Downloads" tracker as requested on "Issue #1559"

* Update README.md

Added "Torrent Downloads" to the list.

* Update torrentdownloads.yml
2017-07-16 13:16:09 +02:00
kaso17
6e2087d5dc attempt to fix blackhole dirs with reverse proxies 2017-07-14 08:18:36 +02:00
Guizzoni
82f330f4af Add B2S-Share tracker (#1562)
* New definition for indexer "B2S-Share"

I made a new definition for this indexer.
B2S-Share is a general Brazilian tracker.

This tracker does not support multiple category search, so i left it searching in all categories.

* Update README.md

Added B2S-Share to the private tracker list.
2017-07-14 07:43:47 +02:00
Khogniak
14f86107e1 YGG Fix: Removed stage settings. Added https. Added login headers (just in case). (#1561) 2017-07-14 07:42:40 +02:00
Guizzoni
845faf9066 Add Manicomio Share tracker (#1558)
* New definition for indexer "Manicomio Share"

I made a new definition for this indexer.
Manicomio Share is a general Brazilian tracker.

A few known issues:
1 - The tracker does not show the "release date" unless i click on another button with a "onclick="expand(584941,event)"". So i left it without date.
2 - I wasn't able to configure the "login: post" method, since there's no dedicated login page. I used Cookies instead.

* Add Manicomio Share to Private Tracker list

Add Manicomio Share to Private Tracker list

* Updated manicomioshare.yml

Updated line 229 in manicomioshare.yml so it's more flexible in case the URL changes. (Thanks kaso17)

* Tracker doesn't support multiple categories search

Tracker doesn't support multiple categories search, removed the "range .Categories" line
2017-07-14 07:42:04 +02:00
chibidev
7c2b801ee9 Feature/remove autofac from indexer manager (#1549)
* Line endings...

* Remove Autofac and all its shenanigans from IndexerManager

I'm starting my warpath against Autofac. For the next couple PRs I want
to focus on refactoring things rather than creating new things. This
includes introducing LINQ extensions wherever possible as well as
removing Autofac/Automapper dependencies in classes (or any other
dependency, there's a great chance that most of the classes that use
Jackett.Services wouldn't need so many of them). All this is order to
boost performance and eventually reach testability. Can't stop, won't
stop.

* Remove unnecessary extension

* Modify test project

* As per @kaso17, iterating through iterator types rather than allocating them manually

* Cleaning up a little

* Adjusting interface in tests
2017-07-14 07:39:52 +02:00
kaso17
f96dca5653 Merge branch 'master' of https://github.com/Jackett/Jackett 2017-07-13 07:20:09 +02:00
kaso17
0e4e9f4253 AnimeTorrents: use IWebClient 2017-07-13 07:19:04 +02:00
chibidev
dc38f8c041 Bugfix/fix nyoo indexer (#1547)
* Line endings...

* Adjusting selectors
2017-07-12 06:34:14 +02:00
chibidev
17f544be36 Bugfix/1532 1539 fix manual search circular reference (#1543)
* Line endings...

* Encoding Encoding in a reasonable way

Sadly Encoding contains a self-reference somewhere, which makes it
really hard for the json serializer to automatically encode it...
Probably there's no value in sending it over especially since no one is
using it, however just for the sake of the argument, let's just
serialize it in a reasonable way. Maybe someday there will be someone
expecting this. Or we clearly separate DTOs and models...

- Fixes Jackett/Jackett#1532
- Fixes Jackett/Jackett#1539

* Seriously... Please port this to dotnet Core so that I can use something other than @drunkvs on my MacBook

* Fix autofac registration after merge

* "Implement" new function of interface in test project
2017-07-11 22:32:56 +02:00
kaso17
fb59e84def Fix autofac exception 2017-07-11 22:17:56 +02:00
Francis Noel
de8e33e647 Add mania-Torrent tracker (#1534)
* Add mania-Torrent tracker* Update README
2017-07-11 22:00:29 +02:00
kaso17
cf1bbc603e Update BJShare.cs 2017-07-11 21:58:15 +02:00
Guizzoni
ecc60e59d8 Update BJShare.cs 2017-07-11 21:58:15 +02:00
Guizzoni
e7be6faf2f Update BJShare.cs
Updated so it properly replaces "HD" to "720p" since this is the tracker's default naming pattern for every 720p release.
2017-07-11 21:58:15 +02:00
chibidev
9e3076dde6 I have a feeling I'm breaking the world and bringing the apocalypse
It's quite hard to encapsulate something this large. This refactor
contains multiple attacks on the current architecture and is changing
things that were probably created quite a while back then. Luckily this
was done in increments so it mustn't be that impossible to recall what
has been done. I just need to relax my memory a little bit.

So the basic idea was quite simple. Let's distingush metas and normal
indexers a little bit more. Both of them were originating from
BaseIndexer, however very little of the functionality was actually
shared between them. Actually quite a few things made it even harder to
implement a different kind of indexer, especially for a newcomer for
both Jackett and C#.

Then in order to further reduce whatever was encapsulated in
any kind of, a couple things had to be changed. Like CardigannIndexer,
which probably had quite a mindshift change. IndexerManager and the
configuration management were also encapsulated and refactored, and now
I have a feeling that although the code could be improved, at least the
responsibilities of services and what they actually do is now clearer.

Anyhow, it would be safe to assume that I will not be able to go
step-by-step and define everything that has been changed. I'm sorry.
2017-07-11 21:53:46 +02:00
Khogniak
35103206cf Replace T411 (closed) with YggTorrent (new replacement) (#1536)
* Replaced old T411 with new YggTorrent

* Updated Readme

* Fix testing. Added dynamic path
2017-07-09 18:24:00 +02:00
kaso17
29cf00560f Merge branch 'master' of https://github.com/Jackett/Jackett.git 2017-07-08 15:23:40 +02:00
kaso17
9ef9302808 MoreThanTV: fix complete season searching 2017-07-08 15:23:36 +02:00
gprime44
616b436648 Add NextTorrent tracket (#1523)
* Create nexttorrent.yml

init

* Finish definition for next torrent

* Add nexttorrent tracker

* Update README.md
2017-07-08 14:01:21 +02:00
Francis Noel
702e975d57 Add cpasbien tracker (#1527)
* Add cpasbien tracker

* revert project inclusion

* Update README.md
2017-07-08 13:59:34 +02:00
kaso17
6c90016c0c RevolutionTT: ignore donation item 2017-07-08 13:54:37 +02:00
kaso17
90152a7eed The New Retro: fix login 2017-07-06 21:17:50 +02:00
kaso17
dabd95655b Torrent-Syndikat: add auto relogin 2017-07-06 21:16:53 +02:00
kaso17
4f938e3ea8 Add Zamunda.net/Zelka.org 2017-07-06 20:37:29 +02:00
kaso17
f21a721ddb FileList: add auto relogin 2017-07-06 20:31:07 +02:00
kaso17
7d65e60750 Add Zelka.org tracker
Thank you @eybox
2017-07-06 20:21:06 +02:00
kaso17
c87f1b3949 Add Zamunda.net tracker
Thank you @eybox
2017-07-06 20:20:39 +02:00
Luis Almanzar
08b471fd1e Fix title for elements with comments. (#1520)
* Fix title for elements with comments.

* Update nyaasi.yml
2017-07-06 19:38:38 +02:00
chibidev
4a0d2dcc57 Feature/metaindexer torrent download improvement (#1517)
* Line endings...

* Improve download handling of torrents in metas

Until now, downloads were handled by metas, however they had to "guess"
which indexer the result was originating from and resolve to that
indexer. While this has been working without an issue, it really
shouldn't be considered stable.

Therefore indexers now link themselves to the results they provide. In
order to keep my sanity and automate this as much as possible, I had to
slightly modify the interface (sorry, everyone).
2017-07-03 07:15:47 +02:00
chibidev
91eae526f9 Bugfix/1404 fix potato search (#1516)
* Line endings...

* Integrating OMDB into Potato results

Now PotatoController will actually produce results

* VS complains it could be simplified, yet AppVeyor cannot do anything with it...

* How come only Appveyor unveils this error? @drunkvs
2017-07-01 18:23:57 +02:00
chibidev
11fd2db5a5 Bugfix/cannot add cardigann indexers (#1511)
* Line endings...

* Fix invalid ID for cardigann indexers (refactoring regression - my bad)
2017-06-29 20:46:36 +02:00
chibidev
75e7ce81c2 Feature/omdb api integration (#1509)
* Line endings...

* Refactoring how MetaIndexers handle fallbacks

Originally this modification was part of a much larger refactoring,
however for the sake of reviewability I split it into smaller chunks.
Sadly it is still quite large.
I wanted to split it even more, however after a certain point there was
really no value in creating smaller chunks. The biggest part of this
modification would be still huge.

So all in all, there're 3 aspects of this modification
- It modifies BaseIndexer so that it now implements IIndexer (will be
very useful later on)
- Resolving most of the warnings currently in Jackett (the only ones
remaining are related to Autofac, however if I could I would just burn
Autofac altogether rather than fix the warnings. Will open discussion on
this.)
- Biggest part: refactoring how MetaIndexers handle fallbacks and how
they provide the final result set

MetaIndexers now accept any kind of fallback and filtering mechanism
that implements the necessary interface, so that in the future IMDB
fallback and filtering won't be the only one. I know there are not a lot
of unit tests around Jackett at the moment, however this renders the
class much more unittestable as well.

* Integrate OMDB API for the fallback option

* Safeguarding when no API key is specified

* Autofac started complaining... I don't understand...

* How did that not make the previous commit?
2017-06-29 07:53:25 +02:00
chibidev
345602926e Feature/cleaning up aggregate indexer fallback (#1507)
* Line endings...

* Refactoring how MetaIndexers handle fallbacks

Originally this modification was part of a much larger refactoring,
however for the sake of reviewability I split it into smaller chunks.
Sadly it is still quite large.
I wanted to split it even more, however after a certain point there was
really no value in creating smaller chunks. The biggest part of this
modification would be still huge.

So all in all, there're 3 aspects of this modification
- It modifies BaseIndexer so that it now implements IIndexer (will be
very useful later on)
- Resolving most of the warnings currently in Jackett (the only ones
remaining are related to Autofac, however if I could I would just burn
Autofac altogether rather than fix the warnings. Will open discussion on
this.)
- Biggest part: refactoring how MetaIndexers handle fallbacks and how
they provide the final result set

MetaIndexers now accept any kind of fallback and filtering mechanism
that implements the necessary interface, so that in the future IMDB
fallback and filtering won't be the only one. I know there are not a lot
of unit tests around Jackett at the moment, however this renders the
class much more unittestable as well.

* Autofac started complaining... I don't understand...
2017-06-28 07:31:38 +02:00
Rob Nadin
780ea4c631 KickAssTorrent: Fix date parsing (#1502) 2017-06-26 20:08:11 +02:00
chibidev
cf9d87a7d8 Bugfix/1471 aggregate exception when fallback (#1504)
* Line endings...

* Fixes an issue when the aggregate doesn't require fallback

Apparently operating on null with LINQ is not safe :)
- This fixes Jackett/Jackett#1471
2017-06-26 19:46:14 +02:00
kaso17
3f2d6f0cee Add support for non numeric episodes 2017-06-25 18:25:16 +02:00
kaso17
22cf450d07 TorrentDay: fix login 2017-06-25 18:15:12 +02:00
kaso17
8bd7233756 Rarbg: add support for unknown IMDB IDs 2017-06-25 17:37:33 +02:00
kaso17
2807a71e0e DataScene: update to new layout 2017-06-25 17:07:53 +02:00
kaso17
b60bcda109 Rockhard Lossless: update to new layout 2017-06-25 16:56:31 +02:00
kaso17
4d36165cdf Xtreme Zone: update to new layout 2017-06-25 16:42:17 +02:00
hed0nist
44de6e5459 fix incorrect naming rules (#1500)
put the date in the right place
2017-06-25 16:28:31 +02:00
D4rk56
d31c593d4b Domain change .top -> .cc (#1495) 2017-06-23 19:56:21 +02:00
David Dobmeier
0473029277 Resolved null pointer causing searches to fail on RevolutionTT (#1494) 2017-06-23 19:56:03 +02:00
adamwinn
3bef19cbfe Add Blutopia (#1489) 2017-06-23 19:54:09 +02:00
CW2aNmYM0ryJ
79fc4850ed NCore: Add 2factor support (#1465) 2017-06-13 14:00:41 +02:00
D4rk56
7cf24e906a Torrent9: Domain change .biz -> .top (#1462) 2017-06-08 20:49:02 +02:00
kaso17
9870d38cbb Il Corsaro Nero: workaround incomplete CA chain 2017-06-08 11:07:09 +02:00
kaso17
994604271b Merge branch 'master' of https://github.com/Jackett/Jackett.git 2017-06-08 10:34:59 +02:00
kaso17
81f2c7e91c Bit HDTV: adjust code to updated HTML 2017-06-08 10:34:53 +02:00
Mohammed Sohail
b0788e491e [Fix] Redirection errors (#1461)
- The Geeks uses SSL.
2017-06-08 10:32:21 +02:00
kaso17
0faed4e6b0 purge nachtwerk 2017-06-06 19:06:30 +02:00
kaso17
73a3a9aca9 TorrentProject: fix magnet filename encoding issues 2017-06-06 18:53:44 +02:00
kaso17
1dfe9db7da Cardigann: add validfilename and urlencode filters 2017-06-06 18:52:47 +02:00
kaso17
fa56b1d15f Anidex: rever category change 2017-06-06 18:37:47 +02:00
kaso17
b31c5d41ca Greek Team: update definition to handle new column 2017-06-06 18:30:16 +02:00
CodeMonkey
df22e39b4e Anirena: Provide both torrent and magnet download links (#1451)
* Anirena: Add setting for torrent vs magnet

* Switch to just showing both download options

- And remove the explicit setting.
2017-06-06 18:11:11 +02:00
kaso17
08d1e2cc07 remove nachtwerk 2017-06-05 14:22:35 +02:00
kaso17
569558aea5 Kapaki: add search error detection 2017-06-05 14:21:30 +02:00
kaso17
2ceb41324d fix mono 5 detection 2017-06-03 22:09:44 +02:00
kaso17
d95e55137a anidex: add support for custom categories 2017-06-03 21:55:45 +02:00
kaso17
57b7173237 BitHdtv: add recaptcha support 2017-06-03 16:46:27 +02:00
kaso17
ce8570c656 Xtreme Zone: update to new layout 2017-06-03 16:35:37 +02:00
kaso17
d8e6f0ec57 Rarbg: increase requestDelay 2017-06-03 16:14:19 +02:00
kaso17
b4948c924d rarbg: strip ' from search 2017-06-03 16:13:05 +02:00
kaso17
7c36d3a892 Rarbg: strip ' from search 2017-06-03 16:12:38 +02:00
kaso17
9aedd68f1c TorrentProject: fix magnet link 2017-06-03 15:31:09 +02:00
Mike
0afd9c638a Fixed nyaa-pantsu again.. Smaal nyaasi naming changes. (#1427) 2017-06-03 15:08:01 +02:00
chibidev
3b4eceed87 Feature/improved aggregate results (#1432)
* Line endings...

* Add fallback query for meta indexers

In cases where multiple indexers are configured under one
metaindexer if any of them supports IMDB search the meta
will support IMDB search as well. However the actual query will
then only be performed by those supporting IMDB search, because
others refuse it (see CanHandleQuery implementation).
- This adds support of a fallback mechanism for other indexers
- Adds first implementation of result improvement (necessary for
  fallback queries as they might produce irrelevant results)
- Some minor fixes encountered while debugging/coding

Known issue:
- Configuring nCore and IsoHunt together will render results
  from nCore unusuable. Don't know why.
2017-06-03 15:04:51 +02:00
garfield69
7c7c27847f add magnet to nyaa.si definition (#1440) 2017-06-03 14:54:57 +02:00
Mike
95398b4f06 Add advanced search to Anidex indexer (#1418)
* Added language id support to Anidex.

* Added category id support to Anidex.
2017-05-28 18:13:38 +02:00
Mike
6857d0ad24 Add advanced search to TokyoTosho indexer. (#1420)
* Add advanced search to TokyoTosho indexer.

* Fix issue where it wouldn't filter on index.php.
2017-05-28 18:13:26 +02:00
Mike
2cfef12289 Fixed nyaa-pantsu indexer and added category filter. (#1421) 2017-05-28 18:13:14 +02:00
Mike
a3c443e69b Added a "select" input type and "default" value for settings. (#1423)
* Added a selectbox and updated nyaasi to include two.

* Added a "default" field for settings.
2017-05-28 18:12:41 +02:00
NinjaBanjo
31ce2ca545 Fix #1383 nyaa-pantsu date selector incorrect (#1412)
Looking at the html of nyaa-pantsu search page, the date field is using a class of .date-short not .date.

this corrects the above.
2017-05-25 11:28:25 +02:00
CodeMonkey
12d8340114 First pass at an AniRena definition. (#1406)
* Doesn't parse categories or dates.
* There may be a better approach as their RSS feed supports searching.
    *Ex: https://www.anirena.com/rss.php?s=naruto
2017-05-22 08:48:26 +02:00
Ellmout
a4d5c98e12 Better search for Arche Torrent (#1405)
* Add ArcheTorrent

* ArcheTorrent: Enhanced Search
2017-05-22 11:47:04 +10:00
CodeMonkey
12b60b5a9e HorribleSubs: Fix date parsing for RSS feed. (#1403) 2017-05-22 11:44:13 +10:00
kaso17
213f8114ba add HD-Forever indexer 2017-05-20 17:08:10 +02:00
kaso17
c8a2482fc1 Remove Freshon (closed for good) 2017-05-20 16:52:03 +02:00
TheDogg
8478fb7580 GimmePeeers: fix parsing
fixes #1019
2017-05-20 16:17:55 +02:00
kaso17
cc10d9f233 Add BrokenStones indexer 2017-05-19 17:56:16 +02:00
kaso17
805f0f4e0d update formating 2017-05-19 17:33:04 +02:00
kaso17
c5eb78602a update SSL troubleshooting 2017-05-19 17:32:17 +02:00
CodeMonkey
d7b5ab8595 Parse date, seeder, leecher, & grab values. (#1388)
* Fix size field to handle "Unknown" as a value.
2017-05-17 09:25:52 +02:00
CodeMonkey
562cfd57a6 Fix date field so it correctly parses as UTC time (#1389) 2017-05-17 09:24:39 +02:00
CodeMonkey
3d84d12c96 Fix date field so it correctly parses as UTC time. (#1390) 2017-05-17 09:24:21 +02:00
kaso17
2a71dafb0e KickAssTorrent: change to semi private 2017-05-16 07:57:27 +02:00
kaso17
02e2bcdbc2 Merge branch 'master' of https://github.com/Jackett/Jackett.git 2017-05-16 07:34:59 +02:00
kaso17
19b496b5c8 Superbits: fix category handling 2017-05-16 07:34:34 +02:00
gustinn
5c03cab5a2 add tracker Deildu (#1378) 2017-05-16 07:20:38 +02:00
thebluepotato
183f9f5649 Add KAT passkey login (#1380) 2017-05-16 07:19:58 +02:00
kaso17
a46b75bef7 remove redacted-scrape 2017-05-15 07:23:01 +02:00
CodeMonkey
f6e0d7d239 Use file glob for yml file inclusion (#1372)
* Should help avoid new items being added but accidentally not included
in the release.
2017-05-15 07:16:25 +02:00
CodeMonkey
6d893a1ac3 Add type and encoding values for HorribleSubs (#1373) 2017-05-15 07:15:58 +02:00
Nodja
175509abc8 [Horriblesubs] prepend horriblesubs tag to title for better filtering in sonarr (#1362)
* [horriblesubs] prepend horriblesubs tag to title for better filtering in sonarr

* make [horriblesubs] prepend an option
2017-05-14 19:48:07 +02:00
kaso17
8900ece8ab Merge branch 'master' of https://github.com/Jackett/Jackett.git 2017-05-14 19:43:16 +02:00
kaso17
37dc039de4 AnimeTorrents: Change to HTTPS and fix login 2017-05-14 19:43:10 +02:00
CodeMonkey
15b6afb11e HorribleSubs Fixes (#1364)
* Fix date parsing

* Use http link instead of https

* Site doesn't load properly over https because not all page resources
are serviced via https links.
2017-05-14 19:25:08 +02:00
kaso17
753913ccc7 Nyaa.si cleanup 2017-05-14 19:00:15 +02:00
chibidev
27d4f2108e Feature/aggregate performance improvement (#1349)
* Checking capabilities before executing a query

* Introduce base class for meta indexers

* Build fix - I seriously do not know how I missed that

* Moving things to the appropriate place

* Simplifying things as much as possible and moving once again

* Build fix?
2017-05-14 18:55:36 +02:00
gregorij89
2fb045e94a Add Trezzor (#1354)
* Add Trezzor

* Add Trezzor

* Fixing AooVeyor.yml - removing the file from commit, there is no
valuable changes.
2017-05-14 18:53:49 +02:00
Splosion
7756e8da41 mark nyoo.yml as content and copy to output directory on build (#1361) 2017-05-14 18:53:15 +02:00
chibidev
823e06b84e Adds additional parsing so that it sets the key parameter as well (#1363)
- Fixes Jackett/Jackett#1357
- Fixes Jackett/Jackett#1360
2017-05-14 18:48:55 +02:00
CodeMonkey
f12571d767 Add Nyaa.si (#1365)
* HorribleSubs is using Nyaa.si as their official tracker now
* http://horriblesubs.info/#comment-3267534087
2017-05-14 18:47:25 +02:00
Chaomander
bf1e3a1a53 Fix tokyotosho failing test and add type (#1350)
* Fix tokyotosho failing test and add type

* Revert unnecessary change to language

* Add encoding

* Use UTC for date parse
2017-05-11 21:30:48 +02:00
adamwinn
6276789738 Add AHD (#1352) 2017-05-11 21:29:12 +02:00
adamwinn
4b66273c19 Update bB url (#1355) 2017-05-11 21:22:33 +02:00
eV (㋎)
0fad901ecb Switch anidex to use to torrent link vs magnet link (#1356)
@kaso17 FYI I found out today that anidex does not always have a magnet link corresponding to returned search results. As a result it is more reliable to use the torrent link instead of the magnet link that my definition currently uses. To do this one just needs to change the download selector from `td:nth-child(6) > a` to `td:nth-child(5) > a`.
2017-05-11 21:22:01 +02:00
kaso17
3426e66b3b Horrible Subs: add dummy size 2017-05-11 21:19:02 +02:00
kaso17
b85721e584 add Horrible Subs 2017-05-09 20:25:27 +02:00
kaso17
16c2e5521a horriblesubs: fix porject file 2017-05-09 20:24:09 +02:00
kaso17
42d8c30147 Xthor: disable category support 2017-05-09 20:19:05 +02:00
James Lee
338a4cbf6e Update README with more detailed OS X instructions (#1344)
* Update README with more details OS X instructions

- Adds detailed instructions on syncing ca certs and avoiding SIP issues
outlned in https://github.com/Jackett/Jackett/issues/1179

* Move ubuntu instructions to linux section
2017-05-08 22:34:03 +10:00
Quatroking
813c449065 Adding Nyoo (#1343)
* Removed Nyaa.se due to its closure, added Nyaa mirro Nyaa-Pantsu to replace it

* VS15 project file so that the filelist is correct

* Adding Nyoo support

* Adding Nyoo support
2017-05-08 22:33:29 +10:00
adamwinn
03549b97aa Add SportHD (#1342)
* add

* Add 3D Torrents

* Accidently commited an old version of the 3dtorrents yaml file

* Allow searching by categories for TPB

* add

* add

* Fix error when pressing the Test button for TPB.  This will remove searching by category for the time being.

* Change HDPter to Ourbits

* iloveclassics - the date is not within td:nth-child(2) div, but rather just td:nth-child(2), so remove the div
bigtorrent - grabs and files data are not displayed in the grid.  Seeders and leechers data was off by a column

* Add ThePlace / TheVault / TheShow / TheOccult / TheGeeks (#1302)

* Change SceneFZ domain (#1306)

* Add tracker SportHD
2017-05-08 22:33:03 +10:00
flightlevel
7ee03a9e03 Update README.md 2017-05-08 22:31:20 +10:00
flightlevel
8c6ae89204 Add build status 2017-05-08 22:30:21 +10:00
flightlevel
d5c902eb82 Backup AppVeyor.yml
Backup AppVeyor.yml but still use the settings from the AppVeyor UI
2017-05-08 22:26:56 +10:00
kaso17
8a037295d0 PassThePopcorn: fix peers calculation 2017-05-07 17:43:23 +02:00
kaso17
c4caa62f8b Add Horrible Subs
Thank you @evq
2017-05-07 14:06:14 +02:00
kaso17
d3ea4135b9 Cardigann: extend DateHeaders search to parents 2017-05-07 14:05:39 +02:00
kaso17
d0d62eeae9 Add Anidex tracker
Thank you @evq
2017-05-07 13:27:30 +02:00
kaso17
aa6e7b148b Cardigann: Add support for search/headers 2017-05-07 13:18:22 +02:00
chibidev
251a631523 Bugfix/aggregate indexer radarr compatibility (#1333)
* Improving Torznab compatibility in AggregateIndexer

The indexer was not correctly reporting the Torznab capabilities
it provided. Basically it only reported a default number of
caps instead of combining all the caps of all the configured
indexers. This lead to an issue with external components
(e.g. Radarr) which rendered the Aggregate feed unusable in
certain situations.
- Correctly reports capabilities based on configured indexers

* Fixes incorrect internal state of configured indexers

When adding/deleting configured indexers the aggregate
was never updated leaving out possible search results.
- Introduce reconfiguring of the Aggregate upon addition/deletion
 of an indexer
- Fixing an internal state issue of the indexers reporting
 themselves as unconfigured after addition

* Removing obsolete call (thanks @kaso17)
2017-05-07 09:10:57 +02:00
kaso17
4dd49985c3 KickAssTorrent: category update 2017-05-06 19:56:12 +02:00
kaso17
c24368f8f9 Merge branch 'master' of https://github.com/Jackett/Jackett.git 2017-05-06 19:39:07 +02:00
kaso17
6b35da8ad0 SaveConfig() after IsConfigured 2017-05-06 19:39:02 +02:00
Nodja
026fa22a37 Fixed sonarr not finding episode numbers with animebytes (#1329)
* fixed sonarr not finding episode numbers

* animebytes: fixed sonarr compatibility setting description was incorrect
2017-05-06 15:45:24 +02:00
kaso17
9d6d5265e2 Arche Torrent details 2017-05-06 15:33:50 +02:00
kaso17
a86c30fdd4 nyaa cleanup 2017-05-06 15:30:00 +02:00
Quatroking
378b63a658 Nyaa replacement (#1338)
* Removed Nyaa.se due to its closure, added Nyaa mirro Nyaa-Pantsu to replace it

* VS15 project file so that the filelist is correct
2017-05-06 15:27:32 +02:00
Ellmout
e09092bbaf Add ArcheTorrent (#1334) 2017-05-06 15:26:10 +02:00
kaso17
ffdce26639 add Tokyo Toshokan meta data 2017-05-04 21:55:41 +02:00
kaso17
797eff5200 Nebulance: fix URL 2017-05-04 21:50:23 +02:00
chibidev
b942689dad Fixing a bunch of issues with the newly added AggregateIndexer (#1324)
This patch improves the general stability of the aggregate.
- Result is generated even if some trackers failed to answer
  or some other issue were encountered
- Fixes Jackett/Jackett#1316
2017-05-04 21:46:39 +02:00
Victor Bouvier-Deleau
9479eb20b7 Updated T411 domain references to the new domain used. (#1326) 2017-05-04 21:44:54 +02:00
adamwinn
79d87f4809 Add SportsCult (#1330)
* add

* Add 3D Torrents

* Accidently commited an old version of the 3dtorrents yaml file

* Allow searching by categories for TPB

* add

* add

* Fix error when pressing the Test button for TPB.  This will remove searching by category for the time being.

* Change HDPter to Ourbits

* iloveclassics - the date is not within td:nth-child(2) div, but rather just td:nth-child(2), so remove the div
bigtorrent - grabs and files data are not displayed in the grid.  Seeders and leechers data was off by a column

* Add ThePlace / TheVault / TheShow / TheOccult / TheGeeks (#1302)

* Change SceneFZ domain (#1306)

* Add tracker SportsCult
2017-05-04 22:01:28 +10:00
flightlevel
3a0d99acbe TransmitheNet to Nebulance name change 2017-05-04 22:00:54 +10:00
savahu
6b3f42a667 BTN was mentioned twice in supported trackers (#1331) 2017-05-04 21:58:36 +10:00
chibidev
a2d9954a1d Fixing ShowRSS all feed path and node selection (#1328) 2017-05-04 21:57:09 +10:00
eV (㋎)
f5fa7b5217 Add tracker definition for Tokyo Toshokan (#1323) 2017-05-04 21:54:48 +10:00
adamwinn
bab4620c04 Change TTN to Nebulance (#1320)
* add

* Add 3D Torrents

* Accidently commited an old version of the 3dtorrents yaml file

* Allow searching by categories for TPB

* add

* add

* Fix error when pressing the Test button for TPB.  This will remove searching by category for the time being.

* Change HDPter to Ourbits

* iloveclassics - the date is not within td:nth-child(2) div, but rather just td:nth-child(2), so remove the div
bigtorrent - grabs and files data are not displayed in the grid.  Seeders and leechers data was off by a column

* Add ThePlace / TheVault / TheShow / TheOccult / TheGeeks (#1302)

* Change SceneFZ domain (#1306)

* Change TransmitheNet to Nebulance
2017-05-04 21:54:12 +10:00
chibidev
c0b665062e Adding an aggregate torznab feed for all configured trackers (#1312)
* Adding an aggregate torznab feed for all configured trackers

This adds just a basic first implementation of a special
torznab feed that will make all configured trackers available
with all the supported query params.
- This should close #1247 
- This also contributes to #921 

* Adding missing file

* Add missing implementation from Test project
2017-04-30 10:06:29 +02:00
kaso17
117022151b Merge branch 'master' of https://github.com/Jackett/Jackett 2017-04-30 09:46:47 +02:00
kaso17
a96b7cfca9 MoreThanTV: improve search of multiple episodes of a season 2017-04-30 09:38:10 +02:00
adamwinn
d8b83c6b07 Change SceneFZ domain (#1306) 2017-04-26 19:37:46 +02:00
adamwinn
0594e1c52d Add ThePlace / TheVault / TheShow / TheOccult / TheGeeks (#1302) 2017-04-24 06:28:00 +02:00
kaso17
a9c5477003 Norbits: fix login error handling 2017-04-21 20:34:03 +02:00
kaso17
a85e00f236 cardigann: fix relative url handling 2017-04-21 20:22:47 +02:00
kaso17
fb3ef03f77 Add files via upload 2017-04-20 20:57:30 +02:00
kaso17
77bc342ce9 XThor: update TV/Anime categories 2017-04-20 18:01:25 +02:00
kaso17
4785955941 Hon3y HD: fix search 2017-04-20 17:55:25 +02:00
kaso17
60b9a34cea Torrent9: remove username/password fields 2017-04-20 17:51:21 +02:00
kaso17
2e7f2056c4 DigitalHive: fix date parsing for completed torrents 2017-04-20 17:40:54 +02:00
kaso17
e1afea35b7 Xthor: fix and simplify category handling 2017-04-20 17:06:28 +02:00
kaso17
566817c7cd Nyaa: fix DL link and cleanup 2017-04-20 13:29:17 +02:00
kaso17
e8eb4319df Merge branch 'master' of https://github.com/Jackett/Jackett.git 2017-04-20 13:00:31 +02:00
kaso17
b002220cc3 ImmortalSeed: update login 2017-04-20 13:00:24 +02:00
Hugofm
458395d393 Update BJShare.cs (#1297)
Improvements
2017-04-20 18:22:45 +10:00
d2dyno
44aa396564 Fix IPT raw category (#1296)
Was marked as SD not HD
2017-04-20 18:21:14 +10:00
Brian Hartvigsen
049d035c96 BitHDTV - Stop trying to keep up with changing width (#1291) 2017-04-17 14:25:54 +10:00
flightlevel
14f530a32c MoreThanTv: Add Other category (#1292) 2017-04-17 14:22:00 +10:00
flightlevel
f2def1f615 Normalise Line endings (#1284)
* Add .gitattributes

* Normalise line endings
2017-04-15 18:45:10 +10:00
adamwinn
ed601a0f7d Parsing fixes for iloveclassics and bigtorrent (#1275)
* add

* Add 3D Torrents

* Accidently commited an old version of the 3dtorrents yaml file

* Allow searching by categories for TPB

* add

* add

* Fix error when pressing the Test button for TPB.  This will remove searching by category for the time being.

* Change HDPter to Ourbits

* iloveclassics - the date is not within td:nth-child(2) div, but rather just td:nth-child(2), so remove the div
bigtorrent - grabs and files data are not displayed in the grid.  Seeders and leechers data was off by a column
2017-04-14 11:14:29 +10:00
adamwinn
271a386722 Add tracker tasmanit (#1269)
* add

* Add 3D Torrents

* Accidently commited an old version of the 3dtorrents yaml file

* Allow searching by categories for TPB

* add

* add

* Fix error when pressing the Test button for TPB.  This will remove searching by category for the time being.

* Change HDPter to Ourbits

* Add tracker Tasmanit
2017-04-11 20:55:24 +10:00
flightlevel
21d7c0e94f Freshon: Fix parsing (#1273) 2017-04-11 20:54:23 +10:00
flightlevel
f9a2da83b2 Digitalhive (#1272)
* Attempt to fix DigitalHive Date Parsing

* Add reference
2017-04-11 20:51:14 +10:00
adamwinn
daf2ea202c Cinematik date parse fix (#1263)
* add

* Add 3D Torrents

* Accidently commited an old version of the 3dtorrents yaml file

* Allow searching by categories for TPB

* add

* add

* Fix error when pressing the Test button for TPB.  This will remove searching by category for the time being.

* Change HDPter to Ourbits

* Replace chinese date characters with English characters

* cinematik already has “ago” at the end of the dates.  Add in div.addedtor to select the actual element the date is in.
2017-04-10 22:58:26 +10:00
adamwinn
1a57028ca6 HDChina date parsing fix (#1261)
* add

* Add 3D Torrents

* Accidently commited an old version of the 3dtorrents yaml file

* Allow searching by categories for TPB

* add

* add

* Fix error when pressing the Test button for TPB.  This will remove searching by category for the time being.

* Change HDPter to Ourbits

* Replace chinese date characters with English characters
2017-04-10 22:51:46 +10:00
flightlevel
0a2176fff4 Open links in new tab (#1256) 2017-04-09 18:16:34 +10:00
349 changed files with 42259 additions and 34741 deletions

15
.gitattributes vendored Normal file
View File

@@ -0,0 +1,15 @@
# Set the default behavior, in case people don't have core.autocrlf set.
* text=auto
# Explicitly declare text files you want to always be normalized and converted
# to native line endings on checkout.
# Declare files that will always have LF line endings on checkout.
*.yml text eol=lf
# Declare files that will always have CRLF line endings on checkout.
*.cs text eol=crlf
# Denote all files that are truly binary and should not be modified.
*.png binary
*.jpg binary

100
.github/appveyor.yml vendored Normal file
View File

@@ -0,0 +1,100 @@
version: 0.7.{build}
skip_tags: true
image: Visual Studio 2015
configuration: Release
assembly_info:
patch: true
file: '**\AssemblyInfo.*'
assembly_version: '{version}'
assembly_file_version: '{version}'
assembly_informational_version: '{version}'
install:
- cmd: choco install InnoSetup
before_build:
- cmd: nuget restore src\Jackett.sln
build:
verbosity: minimal
after_build:
- cmd: >-
xcopy src\Jackett.Console\bin\Release build.windows\ /e /y
copy /Y src\Jackett.Service\bin\Release\JackettService.exe* %APPVEYOR_BUILD_FOLDER%\build.windows\
copy /Y src\Jackett.Tray\bin\Release\JackettTray.exe* %APPVEYOR_BUILD_FOLDER%\build.windows\
copy /Y src\Jackett.Updater\bin\Release\JackettUpdater.exe* %APPVEYOR_BUILD_FOLDER%\build.windows\
copy /Y LICENSE build.windows\LICENSE
copy /Y README.md build.windows\README.md
xcopy build.windows WindowsBuild\Jackett\ /e /y
msbuild src\Jackett.sln /t:Clean /logger:"C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll"
"C:\Program Files (x86)\Mono\bin\xbuild.bat" src\Jackett.sln /t:Build /p:Configuration=Release /verbosity:minimal /tv:12.0
xcopy src\Jackett.Console\bin\Release build.mono\ /e /y
copy /Y src\Jackett.Service\bin\Release\JackettService.exe* %APPVEYOR_BUILD_FOLDER%\build.mono\
copy /Y src\Jackett.Tray\bin\Release\JackettTray.exe* %APPVEYOR_BUILD_FOLDER%\build.mono\
copy /Y src\Jackett.Updater\bin\Release\JackettUpdater.exe* %APPVEYOR_BUILD_FOLDER%\build.mono\
copy /Y LICENSE build.mono\LICENSE
copy /Y README.md build.mono\README.md
copy /Y Upstart.config build.mono\Upstart.config
xcopy build.mono MonoBuild\Jackett\ /e /y
"C:\Program Files (x86)\Inno Setup 5\ISCC.exe" Installer.iss
RENAME Output\setup.exe Jackett.Installer.Windows.exe
MOVE Output\Jackett.Installer.Windows.exe %APPVEYOR_BUILD_FOLDER%
cd WindowsBuild
7z a -tzip -r "%APPVEYOR_BUILD_FOLDER%\Jackett.Binaries.Windows.zip" "Jackett\"
cd %APPVEYOR_BUILD_FOLDER%
cd MonoBuild
7z a -ttar "%APPVEYOR_BUILD_FOLDER%\Jackett.Binaries.Mono.tar" "Jackett\"
cd %APPVEYOR_BUILD_FOLDER%
7z a -tgzip "Jackett.Binaries.Mono.tar.gz" "Jackett.Binaries.Mono.tar"
appveyor PushArtifact Jackett.Installer.Windows.exe
appveyor PushArtifact Jackett.Binaries.Windows.zip
appveyor PushArtifact Jackett.Binaries.Mono.tar.gz
deploy:
- provider: GitHub
tag: v$(appveyor_build_version)
auth_token:
secure: hOg+16YTIbq4kO9u4D1YVOTbWDqgCX6mAQYMbnmBBSw2CiUsZh7OKbupoUb3FtWa
draft: true
on:
branch: master
notifications:
- provider: GitHubPullRequest
auth_token:
secure: k6ZZACPbKcvAFiXe/uOmY6Ofs4aw2rgKEWMNA8EilQpdJ6o7ef31we4DPn3SXZzx
on_build_success: true
on_build_failure: true
on_build_status_changed: true

BIN
.github/firefox-socks-proxy-settings.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

BIN
.github/putty-tunnels-settings.png vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

620
README.md
View File

@@ -1,277 +1,343 @@
# Jackett
[![GitHub issues](https://img.shields.io/github/issues/Jackett/Jackett.svg?maxAge=60&style=flat-square)](https://github.com/Jackett/Jackett/issues)
[![GitHub pull requests](https://img.shields.io/github/issues-pr/Jackett/Jackett.svg?maxAge=60&style=flat-square)](https://github.com/Jackett/Jackett/pulls)
[![Github Releases](https://img.shields.io/github/downloads/Jackett/Jackett/total.svg?maxAge=60&style=flat-square)](https://github.com/Jackett/Jackett/releases/latest)
[![Docker Pulls](https://img.shields.io/docker/pulls/linuxserver/jackett.svg?maxAge=60&style=flat-square)](https://hub.docker.com/r/linuxserver/jackett/)
This project is a new fork and is recruiting development help. If you are able to help out please contact us.
Jackett works as a proxy server: it translates queries from apps ([Sonarr](https://github.com/Sonarr/Sonarr), [Radarr](https://github.com/Radarr/Radarr), [SickRage](https://sickrage.github.io/), [CouchPotato](https://couchpota.to/), [Mylar](https://github.com/evilhero/mylar), etc) into tracker-site-specific http queries, parses the html response, then sends results back to the requesting software. This allows for getting recent uploads (like RSS) and performing searches. Jackett is a single repository of maintained indexer scraping & translation logic - removing the burden from other apps.
Developer note: The software implements the [Torznab](https://github.com/Sonarr/Sonarr/wiki/Implementing-a-Torznab-indexer) (with [nZEDb](https://github.com/nZEDb/nZEDb/blob/dev/docs/newznab_api_specification.txt) category numbering) and [TorrentPotato](https://github.com/RuudBurger/CouchPotatoServer/wiki/Couchpotato-torrent-provider) APIs.
#### Supported Systems
* Windows using .NET 4.5
* Linux and OSX using Mono 4 (mono 3 is no longer supported).
### Supported Public Trackers
* EZTV
* Il Corsaro Nero <!-- maintained by bonny1992 -->
* Isohunt
* KickAssTorrent
* KickAssTorrent (kat.how clone)
* LimeTorrents
* Nyaa <!-- maintained by bonny1992 -->
* RARBG
* ShowRSS
* Sky torrents
* The Pirate Bay
* TNTVillage <!-- maintained by bonny1992 -->
* TorrentProject
* Torrentz2
### Supported Private Trackers
* 2 Fast 4 You
* 3D Torrents
* 7tor
* Abnormal
* Acid-Lounge
* AlphaRatio
* Andraste
* AnimeBytes
* AnimeTorrents
* AOX
* Apollo (XANAX)
* ArabaFenice
* AsianDVDClub
* Audiobook Torrents
* Avistaz
* BakaBT [![(invite needed)][inviteneeded]](#)
* bB
* Best Friends
* BeyondHD
* BIGTorrent
* Bit-City Reloaded
* BIT-HDTV
* BitHQ
* BitHUmen
* BitMeTV
* BitSoup [![(invite needed)][inviteneeded]](#)
* Bitspyder
* Blu-bits
* BlueBird
* BroadcastTheNet [![(invite needed)][inviteneeded]](#)
* BTN
* BTNext
* Carpathians
* CHDBits
* Cinematik
* Cinemageddon
* CinemaZ
* Classix
* CZTeam
* DanishBits
* DataScene
* Demonoid
* Diablo Torrent
* DigitalHive
* Dragon World (DTW)
* Dragonworld Reloaded
* Dream Team
* EoT-Forum
* eStone
* Ethor.net (Thor's Land)
* FANO.IN
* FileList
* Freedom-HD
* Freshon
* FullMixMusic
* FunFile
* FunkyTorrents
* Fuzer
* GFXPeers
* Ghost City
* GigaTorrents [![(invite needed)][inviteneeded]](#)
* GimmePeers <!-- maintained by jamesb2147 -->
* GODS [![(invite needed)][inviteneeded]](#)
* Gormogon
* Greek Team
* Hardbay
* HD4Free
* HD-Space
* HD-Torrents
* HD-Bits.com
* HDBits
* HDChina
* HDClub
* HDHome
* HDSky
* HDTorrents.it
* Hebits
* Hon3y HD
* Hounddawgs
* House-of-Torrents
* Hyperay
* ICE Torrent
* I Love Classics
* Immortalseed
* Infinity-T
* inPeril
* Insane Tracker
* IPTorrents
* JPopsuki
* Kapaki
* Karagarga
* Le Paradis Du Net
* LinkoManija
* LosslessClub
* M-Team - TP
* Magico
* Majomparádé
* Mononoké-BT
* MoreThanTV
* MyAnonamouse
* myAmity
* MySpleen
* Nachtwerk
* NCore
* NetHD
* New Real World
* NextGen
* Norbits [![(invite needed)][inviteneeded]](#) <!-- added by DiseaseNO but no longer maintained? -->
* notwhat.cd
* Ourbits
* Passione Torrent <!-- maintained by bonny1992 -->
* PassThePopcorn [![(invite needed)][inviteneeded]](#)
* PirateTheNet
* PiXELHD
* PolishSource
* PolishTracker
* Pretome
* PrivateHD
* Psytorrents
* PTFiles
* QcTorrent
* Redacted (PassTheHeadphones)
* RevolutionTT
* Rockhard Lossless
* RoDVD
* RuTracker
* SceneAccess
* SceneFZ
* SceneTime
* SDBits
* Secret Cinema
* Shareisland
* ShareSpaceDB
* Shazbat
* Shellife
* SpeedCD
* Superbits
* The Empire
* The Horror Charnel
* The New Retro
* The Shinning
* The-Torrents
* TehConnection
* TenYardTracker
* Torrent Network
* Torrent Sector Crew
* Torrent411
* Torrent9
* TorrentBD
* TorrentBytes
* TorrentCCF [![(invite needed)][inviteneeded]](#)
* TorrentDay
* TorrentHeaven
* TorrentHR
* Torrenting
* TorrentLeech
* Torrents.Md
* Torrent-Syndikat
* ToTheGlory
* TranceTraffic
* TransmitheNet
* TV Chaos UK
* TV-Vault
* u-Torrent
* UHDBits
* Ultimate Gamer Club
* ULTRAHDCLUB
* Waffles
* World-In-HD [![(invite needed)][inviteneeded]](#)
* WorldOfP2P
* x264
* XSpeeds
* Xthor
* Xtreme Zone
* Ztracker
Trackers marked with [![(invite needed)][inviteneeded]](#) have no active maintainer and are missing features or are broken. If you have an invite for them please send it to kaso1717 -at- gmail.com to get them fixed/improved.
## Installation on Windows
We recommend you install Jackett as a Windows service using the supplied installer. You may also download the zipped version if you would like to configure everything manually.
To get started with using the installer for Jackett, follow the steps below:
1. Download the latest version of the Windows installer, "Jackett.Installer.Windows.exe" from the [releases](https://github.com/Jackett/Jackett/releases/latest) page.
2. When prompted if you would like this app to make changes to your computer, select "yes".
3. If you would like to install Jackett as a Windows Service, make sure the "Install as Windows Service" checkbox is filled.
4. Once the installation has finished, check the "Launch Jackett" box to get started.
5. Navigate your web browser to: http://127.0.0.1:9117
6. You're now ready to begin adding your trackers and using Jackett.
When installed as a service the tray icon acts as a way to open/start/stop Jackett. If you opted to not install it as a service then Jackett will run its web server from the tray tool.
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/OSX
1. Install [Mono 4](http://www.mono-project.com/download/#download-lin) or better (version 4.8 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.
2. Install libcurl:
* Debian/Ubunutu: `apt-get install libcurl4-openssl-dev`
* 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/)
## Installation using Docker
Detailed instructions are available at [LinuxServer.io Jackett Docker](https://hub.docker.com/r/linuxserver/jackett/). The Jackett Docker is highly recommended, especially if you are having Mono stability issues or having issues running Mono on your system eg. QNAP, Synology. Thanks to [LinuxServer.io](https://linuxserver.io)
## Installation on Synology
Jackett is available as beta package from [SynoCommuniy](https://synocommunity.com/)
## Troubleshooting
* __Command line switches__
You can pass various options when running via the command line, see --help for details.
* __Unable to connect to trackers with invalid SSL certificates__
You can disable certificate validation using the `--IgnoreSslErrors true` option but it's not recommended to use it as it enables Man-in-the-middle attacks on your connections.
* __Enable logging__
You can get additional logging with the command line switches `-t -l` or by enabeling `Enhanced logging` via the web interface.
Please post logs if you are unable to resolve your issue with these switches ensuring to remove your username/password/cookies.
The logfiles (log.txt/updater.txt) are stored in `%ProgramData%\Jackett` on Windows and `~/.config/Jackett/` on Linux/OSX.
## Creating an issue
Please supply as much information about the problem you are experiencing as possible. Your issue has a much greater chance of being resolved if logs are supplied so that we can see what is going on. Creating an issue with '### isn't working' doesn't help anyone to fix the problem.
## Contributing
All contributions are welcome just send a pull request. Jackett's framework allows our team (and any other volunteering dev) to implement new trackers in an hour or two. If you'd like support for a new tracker but are not a developer then feel free to leave a request on the [issues page](https://github.com/Jackett/Jackett/issues). It is recommended to use Visual studio 2015 when making code changes in this project.
## Screenshots
![screenshot](https://i.imgur.com/0d1nl7g.png "screenshot")
[inviteneeded]: https://raw.githubusercontent.com/Jackett/Jackett/master/.github/label-inviteneeded.png
# Jackett
[![GitHub issues](https://img.shields.io/github/issues/Jackett/Jackett.svg?maxAge=60&style=flat-square)](https://github.com/Jackett/Jackett/issues)
[![GitHub pull requests](https://img.shields.io/github/issues-pr/Jackett/Jackett.svg?maxAge=60&style=flat-square)](https://github.com/Jackett/Jackett/pulls)
[![Bountysource](https://img.shields.io/bountysource/team/jackett/activity.svg?style=flat-square)](https://www.bountysource.com/teams/jackett)
[![Build status](https://ci.appveyor.com/api/projects/status/gaybh5mvyx418nsp/branch/master?svg=true)](https://ci.appveyor.com/project/camjac251/jackett)
[![Github Releases](https://img.shields.io/github/downloads/Jackett/Jackett/total.svg?maxAge=60&style=flat-square)](https://github.com/Jackett/Jackett/releases/latest)
[![Docker Pulls](https://img.shields.io/docker/pulls/linuxserver/jackett.svg?maxAge=60&style=flat-square)](https://hub.docker.com/r/linuxserver/jackett/)
[![Discord](https://img.shields.io/badge/discord-chat-7289DA.svg?maxAge=60&style=flat-square)](https://discord.gg/J865QuA)
This project is a new fork and is recruiting development help. If you are able to help out please contact us.
Jackett works as a proxy server: it translates queries from apps ([Sonarr](https://github.com/Sonarr/Sonarr), [Radarr](https://github.com/Radarr/Radarr), [SickRage](https://sickrage.github.io/), [CouchPotato](https://couchpota.to/), [Mylar](https://github.com/evilhero/mylar), etc) into tracker-site-specific http queries, parses the html response, then sends results back to the requesting software. This allows for getting recent uploads (like RSS) and performing searches. Jackett is a single repository of maintained indexer scraping & translation logic - removing the burden from other apps.
Developer note: The software implements the [Torznab](https://github.com/Sonarr/Sonarr/wiki/Implementing-a-Torznab-indexer) (with [nZEDb](https://github.com/nZEDb/nZEDb/blob/dev/docs/newznab_api_specification.txt) category numbering) and [TorrentPotato](https://github.com/RuudBurger/CouchPotatoServer/wiki/Couchpotato-torrent-provider) APIs.
#### Supported Systems
* Windows using .NET 4.5
* Linux and macOS using Mono 4 (mono 3 is no longer supported).
### Supported Public Trackers
* Anidex
* Anime Tosho
* AniRena
* cpasbien
* EZTV
* GkTorrent
* Horrible Subs
* Il Corsaro Nero <!-- maintained by bonny1992 -->
* Isohunt
* KickAssTorrent
* KickAssTorrent (thekat.se clone)
* LimeTorrents
* NextTorrent
* Nyaa.si
* Nyaa-Pantsu
* Nyoo
* RARBG
* ShowRSS
* Sky torrents
* T411 v2
* The Pirate Bay
* TNTVillage <!-- maintained by bonny1992 -->
* Tokyo Toshokan
* Torlock
* Torrent Downloads
* Torrent9
* TorrentProject
* Torrentz2
* YTS.ag
* Zooqle
### Supported Semi-Private Trackers
* 7tor
* CzTorrent
* Deildu
* Gay-Torrents.net
* NetHD
* RuTracker
* SkTorrent
* TorrentBytes
* Xtreme Zone
* YggTorrent
* Ztracker
### Supported Private Trackers
* 2 Fast 4 You
* 3D Torrents
* Abnormal
* Acid-Lounge
* AlphaRatio
* Andraste
* AnimeBytes
* AnimeTorrents
* AOX
* Apollo (XANAX)
* ArabaFenice
* Arche Torrent
* AsianDVDClub
* AST4u
* Audiobook Torrents
* Awesome-HD
* Avistaz
* B2S-Share
* Back-ups
* BakaBT [![(invite needed)][inviteneeded]](#)
* bB
* BeyondHD
* BIGTorrent
* Bit-City Reloaded
* BIT-HDTV
* BitHQ
* BitHUmen
* BitMeTV
* BitSoup [![(invite needed)][inviteneeded]](#)
* Bitspyder
* BJ-Share
* Blu-bits
* BlueBird
* Blutopia
* BroadcastTheNet
* BrokenStones
* BTNext
* Carpathians
* CGPeers
* CHDBits
* Cinematik
* Cinemageddon
* CinemaZ
* Classix
* CZTeam
* DanishBits
* DataScene
* Demonoid
* Diablo Torrent
* DigitalHive
* Dragonworld Reloaded
* Dream Team
* Elite-Tracker
* EoT-Forum
* eStone
* Ethor.net (Thor's Land)
* FANO.IN
* FileList
* Freedom-HD
* FullMixMusic
* FunFile
* FunkyTorrents
* Fuzer
* GayTorrent.ru
* GFTracker
* GFXPeers
* Ghost City
* GigaTorrents [![(invite needed)][inviteneeded]](#)
* GimmePeers <!-- maintained by jamesb2147 -->
* GODS [![(invite needed)][inviteneeded]](#)
* Gormogon
* Greek Team
* Hardbay
* HD-Forever
* HD-Only
* HD-Space
* HD-Torrents
* HD-Bits.com
* HD4Free
* HDBits
* HDChina
* HDHome
* HDME
* HDSky
* HDTorrents.it
* Hebits
* Hon3y HD
* Hounddawgs
* House-of-Torrents
* Hyperay
* ICE Torrent
* I Love Classics
* Immortalseed
* Infinity-T
* inPeril
* Insane Tracker
* IPTorrents
* JPopsuki
* Kapaki
* Karagarga
* LinkoManija
* LosslessClub
* M-Team - TP
* Magico
* Majomparádé
* Manicomio Share
* Mononoké-BT
* MoreThanTV
* MyAnonamouse
* myAmity
* MySpleen
* NCore
* Nebulance
* New Real World
* Norbits [![(invite needed)][inviteneeded]](#) <!-- added by DiseaseNO but no longer maintained? -->
* notwhat.cd
* Ourbits
* Passione Torrent <!-- maintained by bonny1992 -->
* PassThePopcorn [![(invite needed)][inviteneeded]](#)
* PirateTheNet
* PiXELHD
* PolishSource
* PolishTracker
* Pretome
* PrivateHD
* Psytorrents
* PTFiles
* Redacted (PassTheHeadphones)
* RevolutionTT
* Rockhard Lossless
* RoDVD
* SceneFZ
* SceneTime
* SDBits
* Secret Cinema
* Shareisland
* ShareSpaceDB
* Shazbat
* Shellife
* SpeedCD
* SpeedTorrent Reloaded
* SportsCult
* SportHD
* Superbits
* Synthesiz3r
* Tasmanit
* The Empire
* The Geeks
* The Horror Charnel
* The Occult
* The New Retro
* The Place
* The Shinning
* The Show
* The Vault
* The-Torrents
* TehConnection
* TenYardTracker
* Torrent Network
* Torrent Sector Crew
* TorrentBD
* TorrentCCF [![(invite needed)][inviteneeded]](#)
* TorrentDay
* Torrentech
* TorrentHeaven
* TorrentHR
* Torrenting
* TorrentLeech
* Torrents.Md
* TorrentVault
* Torrent-Syndikat
* TorViet
* ToTheGlory
* TranceTraffic
* Trezzor
* TV Chaos UK
* TV-Vault
* u-Torrent
* UHDBits
* Ultimate Gamer Club
* ULTRAHDCLUB
* Waffles
* World-In-HD
* WorldOfP2P
* x264
* XSpeeds
* Xthor
* Zamunda.net
* Zelka.org
Trackers marked with [![(invite needed)][inviteneeded]](#) have no active maintainer and are missing features or are broken. If you have an invite for them please send it to kaso1717 -at- gmail.com to get them fixed/improved.
## Installation on Windows
We recommend you install Jackett as a Windows service using the supplied installer. You may also download the zipped version if you would like to configure everything manually.
To get started with using the installer for Jackett, follow the steps below:
1. Download the latest version of the Windows installer, "Jackett.Installer.Windows.exe" from the [releases](https://github.com/Jackett/Jackett/releases/latest) page.
2. When prompted if you would like this app to make changes to your computer, select "yes".
3. If you would like to install Jackett as a Windows Service, make sure the "Install as Windows Service" checkbox is filled.
4. Once the installation has finished, check the "Launch Jackett" box to get started.
5. Navigate your web browser to: http://127.0.0.1:9117
6. You're now ready to begin adding your trackers and using Jackett.
When installed as a service the tray icon acts as a way to open/start/stop Jackett. If you opted to not install it as a service then Jackett will run its web server from the tray tool.
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
1. Install [Mono 4](http://www.mono-project.com/download/#download-lin) or better (version 4.8 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.
2. Install libcurl:
* Debian/Ubunutu: `apt-get install libcurl4-openssl-dev`
* 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/)
## Installation on macOS
### Prerequisites
Install [Mono 4](http://www.mono-project.com/download/#download-mac) or better (version 4.8 is recommended).
* Setup ssl support by running `curl -sS https://curl.haxx.se/ca/cacert.pem | cert-sync --user /dev/stdin`
### Install as service
1. Download and extract the latest `Jackett.Binaries.Mono.tar.gz` release from the [releases page](https://github.com/Jackett/Jackett/releases).
2. Open the extracted folder and double-click on `install_service_macos`.
3. 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 `launchctl unload ~/Library/LaunchAgents/org.user.Jackett.plist` from Terminal. You can start it again it using `launchctl load ~/Library/LaunchAgents/org.user.Jackett.plist`.
Logs are stored as usual under `~/.config/Jackett/log.txt`.
### Run without installing as a service
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`.
## Installation using Docker
Detailed instructions are available at [LinuxServer.io Jackett Docker](https://hub.docker.com/r/linuxserver/jackett/). The Jackett Docker is highly recommended, especially if you are having Mono stability issues or having issues running Mono on your system eg. QNAP, Synology. Thanks to [LinuxServer.io](https://linuxserver.io)
## Installation on Synology
Jackett is available as beta package from [SynoCommunity](https://synocommunity.com/)
## Troubleshooting
* __Command line switches__
You can pass various options when running via the command line, see --help for details.
* __Error "The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel."__
This is often caused by missing CA certificates.
Try reimporting the certificates in this case:
- On Linux (as user root): `wget -O - https://curl.haxx.se/ca/cacert.pem | cert-sync /dev/stdin`
- On macOS: `curl -sS https://curl.haxx.se/ca/cacert.pem | cert-sync --user /dev/stdin`
* __Enable logging__
You can get additional logging with the command line switches `-t -l` or by enabling `Enhanced logging` via the web interface.
Please post logs if you are unable to resolve your issue with these switches ensuring to remove your username/password/cookies.
The logfiles (log.txt/updater.txt) are stored in `%ProgramData%\Jackett` on Windows and `~/.config/Jackett/` on Linux/macOS.
## Creating an issue
Please supply as much information about the problem you are experiencing as possible. Your issue has a much greater chance of being resolved if logs are supplied so that we can see what is going on. Creating an issue with '### isn't working' doesn't help anyone to fix the problem.
## Contributing
All contributions are welcome just send a pull request. Jackett's framework allows our team (and any other volunteering dev) to implement new trackers in an hour or two. If you'd like support for a new tracker but are not a developer then feel free to leave a request on the [issues page](https://github.com/Jackett/Jackett/issues). It is recommended to use Visual studio 2015 when making code changes in this project.
## Screenshots
![screenshot](https://i.imgur.com/0d1nl7g.png "screenshot")
[inviteneeded]: https://raw.githubusercontent.com/Jackett/Jackett/master/.github/label-inviteneeded.png

View File

@@ -94,8 +94,14 @@
<MonoDevelop>
<Properties>
<Policies>
<TextStylePolicy inheritsSet="VisualStudio" inheritsScope="text/plain" scope="text/x-csharp" />
<CSharpFormattingPolicy IndentSwitchBody="True" IndentBlocksInsideExpressions="True" AnonymousMethodBraceStyle="NextLine" PropertyBraceStyle="NextLine" PropertyGetBraceStyle="NextLine" PropertySetBraceStyle="NextLine" EventBraceStyle="NextLine" EventAddBraceStyle="NextLine" EventRemoveBraceStyle="NextLine" StatementBraceStyle="NextLine" ElseNewLinePlacement="NewLine" CatchNewLinePlacement="NewLine" FinallyNewLinePlacement="NewLine" WhileNewLinePlacement="DoNotCare" ArrayInitializerWrapping="DoNotChange" ArrayInitializerBraceStyle="NextLine" BeforeMethodDeclarationParentheses="False" BeforeMethodCallParentheses="False" BeforeConstructorDeclarationParentheses="False" NewLineBeforeConstructorInitializerColon="NewLine" NewLineAfterConstructorInitializerColon="SameLine" BeforeDelegateDeclarationParentheses="False" NewParentheses="False" SpacesBeforeBrackets="False" inheritsSet="Mono" inheritsScope="text/x-csharp" scope="text/x-csharp" />
<TextStylePolicy TabWidth="4" IndentWidth="4" RemoveTrailingWhitespace="True" NoTabsAfterNonTabs="False" EolMarker="Native" FileWidth="80" TabsToSpaces="True" scope="text/x-csharp">
<inheritsSet />
<inheritsScope />
</TextStylePolicy>
<CSharpFormattingPolicy IndentBlock="True" IndentBraces="False" IndentSwitchSection="False" IndentSwitchCaseSection="True" LabelPositioning="OneLess" NewLinesForBracesInTypes="True" NewLinesForBracesInMethods="True" NewLinesForBracesInProperties="False" NewLinesForBracesInAccessors="False" NewLinesForBracesInAnonymousMethods="False" NewLinesForBracesInControlBlocks="False" NewLinesForBracesInAnonymousTypes="False" NewLinesForBracesInObjectCollectionArrayInitializers="False" NewLinesForBracesInLambdaExpressionBody="False" NewLineForElse="False" NewLineForCatch="False" NewLineForFinally="False" NewLineForMembersInObjectInit="False" NewLineForMembersInAnonymousTypes="False" NewLineForClausesInQuery="False" SpacingAfterMethodDeclarationName="True" SpaceWithinMethodDeclarationParenthesis="False" SpaceBetweenEmptyMethodDeclarationParentheses="False" SpaceAfterMethodCallName="True" SpaceWithinMethodCallParentheses="False" SpaceBetweenEmptyMethodCallParentheses="False" SpaceAfterControlFlowStatementKeyword="True" SpaceWithinExpressionParentheses="False" SpaceWithinCastParentheses="False" SpaceWithinOtherParentheses="False" SpaceAfterCast="False" SpacesIgnoreAroundVariableDeclaration="False" SpaceBeforeOpenSquareBracket="True" SpaceBetweenEmptySquareBrackets="False" SpaceWithinSquareBrackets="False" SpaceAfterColonInBaseTypeDeclaration="True" SpaceAfterComma="True" SpaceAfterDot="False" SpaceAfterSemicolonsInForStatement="True" SpaceBeforeColonInBaseTypeDeclaration="True" SpaceBeforeComma="False" SpaceBeforeDot="False" SpaceBeforeSemicolonsInForStatement="False" SpacingAroundBinaryOperator="Single" WrappingPreserveSingleLine="True" WrappingKeepStatementsOnSingleLine="True" PlaceSystemDirectiveFirst="True" scope="text/x-csharp">
<inheritsSet />
<inheritsScope />
</CSharpFormattingPolicy>
</Policies>
</Properties>
</MonoDevelop>

View File

@@ -60,7 +60,7 @@ namespace Jackett.Console
[Option('n', "IgnoreSslErrors", HelpText = "[true/false] Ignores invalid SSL certificates")]
public bool? IgnoreSslErrors { get; set; }
[Option('d', "DataFolder", HelpText = "Specify the location of the data folder (Must be admin on Windows) eg. --DataFolder=\"D:\\Your Data\\Jackett\\\"")]
[Option('d', "DataFolder", HelpText = "Specify the location of the data folder (Must be admin on Windows) eg. --DataFolder=\"D:\\Your Data\\Jackett\\\". Don't use this on Unix (mono) systems. On Unix just adjust the HOME directory of the user to the datedir or set the XDG_CONFIG_HOME environment variable.")]
public string DataFolder { get; set; }
[Option(HelpText = "Don't restart after update")]

View File

@@ -153,6 +153,9 @@
<ItemGroup>
<None Include="App.config" />
<None Include="packages.config" />
<Content Include="install_service_macos">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\CurlSharp\CurlSharp.csproj">
@@ -182,4 +185,4 @@
<Target Name="AfterBuild">
</Target>
-->
</Project>
</Project>

View File

@@ -1,236 +1,236 @@
using CommandLine;
using CommandLine.Text;
using Jackett;
using Jackett.Console;
using Jackett.Indexers;
using Jackett.Utils;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Net;
using System.Reflection;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
namespace JackettConsole
{
public class Program
{
static void Main(string[] args)
{
try
{
var options = new ConsoleOptions();
if (!Parser.Default.ParseArguments(args, options) || options.ShowHelp == true)
{
if (options.LastParserState != null && options.LastParserState.Errors.Count > 0)
{
var help = new HelpText();
var errors = help.RenderParsingErrorsText(options, 2); // indent with two spaces
Console.WriteLine("Jackett v" + Engine.ConfigService.GetVersion());
Console.WriteLine("Switch error: " + errors);
Console.WriteLine("See --help for further details on switches.");
Environment.ExitCode = 1;
return;
}
else
{
var text = HelpText.AutoBuild(options, (HelpText current) => HelpText.DefaultParsingErrorsHandler(options, current));
text.Copyright = " ";
text.Heading = "Jackett v" + Engine.ConfigService.GetVersion() + " options:";
Console.WriteLine(text);
Environment.ExitCode = 1;
return;
}
}
else
{
if (options.ListenPublic && options.ListenPrivate)
{
Console.WriteLine("You can only use listen private OR listen publicly.");
Environment.ExitCode = 1;
return;
}
/* ====== Options ===== */
// SSL Fix
Startup.DoSSLFix = options.SSLFix;
// Use curl
if (options.Client != null)
Startup.ClientOverride = options.Client.ToLowerInvariant();
// Use Proxy
if (options.ProxyConnection != null)
{
Startup.ProxyConnection = options.ProxyConnection.ToLowerInvariant();
Engine.Logger.Info("Proxy enabled. " + Startup.ProxyConnection);
}
// Logging
if (options.Logging)
Startup.LogRequests = true;
// Tracing
if (options.Tracing)
Startup.TracingEnabled = true;
// Log after the fact as using the logger will cause the options above to be used
if (options.Logging)
Engine.Logger.Info("Logging enabled.");
if (options.Tracing)
Engine.Logger.Info("Tracing enabled.");
if (options.SSLFix == true)
Engine.Logger.Info("SSL ECC workaround enabled.");
else if (options.SSLFix == false)
Engine.Logger.Info("SSL ECC workaround has been disabled.");
// Ignore SSL errors on Curl
Startup.IgnoreSslErrors = options.IgnoreSslErrors;
if (options.IgnoreSslErrors == true)
{
Engine.Logger.Info("Jackett will ignore SSL certificate errors.");
}
// Choose Data Folder
if (!string.IsNullOrWhiteSpace(options.DataFolder))
{
Startup.CustomDataFolder = options.DataFolder.Replace("\"", string.Empty).Replace("'", string.Empty).Replace(@"\\", @"\");
Engine.Logger.Info("Jackett Data will be stored in: " + Startup.CustomDataFolder);
}
/* ====== Actions ===== */
// Install service
if (options.Install)
{
Engine.ServiceConfig.Install();
return;
}
// Uninstall service
if (options.Uninstall)
{
Engine.Server.ReserveUrls(doInstall: false);
Engine.ServiceConfig.Uninstall();
return;
}
// Reserve urls
if (options.ReserveUrls)
{
Engine.Server.ReserveUrls(doInstall: true);
return;
}
// Start Service
if (options.StartService)
{
if (!Engine.ServiceConfig.ServiceRunning())
{
Engine.ServiceConfig.Start();
}
return;
}
// Stop Service
if (options.StopService)
{
if (Engine.ServiceConfig.ServiceRunning())
{
Engine.ServiceConfig.Stop();
}
return;
}
// Migrate settings
if (options.MigrateSettings)
{
Engine.ConfigService.PerformMigration();
return;
}
// Show Version
if (options.ShowVersion)
{
Console.WriteLine("Jackett v" + Engine.ConfigService.GetVersion());
return;
}
/* ====== Overrides ===== */
// Override listen public
if (options.ListenPublic || options.ListenPrivate)
{
if (Engine.Server.Config.AllowExternal != options.ListenPublic)
{
Engine.Logger.Info("Overriding external access to " + options.ListenPublic);
Engine.Server.Config.AllowExternal = options.ListenPublic;
if (System.Environment.OSVersion.Platform != PlatformID.Unix)
{
if (ServerUtil.IsUserAdministrator())
{
Engine.Server.ReserveUrls(doInstall: true);
}
else
{
Engine.Logger.Error("Unable to switch to public listening without admin rights.");
Environment.ExitCode = 1;
return;
}
}
Engine.Server.SaveConfig();
}
}
// Override port
if (options.Port != 0)
{
if (Engine.Server.Config.Port != options.Port)
{
Engine.Logger.Info("Overriding port to " + options.Port);
Engine.Server.Config.Port = options.Port;
if (System.Environment.OSVersion.Platform != PlatformID.Unix)
{
if (ServerUtil.IsUserAdministrator())
{
Engine.Server.ReserveUrls(doInstall: true);
}
else
{
Engine.Logger.Error("Unable to switch ports when not running as administrator");
Environment.ExitCode = 1;
return;
}
}
Engine.Server.SaveConfig();
}
}
Startup.NoRestart = options.NoRestart;
}
Engine.Server.Initalize();
Engine.Server.Start();
Engine.RunTime.Spin();
Engine.Logger.Info("Server thread exit");
}
catch (Exception e)
{
Engine.Logger.Error(e, "Top level exception");
}
}
}
}
using CommandLine;
using CommandLine.Text;
using Jackett;
using Jackett.Console;
using Jackett.Indexers;
using Jackett.Utils;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Net;
using System.Reflection;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
namespace JackettConsole
{
public class Program
{
static void Main(string[] args)
{
try
{
var options = new ConsoleOptions();
if (!Parser.Default.ParseArguments(args, options) || options.ShowHelp == true)
{
if (options.LastParserState != null && options.LastParserState.Errors.Count > 0)
{
var help = new HelpText();
var errors = help.RenderParsingErrorsText(options, 2); // indent with two spaces
Console.WriteLine("Jackett v" + Engine.ConfigService.GetVersion());
Console.WriteLine("Switch error: " + errors);
Console.WriteLine("See --help for further details on switches.");
Environment.ExitCode = 1;
return;
}
else
{
var text = HelpText.AutoBuild(options, (HelpText current) => HelpText.DefaultParsingErrorsHandler(options, current));
text.Copyright = " ";
text.Heading = "Jackett v" + Engine.ConfigService.GetVersion() + " options:";
Console.WriteLine(text);
Environment.ExitCode = 1;
return;
}
}
else
{
if (options.ListenPublic && options.ListenPrivate)
{
Console.WriteLine("You can only use listen private OR listen publicly.");
Environment.ExitCode = 1;
return;
}
/* ====== Options ===== */
// SSL Fix
Startup.DoSSLFix = options.SSLFix;
// Use curl
if (options.Client != null)
Startup.ClientOverride = options.Client.ToLowerInvariant();
// Use Proxy
if (options.ProxyConnection != null)
{
Startup.ProxyConnection = options.ProxyConnection.ToLowerInvariant();
Engine.Logger.Info("Proxy enabled. " + Startup.ProxyConnection);
}
// Logging
if (options.Logging)
Startup.LogRequests = true;
// Tracing
if (options.Tracing)
Startup.TracingEnabled = true;
// Log after the fact as using the logger will cause the options above to be used
if (options.Logging)
Engine.Logger.Info("Logging enabled.");
if (options.Tracing)
Engine.Logger.Info("Tracing enabled.");
if (options.SSLFix == true)
Engine.Logger.Info("SSL ECC workaround enabled.");
else if (options.SSLFix == false)
Engine.Logger.Info("SSL ECC workaround has been disabled.");
// Ignore SSL errors on Curl
Startup.IgnoreSslErrors = options.IgnoreSslErrors;
if (options.IgnoreSslErrors == true)
{
Engine.Logger.Info("Jackett will ignore SSL certificate errors.");
}
// Choose Data Folder
if (!string.IsNullOrWhiteSpace(options.DataFolder))
{
Startup.CustomDataFolder = options.DataFolder.Replace("\"", string.Empty).Replace("'", string.Empty).Replace(@"\\", @"\");
Engine.Logger.Info("Jackett Data will be stored in: " + Startup.CustomDataFolder);
}
/* ====== Actions ===== */
// Install service
if (options.Install)
{
Engine.ServiceConfig.Install();
return;
}
// Uninstall service
if (options.Uninstall)
{
Engine.Server.ReserveUrls(doInstall: false);
Engine.ServiceConfig.Uninstall();
return;
}
// Reserve urls
if (options.ReserveUrls)
{
Engine.Server.ReserveUrls(doInstall: true);
return;
}
// Start Service
if (options.StartService)
{
if (!Engine.ServiceConfig.ServiceRunning())
{
Engine.ServiceConfig.Start();
}
return;
}
// Stop Service
if (options.StopService)
{
if (Engine.ServiceConfig.ServiceRunning())
{
Engine.ServiceConfig.Stop();
}
return;
}
// Migrate settings
if (options.MigrateSettings)
{
Engine.ConfigService.PerformMigration();
return;
}
// Show Version
if (options.ShowVersion)
{
Console.WriteLine("Jackett v" + Engine.ConfigService.GetVersion());
return;
}
/* ====== Overrides ===== */
// Override listen public
if (options.ListenPublic || options.ListenPrivate)
{
if (Engine.Server.Config.AllowExternal != options.ListenPublic)
{
Engine.Logger.Info("Overriding external access to " + options.ListenPublic);
Engine.Server.Config.AllowExternal = options.ListenPublic;
if (System.Environment.OSVersion.Platform != PlatformID.Unix)
{
if (ServerUtil.IsUserAdministrator())
{
Engine.Server.ReserveUrls(doInstall: true);
}
else
{
Engine.Logger.Error("Unable to switch to public listening without admin rights.");
Environment.ExitCode = 1;
return;
}
}
Engine.Server.SaveConfig();
}
}
// Override port
if (options.Port != 0)
{
if (Engine.Server.Config.Port != options.Port)
{
Engine.Logger.Info("Overriding port to " + options.Port);
Engine.Server.Config.Port = options.Port;
if (System.Environment.OSVersion.Platform != PlatformID.Unix)
{
if (ServerUtil.IsUserAdministrator())
{
Engine.Server.ReserveUrls(doInstall: true);
}
else
{
Engine.Logger.Error("Unable to switch ports when not running as administrator");
Environment.ExitCode = 1;
return;
}
}
Engine.Server.SaveConfig();
}
}
Startup.NoRestart = options.NoRestart;
}
Engine.Server.Initalize();
Engine.Server.Start();
Engine.RunTime.Spin();
Engine.Logger.Info("Server thread exit");
}
catch (Exception e)
{
Engine.Logger.Error(e, "Top level exception");
}
}
}
}

View File

@@ -0,0 +1,76 @@
#!/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
launchctl remove org.user.Jackett
# 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 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 [[ $(launchctl list | grep org.user.Jackett) ]]; 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 plist to LaunchAgents
cat >~/Library/LaunchAgents/org.user.Jackett.plist <<EOL
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>EnvironmentVariables</key>
<dict>
<key>PATH</key>
<string>/usr/bin:/bin:/usr/sbin:/sbin:${monodir}</string>
</dict>
<key>KeepAlive</key>
<true/>
<key>Label</key>
<string>org.user.Jackett</string>
<key>ProgramArguments</key>
<array>
<string>${monodir}/mono</string>
<string>--debug</string>
<string>JackettConsole.exe</string>
<string>--NoRestart</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>WorkingDirectory</key>
<string>${jackettdir}</string>
</dict>
</plist>
EOL
# Run the agent
launchctl load ~/Library/LaunchAgents/org.user.Jackett.plist
# Check that it's running
if [[ $(launchctl list | grep org.user.Jackett) ]]; then
echo "${BOLDGREEN}Agent successfully installed and launched!${NC}"
else
cat << EOL
${BOLDRED}ERROR${NC}: Could not launch agent. 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}\`
EOL
fi

View File

@@ -28,7 +28,12 @@ namespace JackettTest
throw new NotImplementedException();
}
public void InitIndexers()
public IWebIndexer GetWebIndexer(string name)
{
throw new NotImplementedException();
}
public void InitIndexers(IEnumerable<string> path)
{
throw new NotImplementedException();
}
@@ -43,12 +48,7 @@ namespace JackettTest
throw new NotImplementedException();
}
public void InitCardigannIndexers(string path)
{
throw new NotImplementedException();
}
public void SortIndexers()
public void InitAggregateIndexer()
{
throw new NotImplementedException();
}

View File

@@ -1,6 +1,6 @@
using Jackett.Services;
using Jackett.Services;
using Jackett.Utils.Clients;
using NLog;
using NLog;
using System;
using System.Collections.Generic;
using System.Linq;
@@ -14,10 +14,10 @@ namespace JackettTest
private Dictionary<WebRequest, Func<WebRequest, WebClientByteResult>> byteCallbacks = new Dictionary<WebRequest, Func<WebRequest, WebClientByteResult>>();
private Dictionary<WebRequest, Func<WebRequest, WebClientStringResult>> stringCallbacks = new Dictionary<WebRequest, Func<WebRequest, WebClientStringResult>>();
public TestWebClient(IProcessService p, Logger l, IConfigurationService c)
public TestWebClient(IProcessService p, Logger l, IConfigurationService c)
: base(p: p,
l: l,
c: c)
c: c)
{
}

View File

@@ -1,259 +1,268 @@
using CommandLine;
using Jackett.Services;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Web;
/*
// no supported by appveyor, disabeling for now
#if __MonoCS__
using Mono.Unix.Native;
#endif
*/
namespace Jackett.Updater
{
class Program
{
static void Main(string[] args)
{
new Program().Run(args);
}
private void Run(string[] args)
{
Engine.SetupLogging(null, "updater.txt");
Engine.Logger.Info("Jackett Updater v" + GetCurrentVersion());
Engine.Logger.Info("Options \"" + string.Join("\" \"", args) + "\"");
try {
var options = new UpdaterConsoleOptions();
if (Parser.Default.ParseArguments(args, options))
{
ProcessUpdate(options);
}
else
{
Engine.Logger.Error("Failed to process update arguments!");
Console.ReadKey();
}
}
catch (Exception e)
{
Engine.Logger.Error(e, "Exception applying update!");
}
}
private string GetCurrentVersion()
{
var assembly = System.Reflection.Assembly.GetExecutingAssembly();
var fvi = FileVersionInfo.GetVersionInfo(assembly.Location);
return fvi.FileVersion;
}
private void KillPids(int[] pids)
{
foreach (var pid in pids)
{
try
{
var proc = Process.GetProcessById(pid);
Engine.Logger.Info("Killing process " + proc.Id);
proc.Kill();
var exited = proc.WaitForExit(5000);
if (!exited)
Engine.Logger.Info("Process " + pid.ToString() + " didn't exit within 5 seconds");
/*
// no supported by appveyor, disabeling for now
#if __MonoCS__
Engine.Logger.Info("Sending SIGKILL to process " + pid.ToString());
Syscall.kill(proc.Id, Signum.SIGKILL);
#endif
*/
}
catch (ArgumentException e)
{
Engine.Logger.Info("Process " + pid.ToString() + " is already dead");
}
catch (Exception e)
{
Engine.Logger.Info("Error killing process " + pid.ToString());
Engine.Logger.Info(e);
}
}
}
private void ProcessUpdate(UpdaterConsoleOptions options)
{
var updateLocation = GetUpdateLocation();
if(!(updateLocation.EndsWith("\\") || updateLocation.EndsWith("/")))
{
updateLocation += Path.DirectorySeparatorChar;
}
var pids = new int[] { };
if (options.KillPids != null)
{
var pidsStr = options.KillPids.Split(',').Where(pid => !string.IsNullOrWhiteSpace(pid)).ToArray();
pids = Array.ConvertAll(pidsStr, pid => int.Parse(pid));
}
var isWindows = System.Environment.OSVersion.Platform != PlatformID.Unix;
var trayRunning = false;
var trayProcesses = Process.GetProcessesByName("JackettTray");
if (isWindows)
{
if (trayProcesses.Count() > 0)
{
foreach (var proc in trayProcesses)
{
try
{
Engine.Logger.Info("Killing tray process " + proc.Id);
proc.Kill();
trayRunning = true;
}
catch { }
}
}
// on unix we don't have to wait (we can overwrite files which are in use)
// On unix we kill the PIDs after the update so e.g. systemd can automatically restart the process
KillPids(pids);
}
Engine.Logger.Info("Finding files in: " + updateLocation);
var files = Directory.GetFiles(updateLocation, "*.*", SearchOption.AllDirectories);
foreach(var file in files)
{
var fileName = Path.GetFileName(file).ToLowerInvariant();
if (fileName.EndsWith(".zip") ||
fileName.EndsWith(".tar") ||
fileName.EndsWith(".gz"))
{
continue;
}
try {
Engine.Logger.Info("Copying " + fileName);
var dest = Path.Combine(options.Path, file.Substring(updateLocation.Length));
var destDir = Path.GetDirectoryName(dest);
if (!Directory.Exists(destDir))
{
Engine.Logger.Info("Creating directory " + destDir);
Directory.CreateDirectory(destDir);
}
File.Copy(file, dest, true);
}
catch(Exception e)
{
Engine.Logger.Error(e);
}
}
// delete old dirs
string[] oldDirs = new string[] { "Content/logos" };
foreach (var oldDir in oldDirs)
{
try
{
var deleteDir = Path.Combine(options.Path, oldDir);
if (Directory.Exists(deleteDir))
{
Engine.Logger.Info("Deleting directory " + deleteDir);
Directory.Delete(deleteDir, true);
}
}
catch (Exception e)
{
Engine.Logger.Error(e);
}
}
// delete old files
string[] oldFiles = new string[] {
"Content/css/jquery.dataTables.css",
"Content/css/jquery.dataTables_themeroller.css",
"Definitions/tspate.yml",
"Definitions/freakstrackingsystem.yml",
"Definitions/rarbg.yml",
"Definitions/t411.yml",
"Definitions/hdbc.yml", // renamed to hdbitscom
};
foreach (var oldFIle in oldFiles)
{
try
{
var deleteFile = Path.Combine(options.Path, oldFIle);
if (File.Exists(deleteFile))
{
Engine.Logger.Info("Deleting file " + deleteFile);
File.Delete(deleteFile);
}
}
catch (Exception e)
{
Engine.Logger.Error(e);
}
}
// kill pids after the update on UNIX
if (!isWindows)
KillPids(pids);
if (options.NoRestart == false)
{
if (trayRunning)
{
var startInfo = new ProcessStartInfo()
{
Arguments = options.Args,
FileName = Path.Combine(options.Path, "JackettTray.exe"),
UseShellExecute = true
};
Process.Start(startInfo);
}
if(string.Equals(options.Type, "JackettService.exe", StringComparison.InvariantCultureIgnoreCase))
{
var serviceHelper = new ServiceConfigService(null, null);
if (serviceHelper.ServiceExists())
{
serviceHelper.Start();
}
} else
{
var startInfo = new ProcessStartInfo()
{
Arguments = options.Args,
FileName = Path.Combine(options.Path, "JackettConsole.exe"),
UseShellExecute = true
};
if (!isWindows)
{
startInfo.Arguments = startInfo.FileName + " " + startInfo.Arguments;
startInfo.FileName = "mono";
}
Engine.Logger.Info("Starting Jackett: " + startInfo.FileName + " " + startInfo.Arguments);
Process.Start(startInfo);
}
}
}
private string GetUpdateLocation()
{
var location = new Uri(Assembly.GetEntryAssembly().GetName().CodeBase);
return new FileInfo(HttpUtility.UrlDecode(location.AbsolutePath)).DirectoryName;
}
}
}
using CommandLine;
using Jackett.Services;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Web;
/*
// no supported by appveyor, disabeling for now
#if __MonoCS__
using Mono.Unix.Native;
#endif
*/
namespace Jackett.Updater
{
class Program
{
static void Main(string[] args)
{
new Program().Run(args);
}
private void Run(string[] args)
{
Engine.SetupLogging(null, "updater.txt");
Engine.Logger.Info("Jackett Updater v" + GetCurrentVersion());
Engine.Logger.Info("Options \"" + string.Join("\" \"", args) + "\"");
try {
var options = new UpdaterConsoleOptions();
if (Parser.Default.ParseArguments(args, options))
{
ProcessUpdate(options);
}
else
{
Engine.Logger.Error("Failed to process update arguments!");
Console.ReadKey();
}
}
catch (Exception e)
{
Engine.Logger.Error(e, "Exception applying update!");
}
}
private string GetCurrentVersion()
{
var assembly = System.Reflection.Assembly.GetExecutingAssembly();
var fvi = FileVersionInfo.GetVersionInfo(assembly.Location);
return fvi.FileVersion;
}
private void KillPids(int[] pids)
{
foreach (var pid in pids)
{
try
{
var proc = Process.GetProcessById(pid);
Engine.Logger.Info("Killing process " + proc.Id);
proc.Kill();
var exited = proc.WaitForExit(5000);
if (!exited)
Engine.Logger.Info("Process " + pid.ToString() + " didn't exit within 5 seconds");
/*
// no supported by appveyor, disabeling for now
#if __MonoCS__
Engine.Logger.Info("Sending SIGKILL to process " + pid.ToString());
Syscall.kill(proc.Id, Signum.SIGKILL);
#endif
*/
}
catch (ArgumentException)
{
Engine.Logger.Info("Process " + pid.ToString() + " is already dead");
}
catch (Exception e)
{
Engine.Logger.Info("Error killing process " + pid.ToString());
Engine.Logger.Info(e);
}
}
}
private void ProcessUpdate(UpdaterConsoleOptions options)
{
var updateLocation = GetUpdateLocation();
if(!(updateLocation.EndsWith("\\") || updateLocation.EndsWith("/")))
{
updateLocation += Path.DirectorySeparatorChar;
}
var pids = new int[] { };
if (options.KillPids != null)
{
var pidsStr = options.KillPids.Split(',').Where(pid => !string.IsNullOrWhiteSpace(pid)).ToArray();
pids = Array.ConvertAll(pidsStr, pid => int.Parse(pid));
}
var isWindows = System.Environment.OSVersion.Platform != PlatformID.Unix;
var trayRunning = false;
var trayProcesses = Process.GetProcessesByName("JackettTray");
if (isWindows)
{
if (trayProcesses.Count() > 0)
{
foreach (var proc in trayProcesses)
{
try
{
Engine.Logger.Info("Killing tray process " + proc.Id);
proc.Kill();
trayRunning = true;
}
catch { }
}
}
// on unix we don't have to wait (we can overwrite files which are in use)
// On unix we kill the PIDs after the update so e.g. systemd can automatically restart the process
KillPids(pids);
}
Engine.Logger.Info("Finding files in: " + updateLocation);
var files = Directory.GetFiles(updateLocation, "*.*", SearchOption.AllDirectories);
foreach(var file in files)
{
var fileName = Path.GetFileName(file).ToLowerInvariant();
if (fileName.EndsWith(".zip") ||
fileName.EndsWith(".tar") ||
fileName.EndsWith(".gz"))
{
continue;
}
try {
Engine.Logger.Info("Copying " + fileName);
var dest = Path.Combine(options.Path, file.Substring(updateLocation.Length));
var destDir = Path.GetDirectoryName(dest);
if (!Directory.Exists(destDir))
{
Engine.Logger.Info("Creating directory " + destDir);
Directory.CreateDirectory(destDir);
}
File.Copy(file, dest, true);
}
catch(Exception e)
{
Engine.Logger.Error(e);
}
}
// delete old dirs
string[] oldDirs = new string[] { "Content/logos" };
foreach (var oldDir in oldDirs)
{
try
{
var deleteDir = Path.Combine(options.Path, oldDir);
if (Directory.Exists(deleteDir))
{
Engine.Logger.Info("Deleting directory " + deleteDir);
Directory.Delete(deleteDir, true);
}
}
catch (Exception e)
{
Engine.Logger.Error(e);
}
}
// delete old files
string[] oldFiles = new string[] {
"Content/css/jquery.dataTables.css",
"Content/css/jquery.dataTables_themeroller.css",
"Definitions/tspate.yml",
"Definitions/freakstrackingsystem.yml",
"Definitions/rarbg.yml",
"Definitions/t411.yml",
"Definitions/hdbc.yml", // renamed to hdbitscom
"Definitions/maniatorrent.yml",
"Definitions/nyaa.yml",
"Definitions/nachtwerk.yml",
"Definitions/leparadisdunet.yml",
"Definitions/qctorrent.yml",
"Definitions/dragonworld.yml",
"Definitions/hdclub.yml",
"Definitions/polishtracker.yml",
"Definitions/zetorrents.yml",
};
foreach (var oldFIle in oldFiles)
{
try
{
var deleteFile = Path.Combine(options.Path, oldFIle);
if (File.Exists(deleteFile))
{
Engine.Logger.Info("Deleting file " + deleteFile);
File.Delete(deleteFile);
}
}
catch (Exception e)
{
Engine.Logger.Error(e);
}
}
// kill pids after the update on UNIX
if (!isWindows)
KillPids(pids);
if (options.NoRestart == false)
{
if (trayRunning)
{
var startInfo = new ProcessStartInfo()
{
Arguments = options.Args,
FileName = Path.Combine(options.Path, "JackettTray.exe"),
UseShellExecute = true
};
Process.Start(startInfo);
}
if(string.Equals(options.Type, "JackettService.exe", StringComparison.InvariantCultureIgnoreCase))
{
var serviceHelper = new ServiceConfigService(null, null);
if (serviceHelper.ServiceExists())
{
serviceHelper.Start();
}
} else
{
var startInfo = new ProcessStartInfo()
{
Arguments = options.Args,
FileName = Path.Combine(options.Path, "JackettConsole.exe"),
UseShellExecute = true
};
if (!isWindows)
{
startInfo.Arguments = startInfo.FileName + " " + startInfo.Arguments;
startInfo.FileName = "mono";
}
Engine.Logger.Info("Starting Jackett: " + startInfo.FileName + " " + startInfo.Arguments);
Process.Start(startInfo);
}
}
}
private string GetUpdateLocation()
{
var location = new Uri(Assembly.GetEntryAssembly().GetName().CodeBase);
return new FileInfo(HttpUtility.UrlDecode(location.AbsolutePath)).DirectoryName;
}
}
}

View File

@@ -13,8 +13,8 @@ namespace Jackett.Updater
public string Path { get; set; }
[Option('t', "Type", HelpText = "Install type")]
public string Type { get; set; }
public string Type { get; set; }
[Option('a', "Args", HelpText = "Launch arguments")]
public string Args { get; set; }

View File

@@ -66,9 +66,9 @@ Global
GlobalSection(MonoDevelopProperties) = preSolution
Policies = $0
$0.TextStylePolicy = $1
$1.inheritsSet = VisualStudio
$1.inheritsScope = text/plain
$1.scope = text/x-csharp
$1.TabsToSpaces = True
$1.EolMarker = Unix
$0.CSharpFormattingPolicy = $2
$2.IndentSwitchBody = True
$2.IndentBlocksInsideExpressions = True
@@ -94,8 +94,27 @@ Global
$2.BeforeDelegateDeclarationParentheses = False
$2.NewParentheses = False
$2.SpacesBeforeBrackets = False
$2.inheritsSet = Mono
$2.inheritsScope = text/x-csharp
$2.scope = text/x-csharp
$2.IndentSwitchSection = True
$2.NewLinesForBracesInProperties = True
$2.NewLinesForBracesInAccessors = True
$2.NewLinesForBracesInAnonymousMethods = True
$2.NewLinesForBracesInControlBlocks = True
$2.NewLinesForBracesInAnonymousTypes = True
$2.NewLinesForBracesInObjectCollectionArrayInitializers = True
$2.NewLinesForBracesInLambdaExpressionBody = True
$2.NewLineForElse = True
$2.NewLineForCatch = True
$2.NewLineForFinally = True
$2.NewLineForMembersInObjectInit = True
$2.NewLineForMembersInAnonymousTypes = True
$2.NewLineForClausesInQuery = True
$2.SpacingAfterMethodDeclarationName = False
$2.SpaceAfterMethodCallName = False
$2.SpaceBeforeOpenSquareBracket = False
$0.TextStylePolicy = $3
$3.FileWidth = 80
$3.TabsToSpaces = True
$3.scope = text/plain
EndGlobalSection
EndGlobal

View File

@@ -0,0 +1 @@
span.multiselect-native-select{position:relative}span.multiselect-native-select select{border:0!important;clip:rect(0 0 0 0)!important;height:1px!important;margin:-1px -1px -1px -3px!important;overflow:hidden!important;padding:0!important;position:absolute!important;width:1px!important;left:50%;top:30px}.multiselect-container{position:absolute;list-style-type:none;margin:0;padding:0}.multiselect-container .input-group{margin:5px}.multiselect-container>li{padding:0}.multiselect-container>li>a.multiselect-all label{font-weight:700}.multiselect-container>li.multiselect-group label{margin:0;padding:3px 20px 3px 20px;height:100%;font-weight:700}.multiselect-container>li.multiselect-group-clickable label{cursor:pointer}.multiselect-container>li>a{padding:0}.multiselect-container>li>a>label{margin:0;height:100%;cursor:pointer;font-weight:400;padding:3px 20px 3px 40px}.multiselect-container>li>a>label.radio,.multiselect-container>li>a>label.checkbox{margin:0}.multiselect-container>li>a>label>input[type=checkbox]{margin-bottom:5px}.btn-group>.btn-group:nth-child(2)>.multiselect.btn{border-top-left-radius:4px;border-bottom-left-radius:4px}.form-inline .multiselect-container label.checkbox,.form-inline .multiselect-container label.radio{padding:3px 20px 3px 40px}.form-inline .multiselect-container li a label.checkbox input[type=checkbox],.form-inline .multiselect-container li a label.radio input[type=radio]{margin-left:-20px;margin-right:0}

View File

@@ -62,6 +62,10 @@ body {
height: 20px;
}
.setup-item-inputselect {
max-width: 255px;
}
[data-type=hiddendata]{
display: none;
}

File diff suppressed because it is too large Load Diff

View File

@@ -62,6 +62,10 @@ body {
height: 20px;
}
.setup-item-inputselect {
max-width: 255px;
}
[data-type=hiddendata]{
display: none;
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,89 @@
var api = {
version: "2.0",
root: "/api",
key: "",
getApiPath: function(category, action) {
var path = this.root + "/v" + this.version + "/" + category;
if (action !== undefined)
path = path + "/" + action
return path;
},
getAllIndexers: function(callback) {
return $.get(this.getApiPath("indexers"), callback);
},
getServerConfig: function(callback) {
return $.get(this.getApiPath("server", "config"), callback);
},
getIndexerConfig: function(indexerId, callback) {
return $.get(this.getApiPath("indexers", indexerId + "/config"), callback);
},
updateIndexerConfig: function(indexerId, config, callback) {
return $.ajax({
url: this.getApiPath("indexers", indexerId + "/config"),
type: 'POST',
data: JSON.stringify(config),
dataType: 'json',
contentType: 'application/json',
cache: false,
success: callback
});
},
deleteIndexer: function(indexerId, callback) {
return $.ajax({
url: this.getApiPath("indexers", indexerId),
type: 'DELETE',
cache: false,
success: callback
});
},
testIndexer: function(indexerId, callback) {
return $.post(this.getApiPath("indexers", indexerId + "/test"), callback);
},
resultsForIndexer: function(indexerId, query, callback) {
return $.get(this.getApiPath("indexers", indexerId + "/results?apikey=" + this.key), query, callback);
},
getServerCache: function(callback) {
return $.get(this.getApiPath("indexers", "cache"), callback);
},
getServerLogs: function(callback) {
return $.get(this.getApiPath("server", "logs"), callback);
},
updateServerConfig: function(serverConfig, callback) {
return $.ajax({
url: this.getApiPath("server", "config"),
type: 'POST',
data: JSON.stringify(serverConfig),
dataType: 'json',
contentType: 'application/json',
cache: false,
success: callback
});
},
updateServer: function(callback) {
return $.post(this.getApiPath("server", "update"), callback);
},
updateAdminPassword: function(password, callback) {
return $.ajax({
url: this.getApiPath("server", "adminpassword"),
type: 'POST',
data: JSON.stringify(password),
dataType: 'json',
contentType: 'application/json',
cache: false,
success: callback
});
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,6 @@
Handlebars.registerHelper('ifCond', function (v1, v2, options) {
if(v1 === v2) {
return options.fn(this);
}
return options.inverse(this);
});

View File

@@ -1,117 +0,0 @@
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<script src="jquery-2.1.3.min.js"></script>
<script src="common.js"></script>
<style>
#formItemTemplateContainer {
display: none;
}
</style>
<title></title>
</head>
<body>
<script>
$(function () {
var urlParams = getUrlParams();
var jqxhr = $.post("get_config_form", JSON.stringify({ indexer: urlParams.indexer }), function (data) {
populateForm(data.config);
})
.fail(function () {
alert("error");
});
$("#loginButton").click(function () {
var data = { indexer: urlParams.indexer, config: {} };
$("#formItems").children().each(function (i, item) {
var $item = $(item);
var type = $item.data("type");
var id = $item.data("id");
var $valEl = $item.find(".formItemValue").children().first();
switch (type) {
case "inputstring":
data.config[id] = $valEl.val();
break;
case "inputbool":
data.config[id] = $valEl.val();
break;
}
});
var jqxhr = $.post("configure_indexer", JSON.stringify(data), function (data) {
if (data.result == "error") {
if (data.config) {
populateForm(data.config);
}
alert(data.error);
}
})
.fail(function () {
alert("error");
});
});
});
function populateForm(data) {
$("#formItems").empty();
for (var i = 0; i < data.length; i++) {
$("#formItems").append(createFormItem(data[i]));
}
}
function createFormItem(itemData) {
var $template = $("#formItemTemplate").clone();
$template.attr("id", "item" + itemData.id);
$template.data("id", itemData.id);
$template.data("type", itemData.type);
$template.attr("data-type", itemData.type);
$template.data("value", itemData.value);
$template.find(".formItemName").text(itemData.name);
$valueElement = $template.find(".formItemValue");
switch (itemData.type) {
case "inputstring":
$valueElement.append($("<input type='text'></input>").val(itemData.value));
break;
case "inputbool":
$valueElement.append($("<input type='checkbox'></input>").prop("checked", itemData.value));
break;
case "displayimage":
$valueElement.append($("<img src='" + itemData.value + "'>"));
break;
case "displayinfo":
$valueElement.append($("<span></span>").text(itemData.value));
break;
}
return $template;
}
</script>
<div id="formItems">
</div>
<button id="loginButton">Login</button>
<div id="formItemTemplateContainer">
<div id="formItemTemplate">
<div class="formItemName"></div>
<div class="formItemValue"></div>
</div>
</div>
</body>
</html>

View File

@@ -1,595 +0,0 @@
using Autofac;
using AutoMapper;
using Jackett.Indexers;
using Jackett.Models;
using Jackett.Services;
using Jackett.Utils;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using NLog;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Security.Claims;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using System.Web;
using System.Web.Http;
using System.Web.Http.Results;
using System.Web.Security;
using System.Windows.Forms;
namespace Jackett.Controllers
{
[RoutePrefix("admin")]
[JackettAuthorized]
[JackettAPINoCache]
public class AdminController : ApiController
{
private IConfigurationService config;
private IIndexerManagerService indexerService;
private IServerService serverService;
private ISecuityService securityService;
private IProcessService processService;
private ICacheService cacheService;
private Logger logger;
private ILogCacheService logCache;
private IUpdateService updater;
public AdminController(IConfigurationService config, IIndexerManagerService i, IServerService ss, ISecuityService s, IProcessService p, ICacheService c, Logger l, ILogCacheService lc, IUpdateService u)
{
this.config = config;
indexerService = i;
serverService = ss;
securityService = s;
processService = p;
cacheService = c;
logger = l;
logCache = lc;
updater = u;
}
private async Task<JToken> ReadPostDataJson()
{
var content = await Request.Content.ReadAsStringAsync();
return JObject.Parse(content);
}
private HttpResponseMessage GetFile(string path)
{
var result = new HttpResponseMessage(HttpStatusCode.OK);
var mappedPath = Path.Combine(config.GetContentFolder(), path);
var stream = new FileStream(mappedPath, FileMode.Open, FileAccess.Read, FileShare.Read);
result.Content = new StreamContent(stream);
result.Content.Headers.ContentType = new MediaTypeHeaderValue(MimeMapping.GetMimeMapping(mappedPath));
return result;
}
[HttpGet]
[AllowAnonymous]
public RedirectResult Logout()
{
var ctx = Request.GetOwinContext();
var authManager = ctx.Authentication;
authManager.SignOut("ApplicationCookie");
return Redirect("Admin/Dashboard");
}
[HttpGet]
[HttpPost]
[AllowAnonymous]
public async Task<HttpResponseMessage> Dashboard()
{
if (Request.RequestUri.Query != null && Request.RequestUri.Query.Contains("logout"))
{
var file = GetFile("login.html");
securityService.Logout(file);
return file;
}
if (securityService.CheckAuthorised(Request))
{
return GetFile("index.html");
}
else
{
var formData = await Request.Content.ReadAsFormDataAsync();
if (formData != null && securityService.HashPassword(formData["password"]) == serverService.Config.AdminPassword)
{
var file = GetFile("index.html");
securityService.Login(file);
return file;
}
else
{
return GetFile("login.html");
}
}
}
[Route("set_admin_password")]
[HttpPost]
public async Task<IHttpActionResult> SetAdminPassword()
{
var jsonReply = new JObject();
try
{
var postData = await ReadPostDataJson();
var password = (string)postData["password"];
if (string.IsNullOrEmpty(password))
{
serverService.Config.AdminPassword = string.Empty;
}
else
{
serverService.Config.AdminPassword = securityService.HashPassword(password);
}
serverService.SaveConfig();
jsonReply["result"] = "success";
}
catch (Exception ex)
{
logger.Error(ex, "Exception in SetAdminPassword");
jsonReply["result"] = "error";
jsonReply["error"] = ex.Message;
}
return Json(jsonReply);
}
[Route("get_config_form")]
[HttpPost]
public async Task<IHttpActionResult> GetConfigForm()
{
var jsonReply = new JObject();
try
{
var postData = await ReadPostDataJson();
var indexer = indexerService.GetIndexer((string)postData["indexer"]);
var config = await indexer.GetConfigurationForSetup();
jsonReply["config"] = config.ToJson(null);
jsonReply["caps"] = indexer.TorznabCaps.CapsToJson();
jsonReply["name"] = indexer.DisplayName;
jsonReply["alternativesitelinks"] = JToken.FromObject(indexer.AlternativeSiteLinks);
jsonReply["result"] = "success";
}
catch (Exception ex)
{
logger.Error(ex, "Exception in GetConfigForm");
jsonReply["result"] = "error";
jsonReply["error"] = ex.Message;
}
return Json(jsonReply);
}
[Route("configure_indexer")]
[HttpPost]
public async Task<IHttpActionResult> Configure()
{
var jsonReply = new JObject();
IIndexer indexer = null;
try
{
var postData = await ReadPostDataJson();
string indexerString = (string)postData["indexer"];
indexer = indexerService.GetIndexer((string)postData["indexer"]);
jsonReply["name"] = indexer.DisplayName;
var configurationResult = await indexer.ApplyConfiguration(postData["config"]);
if (configurationResult == IndexerConfigurationStatus.RequiresTesting)
{
await indexerService.TestIndexer((string)postData["indexer"]);
}
else if (configurationResult == IndexerConfigurationStatus.Failed)
{
throw new Exception("Configuration Failed");
}
jsonReply["result"] = "success";
}
catch (Exception ex)
{
jsonReply["result"] = "error";
jsonReply["error"] = ex.Message;
var baseIndexer = indexer as BaseIndexer;
if (null != baseIndexer)
baseIndexer.ResetBaseConfig();
if (ex is ExceptionWithConfigData)
{
jsonReply["config"] = ((ExceptionWithConfigData)ex).ConfigData.ToJson(null,false);
}
else
{
logger.Error(ex, "Exception in Configure");
}
}
return Json(jsonReply);
}
[Route("get_indexers")]
[HttpGet]
public IHttpActionResult Indexers()
{
var jsonReply = new JObject();
try
{
jsonReply["result"] = "success";
JArray items = new JArray();
foreach (var indexer in indexerService.GetAllIndexers())
{
var item = new JObject();
item["id"] = indexer.ID;
item["name"] = indexer.DisplayName;
item["description"] = indexer.DisplayDescription;
item["type"] = indexer.Type;
item["configured"] = indexer.IsConfigured;
item["site_link"] = indexer.SiteLink;
item["language"] = indexer.Language;
item["last_error"] = indexer.LastError;
item["potatoenabled"] = indexer.TorznabCaps.Categories.Select(c => c.ID).Any(i => PotatoController.MOVIE_CATS.Contains(i));
var caps = new JObject();
foreach (var cap in indexer.TorznabCaps.Categories)
caps[cap.ID.ToString()] = cap.Name;
item["caps"] = caps;
items.Add(item);
}
jsonReply["items"] = items;
}
catch (Exception ex)
{
logger.Error(ex, "Exception in get_indexers");
jsonReply["result"] = "error";
jsonReply["error"] = ex.Message;
}
return Json(jsonReply);
}
[Route("test_indexer")]
[HttpPost]
public async Task<IHttpActionResult> Test()
{
JToken jsonReply = new JObject();
IIndexer indexer = null;
try
{
var postData = await ReadPostDataJson();
string indexerString = (string)postData["indexer"];
indexer = indexerService.GetIndexer(indexerString);
await indexerService.TestIndexer(indexerString);
jsonReply["name"] = indexer.DisplayName;
jsonReply["result"] = "success";
indexer.LastError = null;
}
catch (Exception ex)
{
var msg = ex.Message;
if (ex.InnerException != null)
msg += ": " + ex.InnerException.Message;
logger.Error(ex, "Exception in test_indexer");
jsonReply["result"] = "error";
jsonReply["error"] = msg;
if (indexer != null)
indexer.LastError = msg;
}
return Json(jsonReply);
}
[Route("delete_indexer")]
[HttpPost]
public async Task<IHttpActionResult> Delete()
{
var jsonReply = new JObject();
try
{
var postData = await ReadPostDataJson();
string indexerString = (string)postData["indexer"];
indexerService.DeleteIndexer(indexerString);
}
catch (Exception ex)
{
logger.Error(ex, "Exception in delete_indexer");
jsonReply["result"] = "error";
jsonReply["error"] = ex.Message;
}
return Json(jsonReply);
}
[Route("trigger_update")]
[HttpGet]
public IHttpActionResult TriggerUpdates()
{
var jsonReply = new JObject();
updater.CheckForUpdatesNow();
return Json(jsonReply);
}
[Route("get_jackett_config")]
[HttpGet]
public IHttpActionResult GetConfig()
{
var jsonReply = new JObject();
try
{
var cfg = new JObject();
cfg["notices"] = JToken.FromObject(serverService.notices);
cfg["port"] = serverService.Config.Port;
cfg["external"] = serverService.Config.AllowExternal;
cfg["api_key"] = serverService.Config.APIKey;
cfg["blackholedir"] = serverService.Config.BlackholeDir;
cfg["updatedisabled"] = serverService.Config.UpdateDisabled;
cfg["prerelease"] = serverService.Config.UpdatePrerelease;
cfg["password"] = string.IsNullOrEmpty(serverService.Config.AdminPassword) ? string.Empty : serverService.Config.AdminPassword.Substring(0, 10);
cfg["logging"] = Startup.TracingEnabled;
cfg["basepathoverride"] = serverService.Config.BasePathOverride;
jsonReply["config"] = cfg;
jsonReply["app_version"] = config.GetVersion();
jsonReply["result"] = "success";
}
catch (Exception ex)
{
logger.Error(ex, "Exception in get_jackett_config");
jsonReply["result"] = "error";
jsonReply["error"] = ex.Message;
}
return Json(jsonReply);
}
[Route("set_config")]
[HttpPost]
public async Task<IHttpActionResult> SetConfig()
{
var originalPort = Engine.Server.Config.Port;
var originalAllowExternal = Engine.Server.Config.AllowExternal;
var jsonReply = new JObject();
try
{
var postData = await ReadPostDataJson();
int port = (int)postData["port"];
bool external = (bool)postData["external"];
string saveDir = (string)postData["blackholedir"];
bool updateDisabled = (bool)postData["updatedisabled"];
bool preRelease = (bool)postData["prerelease"];
bool logging = (bool)postData["logging"];
string basePathOverride = (string)postData["basepathoverride"];
Engine.Server.Config.UpdateDisabled = updateDisabled;
Engine.Server.Config.UpdatePrerelease = preRelease;
Engine.Server.Config.BasePathOverride = basePathOverride;
Startup.BasePath = Engine.Server.BasePath();
Engine.Server.SaveConfig();
Engine.SetLogLevel(logging ? LogLevel.Debug : LogLevel.Info);
Startup.TracingEnabled = logging;
if (port != Engine.Server.Config.Port || external != Engine.Server.Config.AllowExternal)
{
if (ServerUtil.RestrictedPorts.Contains(port))
{
jsonReply["result"] = "error";
jsonReply["error"] = "The port you have selected is restricted, try a different one.";
return Json(jsonReply);
}
// Save port to the config so it can be picked up by the if needed when running as admin below.
Engine.Server.Config.AllowExternal = external;
Engine.Server.Config.Port = port;
Engine.Server.SaveConfig();
// On Windows change the url reservations
if (System.Environment.OSVersion.Platform != PlatformID.Unix)
{
if (!ServerUtil.IsUserAdministrator())
{
try
{
processService.StartProcessAndLog(Application.ExecutablePath, "--ReserveUrls", true);
}
catch
{
Engine.Server.Config.Port = originalPort;
Engine.Server.Config.AllowExternal = originalAllowExternal;
Engine.Server.SaveConfig();
jsonReply["result"] = "error";
jsonReply["error"] = "Failed to acquire admin permissions to reserve the new port.";
return Json(jsonReply);
}
}
else
{
serverService.ReserveUrls(true);
}
}
(new Thread(() =>
{
Thread.Sleep(500);
serverService.Stop();
Engine.BuildContainer();
Engine.Server.Initalize();
Engine.Server.Start();
})).Start();
}
if (saveDir != Engine.Server.Config.BlackholeDir)
{
if (!string.IsNullOrEmpty(saveDir))
{
if (!Directory.Exists(saveDir))
{
throw new Exception("Blackhole directory does not exist");
}
}
Engine.Server.Config.BlackholeDir = saveDir;
Engine.Server.SaveConfig();
}
jsonReply["result"] = "success";
jsonReply["port"] = port;
jsonReply["external"] = external;
}
catch (Exception ex)
{
logger.Error(ex, "Exception in set_port");
jsonReply["result"] = "error";
jsonReply["error"] = ex.Message;
}
return Json(jsonReply);
}
[Route("GetCache")]
[HttpGet]
public List<TrackerCacheResult> GetCache()
{
var results = cacheService.GetCachedResults();
ConfigureCacheResults(results);
return results;
}
private void ConfigureCacheResults(List<TrackerCacheResult> results)
{
var serverUrl = string.Format("{0}://{1}:{2}{3}", Request.RequestUri.Scheme, Request.RequestUri.Host, Request.RequestUri.Port, serverService.BasePath());
foreach (var result in results)
{
var link = result.Link;
result.Link = serverService.ConvertToProxyLink(link, serverUrl, result.TrackerId, "dl", result.Title + ".torrent");
if (result.Link != null && result.Link.Scheme != "magnet" && !string.IsNullOrWhiteSpace(Engine.Server.Config.BlackholeDir))
result.BlackholeLink = serverService.ConvertToProxyLink(link, serverUrl, result.TrackerId, "bh", string.Empty);
}
}
[Route("GetLogs")]
[HttpGet]
public List<CachedLog> GetLogs()
{
return logCache.Logs;
}
[Route("Search")]
[HttpPost]
public ManualSearchResult Search([FromBody]AdminSearch value)
{
var results = new List<TrackerCacheResult>();
var stringQuery = new TorznabQuery();
var queryStr = value.Query;
if (queryStr != null)
{
var seasonMatch = Regex.Match(queryStr, @"S(\d{2,4})");
if (seasonMatch.Success)
{
stringQuery.Season = int.Parse(seasonMatch.Groups[1].Value);
queryStr = queryStr.Remove(seasonMatch.Index, seasonMatch.Length);
}
var episodeMatch = Regex.Match(queryStr, @"E(\d{2,4})");
if (episodeMatch.Success)
{
stringQuery.Episode = episodeMatch.Groups[1].Value;
queryStr = queryStr.Remove(episodeMatch.Index, episodeMatch.Length);
}
queryStr = queryStr.Trim();
}
stringQuery.SearchTerm = queryStr;
stringQuery.Categories = value.Category == 0 ? new int[0] : new int[1] { value.Category };
stringQuery.ExpandCatsToSubCats();
// try to build an IMDB Query
var imdbID = ParseUtil.GetFullImdbID(stringQuery.SanitizedSearchTerm);
TorznabQuery imdbQuery = null;
if (imdbID != null)
{
imdbQuery = new TorznabQuery()
{
ImdbID = imdbID,
Categories = stringQuery.Categories,
Season = stringQuery.Season,
Episode = stringQuery.Episode,
};
imdbQuery.ExpandCatsToSubCats();
}
var trackers = indexerService.GetAllIndexers().Where(t => t.IsConfigured).ToList();
if (!string.IsNullOrWhiteSpace(value.Tracker))
{
trackers = trackers.Where(t => t.ID == value.Tracker).ToList();
}
if (value.Category != 0)
{
trackers = trackers.Where(t => t.TorznabCaps.Categories.Select(c => c.ID).Contains(value.Category)).ToList();
}
Parallel.ForEach(trackers.ToList(), new ParallelOptions { MaxDegreeOfParallelism = 1000 }, indexer =>
{
try
{
var query = stringQuery;
// use imdb Query for trackers which support it
if (imdbQuery != null && indexer.TorznabCaps.SupportsImdbSearch)
query = imdbQuery;
var searchResults = indexer.PerformQuery(query).Result;
searchResults = indexer.CleanLinks(searchResults);
cacheService.CacheRssResults(indexer, searchResults);
searchResults = indexer.FilterResults(query, searchResults);
foreach (var result in searchResults)
{
var item = Mapper.Map<TrackerCacheResult>(result);
item.Tracker = indexer.DisplayName;
item.TrackerId = indexer.ID;
item.Peers = item.Peers - item.Seeders; // Use peers as leechers
lock (results)
{
results.Add(item);
}
}
}
catch (Exception e)
{
logger.Error(e, "An error occured during manual search on " + indexer.DisplayName + ": " + e.Message);
}
});
ConfigureCacheResults(results);
if (trackers.Count > 1)
{
results = results.OrderByDescending(d => d.PublishDate).ToList();
}
var manualResult = new ManualSearchResult()
{
Results = results,
Indexers = trackers.Select(t => t.DisplayName).ToList()
};
if (manualResult.Indexers.Count == 0)
manualResult.Indexers = new List<string>() { "None" };
logger.Info(string.Format("Manual search for \"{0}\" on {1} with {2} results.", stringQuery.GetQueryString(), string.Join(", ", manualResult.Indexers), manualResult.Results.Count));
return manualResult;
}
}
}

View File

@@ -1,4 +1,5 @@
using Jackett.Services;
using Jackett.Utils;
using Newtonsoft.Json.Linq;
using NLog;
using System;
@@ -22,34 +23,36 @@ namespace Jackett.Controllers
private Logger logger;
private IIndexerManagerService indexerService;
IServerService serverService;
IProtectionService protectionService;
public BlackholeController(IIndexerManagerService i, Logger l, IServerService s)
public BlackholeController(IIndexerManagerService i, Logger l, IServerService s, IProtectionService ps)
{
logger = l;
indexerService = i;
serverService = s;
protectionService = ps;
}
[HttpGet]
public async Task<IHttpActionResult> Blackhole(string indexerID, string path, string apikey)
public async Task<IHttpActionResult> Blackhole(string indexerID, string path, string jackett_apikey, string file)
{
var jsonReply = new JObject();
try
{
var indexer = indexerService.GetIndexer(indexerID);
var indexer = indexerService.GetWebIndexer(indexerID);
if (!indexer.IsConfigured)
{
logger.Warn(string.Format("Rejected a request to {0} which is unconfigured.", indexer.DisplayName));
throw new Exception("This indexer is not configured.");
}
if (serverService.Config.APIKey != apikey)
if (serverService.Config.APIKey != jackett_apikey)
throw new Exception("Incorrect API key");
var remoteFile = new Uri(Encoding.UTF8.GetString(HttpServerUtility.UrlTokenDecode(path)), UriKind.RelativeOrAbsolute);
remoteFile = indexer.UncleanLink(remoteFile);
path = Encoding.UTF8.GetString(HttpServerUtility.UrlTokenDecode(path));
path = protectionService.UnProtect(path);
var remoteFile = new Uri(path, UriKind.RelativeOrAbsolute);
var downloadBytes = await indexer.Download(remoteFile);
if (string.IsNullOrWhiteSpace(Engine.Server.Config.BlackholeDir))
@@ -62,7 +65,12 @@ namespace Jackett.Controllers
throw new Exception("Blackhole directory does not exist: " + Engine.Server.Config.BlackholeDir);
}
var fileName = DateTime.Now.Ticks + ".torrent";
var fileName = DateTime.Now.Ticks.ToString() + "-" + StringUtil.MakeValidFileName(indexer.DisplayName, '_', false);
if (string.IsNullOrWhiteSpace(file))
fileName += ".torrent";
else
fileName += "-"+StringUtil.MakeValidFileName(file, '_', false); // call MakeValidFileName() again to avoid any possibility of path traversal attacks
File.WriteAllBytes(Path.Combine(Engine.Server.Config.BlackholeDir, fileName), downloadBytes);
jsonReply["result"] = "success";
}

View File

@@ -11,6 +11,7 @@ using System.Threading.Tasks;
using System.Web;
using System.Web.Http;
using MonoTorrent.BEncoding;
using Jackett.Utils;
namespace Jackett.Controllers
{
@@ -21,20 +22,22 @@ namespace Jackett.Controllers
Logger logger;
IIndexerManagerService indexerService;
IServerService serverService;
IProtectionService protectionService;
public DownloadController(IIndexerManagerService i, Logger l, IServerService s)
public DownloadController(IIndexerManagerService i, Logger l, IServerService s, IProtectionService ps)
{
logger = l;
indexerService = i;
serverService = s;
protectionService = ps;
}
[HttpGet]
public async Task<HttpResponseMessage> Download(string indexerID, string path, string apikey, string file)
public async Task<HttpResponseMessage> Download(string indexerID, string path, string jackett_apikey, string file)
{
try
{
var indexer = indexerService.GetIndexer(indexerID);
var indexer = indexerService.GetWebIndexer(indexerID);
if (!indexer.IsConfigured)
{
@@ -43,31 +46,24 @@ namespace Jackett.Controllers
}
path = Encoding.UTF8.GetString(HttpServerUtility.UrlTokenDecode(path));
path = protectionService.UnProtect(path);
if (serverService.Config.APIKey != apikey)
if (serverService.Config.APIKey != jackett_apikey)
return new HttpResponseMessage(HttpStatusCode.Unauthorized);
var target = new Uri(path, UriKind.RelativeOrAbsolute);
target = indexer.UncleanLink(target);
var downloadBytes = await indexer.Download(target);
// This will fix torrents where the keys are not sorted, and thereby not supported by Sonarr.
var torrentDictionary = BEncodedDictionary.DecodeTorrent(downloadBytes);
downloadBytes = torrentDictionary.Encode();
char[] invalidChars = System.IO.Path.GetInvalidFileNameChars();
for(int i=0;i<file.Count();i++)
if(invalidChars.Contains(file[i])) {
file = file.Remove(i, 1).Insert(i, " ");
}
var result = new HttpResponseMessage(HttpStatusCode.OK);
result.Content = new ByteArrayContent(downloadBytes);
result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/x-bittorrent");
result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
{
FileName = file
FileName = StringUtil.MakeValidFileName(file, '_', false) // call MakeValidFileName again to avoid any kind of injection attack
};
return result;
}

View File

@@ -0,0 +1,173 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Web.Http;
using System.Web.Http.Controllers;
using System.Web.Http.Filters;
using AutoMapper;
using Jackett.Indexers;
using Jackett.Models;
using Jackett.Services;
using Jackett.Utils;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using NLog;
namespace Jackett.Controllers.V20
{
public interface IIndexerController
{
IIndexerManagerService IndexerService { get; }
IIndexer CurrentIndexer { get; set; }
}
public class RequiresIndexerAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
base.OnActionExecuting(actionContext);
var controller = actionContext.ControllerContext.Controller;
if (!(controller is IIndexerController))
return;
var indexerController = controller as IIndexerController;
var parameters = actionContext.RequestContext.RouteData.Values;
if (!parameters.ContainsKey("indexerId"))
{
indexerController.CurrentIndexer = null;
return;
}
var indexerId = parameters["indexerId"] as string;
if (indexerId.IsNullOrEmptyOrWhitespace())
return;
var indexerService = indexerController.IndexerService;
var indexer = indexerService.GetIndexer(indexerId);
indexerController.CurrentIndexer = indexer;
}
}
[RoutePrefix("api/v2.0/indexers")]
[JackettAuthorized]
[JackettAPINoCache]
public class IndexerApiController : ApiController, IIndexerController
{
public IIndexerManagerService IndexerService { get; private set; }
public IIndexer CurrentIndexer { get; set; }
public IndexerApiController(IIndexerManagerService indexerManagerService, IServerService ss, ICacheService c, Logger logger)
{
IndexerService = indexerManagerService;
serverService = ss;
cacheService = c;
this.logger = logger;
}
[HttpGet]
[RequiresIndexer]
public async Task<IHttpActionResult> Config()
{
var config = await CurrentIndexer.GetConfigurationForSetup();
return Ok(config.ToJson(null));
}
[HttpPost]
[ActionName("Config")]
[RequiresIndexer]
public async Task UpdateConfig([FromBody]Models.DTO.ConfigItem[] config)
{
try
{
// HACK
var jsonString = JsonConvert.SerializeObject(config);
var json = JToken.Parse(jsonString);
var configurationResult = await CurrentIndexer.ApplyConfiguration(json);
if (configurationResult == IndexerConfigurationStatus.RequiresTesting)
await IndexerService.TestIndexer(CurrentIndexer.ID);
}
catch
{
var baseIndexer = CurrentIndexer as BaseIndexer;
if (null != baseIndexer)
baseIndexer.ResetBaseConfig();
throw;
}
}
[HttpGet]
[Route("")]
public IEnumerable<Models.DTO.Indexer> Indexers()
{
var dto = IndexerService.GetAllIndexers().Select(i => new Models.DTO.Indexer(i));
return dto;
}
[HttpPost]
[RequiresIndexer]
public async Task Test()
{
JToken jsonReply = new JObject();
try
{
await IndexerService.TestIndexer(CurrentIndexer.ID);
CurrentIndexer.LastError = null;
}
catch (Exception ex)
{
var msg = ex.Message;
if (ex.InnerException != null)
msg += ": " + ex.InnerException.Message;
if (CurrentIndexer != null)
CurrentIndexer.LastError = msg;
throw;
}
}
[HttpDelete]
[RequiresIndexer]
[Route("{indexerId}")]
public void Delete()
{
IndexerService.DeleteIndexer(CurrentIndexer.ID);
}
// TODO
// This should go to ServerConfigurationController
[Route("Cache")]
[HttpGet]
public List<TrackerCacheResult> Cache()
{
var results = cacheService.GetCachedResults();
ConfigureCacheResults(results);
return results;
}
private void ConfigureCacheResults(IEnumerable<TrackerCacheResult> results)
{
var serverUrl = serverService.GetServerUrl(Request);
foreach (var result in results)
{
var link = result.Link;
var file = StringUtil.MakeValidFileName(result.Title, '_', false) + ".torrent";
result.Link = serverService.ConvertToProxyLink(link, serverUrl, result.TrackerId, "dl", file);
if (result.Link != null && result.Link.Scheme != "magnet" && !string.IsNullOrWhiteSpace(Engine.Server.Config.BlackholeDir))
result.BlackholeLink = serverService.ConvertToProxyLink(link, serverUrl, result.TrackerId, "bh", file);
}
}
private Logger logger;
private IServerService serverService;
private ICacheService cacheService;
}
}

View File

@@ -1,173 +0,0 @@
using AutoMapper;
using Jackett.Models;
using Jackett.Services;
using Jackett.Utils;
using Jackett.Utils.Clients;
using Newtonsoft.Json.Linq;
using NLog;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using System.Web;
using System.Web.Http;
namespace Jackett.Controllers
{
[AllowAnonymous]
[JackettAPINoCache]
public class PotatoController : ApiController
{
private IIndexerManagerService indexerService;
private Logger logger;
private IServerService serverService;
private ICacheService cacheService;
private IWebClient webClient;
public static int[] MOVIE_CATS
{
get
{
var torznabQuery = new TorznabQuery()
{
Categories = new int[1] { TorznabCatType.Movies.ID },
};
torznabQuery.ExpandCatsToSubCats();
return torznabQuery.Categories;
}
}
public PotatoController(IIndexerManagerService i, Logger l, IServerService s, ICacheService c, IWebClient w)
{
indexerService = i;
logger = l;
serverService = s;
cacheService = c;
webClient = w;
}
[HttpGet]
public async Task<HttpResponseMessage> Call(string indexerID, [FromUri]TorrentPotatoRequest request)
{
var indexer = indexerService.GetIndexer(indexerID);
var allowBadApiDueToDebug = false;
#if DEBUG
allowBadApiDueToDebug = Debugger.IsAttached;
#endif
if (!allowBadApiDueToDebug && !string.Equals(request.passkey, serverService.Config.APIKey, StringComparison.InvariantCultureIgnoreCase))
{
logger.Warn(string.Format("A request from {0} was made with an incorrect API key.", Request.GetOwinContext().Request.RemoteIpAddress));
return Request.CreateResponse(HttpStatusCode.Forbidden, "Incorrect API key");
}
if (!indexer.IsConfigured)
{
logger.Warn(string.Format("Rejected a request to {0} which is unconfigured.", indexer.DisplayName));
return Request.CreateResponse(HttpStatusCode.Forbidden, "This indexer is not configured.");
}
if (!indexer.TorznabCaps.Categories.Select(c => c.ID).Any(i => MOVIE_CATS.Contains(i))){
logger.Warn(string.Format("Rejected a request to {0} which does not support searching for movies.", indexer.DisplayName));
return Request.CreateResponse(HttpStatusCode.Forbidden, "This indexer does not support movies.");
}
var year = 0;
if (string.IsNullOrWhiteSpace(request.search))
{
// We are searching by IMDB id so look up the name
var omdbapiRequest = new Utils.Clients.WebRequest("http://www.omdbapi.com/?type=movie&i=" + request.imdbid);
omdbapiRequest.Encoding = Encoding.UTF8;
var response = await webClient.GetString(omdbapiRequest);
if (response.Status == HttpStatusCode.OK)
{
JObject result = JObject.Parse(response.Content);
if (result["Title"] != null)
{
request.search = result["Title"].ToString();
year = ParseUtil.CoerceInt(result["Year"].ToString());
}
}
}
var torznabQuery = new TorznabQuery()
{
ApiKey = request.passkey,
Categories = MOVIE_CATS,
SearchTerm = request.search,
ImdbID = request.imdbid,
QueryType = "TorrentPotato"
};
IEnumerable<ReleaseInfo> releases = new List<ReleaseInfo>();
if (!string.IsNullOrWhiteSpace(torznabQuery.SanitizedSearchTerm))
{
releases = await indexer.PerformQuery(torznabQuery);
releases = indexer.CleanLinks(releases);
}
// Cache non query results
if (string.IsNullOrEmpty(torznabQuery.SanitizedSearchTerm))
{
cacheService.CacheRssResults(indexer, releases);
}
releases = indexer.FilterResults(torznabQuery, releases);
var serverUrl = string.Format("{0}://{1}:{2}{3}", Request.RequestUri.Scheme, Request.RequestUri.Host, Request.RequestUri.Port, serverService.BasePath());
var potatoResponse = new TorrentPotatoResponse();
releases = TorznabUtil.FilterResultsToTitle(releases, torznabQuery.SanitizedSearchTerm, year);
releases = TorznabUtil.FilterResultsToImdb(releases, request.imdbid);
foreach (var r in releases)
{
var release = Mapper.Map<ReleaseInfo>(r);
release.Link = serverService.ConvertToProxyLink(release.Link, serverUrl, indexerID, "dl", release.Title + ".torrent");
// Only accept torrent links, magnet is not supported
// This seems to be no longer the case, allowing magnet URIs for now
if (release.Link != null || release.MagnetUri != null)
{
potatoResponse.results.Add(new TorrentPotatoResponseItem()
{
release_name = release.Title + "[" + indexer.DisplayName + "]", // Suffix the indexer so we can see which tracker we are using in CPS as it just says torrentpotato >.>
torrent_id = release.Guid.ToString(),
details_url = release.Comments.ToString(),
download_url = (release.Link != null ? release.Link.ToString() : release.MagnetUri.ToString()),
imdb_id = release.Imdb.HasValue ? "tt" + release.Imdb : null,
freeleech = (release.DownloadVolumeFactor == 0 ? true : false),
type = "movie",
size = (long)release.Size / (1024 * 1024), // This is in MB
leechers = (int)release.Peers - (int)release.Seeders,
seeders = (int)release.Seeders,
publish_date = r.PublishDate == DateTime.MinValue ? null : release.PublishDate.ToUniversalTime().ToString("s")
});
}
}
// Log info
if (string.IsNullOrWhiteSpace(torznabQuery.SanitizedSearchTerm))
{
logger.Info(string.Format("Found {0} torrentpotato releases from {1}", releases.Count(), indexer.DisplayName));
}
else
{
logger.Info(string.Format("Found {0} torrentpotato releases from {1} for: {2}", releases.Count(), indexer.DisplayName, torznabQuery.GetQueryString()));
}
// Force the return as Json
return new HttpResponseMessage()
{
Content = new JsonContent(potatoResponse)
};
}
}
}

View File

@@ -0,0 +1,422 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Web;
using System.Web.Http;
using System.Web.Http.Controllers;
using System.Web.Http.Filters;
using System.Xml.Linq;
using Jackett.Indexers;
using Jackett.Models;
using Jackett.Services;
using Jackett.Utils;
using Jackett.Utils.Clients;
using Newtonsoft.Json;
using NLog;
using Jackett.Models.DTO;
namespace Jackett.Controllers.V20
{
public class RequiresApiKeyAttribute : AuthorizationFilterAttribute
{
public override void OnAuthorization(HttpActionContext actionContext)
{
var validApiKey = Engine.Server.Config.APIKey;
var queryParams = actionContext.Request.GetQueryNameValuePairs();
var queryApiKey = queryParams.Where(x => x.Key == "apikey" || x.Key == "passkey").Select(x => x.Value).FirstOrDefault();
#if DEBUG
if (Debugger.IsAttached)
return;
#endif
if (queryApiKey != validApiKey)
actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Unauthorized);
}
}
public class RequiresConfiguredIndexerAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
var controller = actionContext.ControllerContext.Controller;
if (!(controller is IIndexerController))
return;
var indexerController = controller as IIndexerController;
var parameters = actionContext.RequestContext.RouteData.Values;
if (!parameters.ContainsKey("indexerId"))
{
indexerController.CurrentIndexer = null;
actionContext.Response = actionContext.Request.CreateErrorResponse(HttpStatusCode.Unauthorized, "Invalid parameter");
return;
}
var indexerId = parameters["indexerId"] as string;
if (indexerId.IsNullOrEmptyOrWhitespace())
{
indexerController.CurrentIndexer = null;
actionContext.Response = actionContext.Request.CreateErrorResponse(HttpStatusCode.Unauthorized, "Invalid parameter");
return;
}
var indexerService = indexerController.IndexerService;
var indexer = indexerService.GetIndexer(indexerId);
if (indexer == null)
{
indexerController.CurrentIndexer = null;
actionContext.Response = actionContext.Request.CreateErrorResponse(HttpStatusCode.Unauthorized, "Invalid parameter");
return;
}
if (!indexer.IsConfigured)
{
indexerController.CurrentIndexer = null;
actionContext.Response = actionContext.Request.CreateErrorResponse(HttpStatusCode.Unauthorized, "Indexer is not configured");
return;
}
indexerController.CurrentIndexer = indexer;
}
}
public class RequiresValidQueryAttribute : RequiresConfiguredIndexerAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
base.OnActionExecuting(actionContext);
if (actionContext.Response != null)
return;
var controller = actionContext.ControllerContext.Controller;
if (!(controller is IResultController))
return;
var resultController = controller as IResultController;
var query = actionContext.ActionArguments.First().Value;
var queryType = query.GetType();
var converter = queryType.GetMethod("ToTorznabQuery", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public);
if (converter == null)
actionContext.Response = actionContext.Request.CreateErrorResponse(HttpStatusCode.BadRequest, "");
var converted = converter.Invoke(null, new object[] { query });
var torznabQuery = converted as TorznabQuery;
resultController.CurrentQuery = torznabQuery;
if (queryType == typeof(ApiSearch)) // Skip CanHandleQuery() check for manual search (CurrentIndexer isn't used during manul search)
return;
if (!resultController.CurrentIndexer.CanHandleQuery(resultController.CurrentQuery))
actionContext.Response = actionContext.Request.CreateErrorResponse(HttpStatusCode.BadRequest, $"{resultController.CurrentIndexer.ID} does not support the requested query.");
}
}
public class JsonResponseAttribute : ActionFilterAttribute
{
public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
{
base.OnActionExecuted(actionExecutedContext);
if (actionExecutedContext.Exception != null)
throw new Exception("Error while executing request", actionExecutedContext.Exception);
var content = actionExecutedContext.Response.Content as ObjectContent;
actionExecutedContext.Response.Content = new JsonContent(content.Value);
}
}
public interface IResultController : IIndexerController
{
TorznabQuery CurrentQuery { get; set; }
}
[AllowAnonymous]
[JackettAPINoCache]
[RoutePrefix("api/v2.0/indexers")]
[RequiresApiKey]
[RequiresValidQuery]
public class ResultsController : ApiController, IResultController
{
public IIndexerManagerService IndexerService { get; private set; }
public IIndexer CurrentIndexer { get; set; }
public TorznabQuery CurrentQuery { get; set; }
public ResultsController(IIndexerManagerService indexerManagerService, IServerService ss, ICacheService c, Logger logger)
{
IndexerService = indexerManagerService;
serverService = ss;
cacheService = c;
this.logger = logger;
}
[HttpGet]
public async Task<Models.DTO.ManualSearchResult> Results([FromUri]Models.DTO.ApiSearch request)
{
var manualResult = new ManualSearchResult();
var trackers = IndexerService.GetAllIndexers().Where(t => t.IsConfigured);
if (request.Tracker != null)
trackers = trackers.Where(t => request.Tracker.Contains(t.ID));
trackers = trackers.Where(t => t.CanHandleQuery(CurrentQuery));
var tasks = trackers.ToList().Select(t => t.ResultsForQuery(CurrentQuery)).ToList();
try
{
var aggregateTask = Task.WhenAll(tasks);
await aggregateTask;
}
catch (AggregateException aex)
{
foreach (var ex in aex.InnerExceptions)
{
logger.Error(ex);
}
}
catch (Exception ex)
{
logger.Error(ex);
}
manualResult.Indexers = tasks.Select(t =>
{
var resultIndexer = new ManualSearchResultIndexer();
IIndexer indexer = null;
if (t.Status == TaskStatus.RanToCompletion)
{
resultIndexer.Status = ManualSearchResultIndexerStatus.OK;
resultIndexer.Results = t.Result.Releases.Count();
resultIndexer.Error = null;
indexer = t.Result.Indexer;
}
else if (t.Exception.InnerException is IndexerException)
{
resultIndexer.Status = ManualSearchResultIndexerStatus.Error;
resultIndexer.Results = 0;
resultIndexer.Error = ((IndexerException)t.Exception.InnerException).ToString();
indexer = ((IndexerException)t.Exception.InnerException).Indexer;
}
else
{
resultIndexer.Status = ManualSearchResultIndexerStatus.Unknown;
resultIndexer.Results = 0;
resultIndexer.Error = null;
}
if (indexer != null)
{
resultIndexer.ID = indexer.ID;
resultIndexer.Name = indexer.DisplayName;
}
return resultIndexer;
}).ToList();
manualResult.Results = tasks.Where(t => t.Status == TaskStatus.RanToCompletion).Where(t => t.Result.Releases.Count() > 0).SelectMany(t =>
{
var searchResults = t.Result.Releases;
var indexer = t.Result.Indexer;
cacheService.CacheRssResults(indexer, searchResults);
return searchResults.Select(result =>
{
var item = AutoMapper.Mapper.Map<TrackerCacheResult>(result);
item.Tracker = indexer.DisplayName;
item.TrackerId = indexer.ID;
item.Peers = item.Peers - item.Seeders; // Use peers as leechers
return item;
});
}).OrderByDescending(d => d.PublishDate).ToList();
ConfigureCacheResults(manualResult.Results);
logger.Info(string.Format("Manual search for \"{0}\" on {1} with {2} results.", CurrentQuery.SanitizedSearchTerm, string.Join(", ", manualResult.Indexers.Select(i => i.ID)), manualResult.Results.Count()));
return manualResult;
}
[HttpGet]
public async Task<IHttpActionResult> Torznab([FromUri]Models.DTO.TorznabRequest request)
{
if (string.Equals(CurrentQuery.QueryType, "caps", StringComparison.InvariantCultureIgnoreCase))
{
return ResponseMessage(new HttpResponseMessage()
{
Content = new StringContent(CurrentIndexer.TorznabCaps.ToXml(), Encoding.UTF8, "application/xml")
});
}
if (CurrentQuery.ImdbID != null)
{
if (CurrentQuery.QueryType != "movie")
{
logger.Warn($"A non movie request with an imdbid was made from {Request.GetOwinContext().Request.RemoteIpAddress}.");
return GetErrorXML(201, "Incorrect parameter: only movie-search supports the imdbid parameter");
}
if (!string.IsNullOrEmpty(CurrentQuery.SearchTerm))
{
logger.Warn($"A movie-search request from {Request.GetOwinContext().Request.RemoteIpAddress} was made contining q and imdbid.");
return GetErrorXML(201, "Incorrect parameter: please specify either imdbid or q");
}
CurrentQuery.ImdbID = ParseUtil.GetFullImdbID(CurrentQuery.ImdbID); // normalize ImdbID
if (CurrentQuery.ImdbID == null)
{
logger.Warn($"A movie-search request from {Request.GetOwinContext().Request.RemoteIpAddress} was made with an invalid imdbid.");
return GetErrorXML(201, "Incorrect parameter: invalid imdbid format");
}
if (!CurrentIndexer.TorznabCaps.SupportsImdbSearch)
{
logger.Warn($"A movie-search request with imdbid from {Request.GetOwinContext().Request.RemoteIpAddress} was made but the indexer {CurrentIndexer.DisplayName} doesn't support it.");
return GetErrorXML(203, "Function Not Available: imdbid is not supported by this indexer");
}
}
var result = await CurrentIndexer.ResultsForQuery(CurrentQuery);
// Some trackers do not support multiple category filtering so filter the releases that match manually.
int? newItemCount = null;
// Cache non query results
if (string.IsNullOrEmpty(CurrentQuery.SanitizedSearchTerm))
{
newItemCount = cacheService.GetNewItemCount(CurrentIndexer, result.Releases);
cacheService.CacheRssResults(CurrentIndexer, result.Releases);
}
// Log info
var logBuilder = new StringBuilder();
if (newItemCount != null)
{
logBuilder.AppendFormat("Found {0} ({1} new) releases from {2}", result.Releases.Count(), newItemCount, CurrentIndexer.DisplayName);
}
else
{
logBuilder.AppendFormat("Found {0} releases from {1}", result.Releases.Count(), CurrentIndexer.DisplayName);
}
if (!string.IsNullOrWhiteSpace(CurrentQuery.SanitizedSearchTerm))
{
logBuilder.AppendFormat(" for: {0}", CurrentQuery.GetQueryString());
}
logger.Info(logBuilder.ToString());
var serverUrl = serverService.GetServerUrl(Request);
var resultPage = new ResultPage(new ChannelInfo
{
Title = CurrentIndexer.DisplayName,
Description = CurrentIndexer.DisplayDescription,
Link = new Uri(CurrentIndexer.SiteLink),
ImageUrl = new Uri(serverUrl + "logos/" + CurrentIndexer.ID + ".png"),
ImageTitle = CurrentIndexer.DisplayName,
ImageLink = new Uri(CurrentIndexer.SiteLink),
ImageDescription = CurrentIndexer.DisplayName
});
var proxiedReleases = result.Releases.Select(r => AutoMapper.Mapper.Map<ReleaseInfo>(r)).Select(r =>
{
r.Link = serverService.ConvertToProxyLink(r.Link, serverUrl, r.Origin.ID, "dl", r.Title + ".torrent");
return r;
});
resultPage.Releases = proxiedReleases.ToList();
var xml = resultPage.ToXml(new Uri(serverUrl));
// Force the return as XML
return ResponseMessage(new HttpResponseMessage()
{
Content = new StringContent(xml, Encoding.UTF8, "application/rss+xml")
});
}
public IHttpActionResult GetErrorXML(int code, string description)
{
var xdoc = new XDocument(
new XDeclaration("1.0", "UTF-8", null),
new XElement("error",
new XAttribute("code", code.ToString()),
new XAttribute("description", description)
)
);
var xml = xdoc.Declaration.ToString() + Environment.NewLine + xdoc.ToString();
return ResponseMessage(new HttpResponseMessage()
{
Content = new StringContent(xml, Encoding.UTF8, "application/xml")
});
}
[HttpGet]
[JsonResponse]
public async Task<Models.DTO.TorrentPotatoResponse> Potato([FromUri]Models.DTO.TorrentPotatoRequest request)
{
var result = await CurrentIndexer.ResultsForQuery(CurrentQuery);
// Cache non query results
if (string.IsNullOrEmpty(CurrentQuery.SanitizedSearchTerm))
cacheService.CacheRssResults(CurrentIndexer, result.Releases);
// Log info
if (string.IsNullOrWhiteSpace(CurrentQuery.SanitizedSearchTerm))
logger.Info($"Found {result.Releases.Count()} torrentpotato releases from {CurrentIndexer.DisplayName}");
else
logger.Info($"Found {result.Releases.Count()} torrentpotato releases from {CurrentIndexer.DisplayName} for: {CurrentQuery.GetQueryString()}");
var serverUrl = serverService.GetServerUrl(Request);
var potatoReleases = result.Releases.Where(r => r.Link != null || r.MagnetUri != null).Select(r =>
{
var release = AutoMapper.Mapper.Map<ReleaseInfo>(r);
release.Link = serverService.ConvertToProxyLink(release.Link, serverUrl, CurrentIndexer.ID, "dl", release.Title + ".torrent");
var item = new Models.DTO.TorrentPotatoResponseItem()
{
release_name = release.Title + "[" + CurrentIndexer.DisplayName + "]", // Suffix the indexer so we can see which tracker we are using in CPS as it just says torrentpotato >.>
torrent_id = release.Guid.ToString(),
details_url = release.Comments.ToString(),
download_url = (release.Link != null ? release.Link.ToString() : release.MagnetUri.ToString()),
imdb_id = release.Imdb.HasValue ? "tt" + release.Imdb : null,
freeleech = (release.DownloadVolumeFactor == 0 ? true : false),
type = "movie",
size = (long)release.Size / (1024 * 1024), // This is in MB
leechers = (int)release.Peers - (int)release.Seeders,
seeders = (int)release.Seeders,
publish_date = r.PublishDate == DateTime.MinValue ? null : release.PublishDate.ToUniversalTime().ToString("s")
};
return item;
});
var potatoResponse = new Models.DTO.TorrentPotatoResponse()
{
results = potatoReleases.ToList()
};
return potatoResponse;
}
private void ConfigureCacheResults(IEnumerable<TrackerCacheResult> results)
{
var serverUrl = serverService.GetServerUrl(Request);
foreach (var result in results)
{
var link = result.Link;
var file = StringUtil.MakeValidFileName(result.Title, '_', false) + ".torrent";
result.Link = serverService.ConvertToProxyLink(link, serverUrl, result.TrackerId, "dl", file);
if (result.Link != null && result.Link.Scheme != "magnet" && !string.IsNullOrWhiteSpace(Engine.Server.Config.BlackholeDir))
result.BlackholeLink = serverService.ConvertToProxyLink(link, serverUrl, result.TrackerId, "bh", file);
}
}
private Logger logger;
private IServerService serverService;
private ICacheService cacheService;
}
}

View File

@@ -0,0 +1,176 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading;
using System.Web.Http;
using Jackett.Models;
using Jackett.Services;
using Jackett.Utils;
using NLog;
namespace Jackett.Controllers.V20
{
[RoutePrefix("api/v2.0/server")]
[JackettAuthorized]
[JackettAPINoCache]
public class ServerConfigurationController : ApiController
{
public ServerConfigurationController(IConfigurationService c, IServerService s, IProcessService p, IIndexerManagerService i, ISecuityService ss, IUpdateService u, ILogCacheService lc, Logger l)
{
config = c;
serverService = s;
processService = p;
indexerService = i;
securityService = ss;
updater = u;
logCache = lc;
logger = l;
}
[HttpPost]
public void AdminPassword([FromBody]string password)
{
var oldPassword = serverService.Config.AdminPassword;
if (string.IsNullOrEmpty(password))
password = string.Empty;
if (oldPassword != password)
{
serverService.Config.AdminPassword = securityService.HashPassword(password);
serverService.SaveConfig();
}
}
[HttpPost]
public void Update()
{
updater.CheckForUpdatesNow();
}
[HttpGet]
public Models.DTO.ServerConfig Config()
{
var dto = new Models.DTO.ServerConfig(serverService.notices, serverService.Config, config.GetVersion());
return dto;
}
[ActionName("Config")]
[HttpPost]
public void UpdateConfig([FromBody]Models.DTO.ServerConfig config)
{
var originalPort = Engine.Server.Config.Port;
var originalAllowExternal = Engine.Server.Config.AllowExternal;
int port = config.port;
bool external = config.external;
string saveDir = config.blackholedir;
bool updateDisabled = config.updatedisabled;
bool preRelease = config.prerelease;
bool logging = config.logging;
string basePathOverride = config.basepathoverride;
if (basePathOverride != null)
{
basePathOverride = basePathOverride.TrimEnd('/');
if (!string.IsNullOrWhiteSpace(basePathOverride) && !basePathOverride.StartsWith("/"))
throw new Exception("The Base Path Override must start with a /");
}
string omdbApiKey = config.omdbkey;
Engine.Server.Config.UpdateDisabled = updateDisabled;
Engine.Server.Config.UpdatePrerelease = preRelease;
Engine.Server.Config.BasePathOverride = basePathOverride;
Startup.BasePath = Engine.Server.BasePath();
Engine.Server.SaveConfig();
Engine.SetLogLevel(logging ? LogLevel.Debug : LogLevel.Info);
Startup.TracingEnabled = logging;
if (omdbApiKey != Engine.Server.Config.OmdbApiKey)
{
Engine.Server.Config.OmdbApiKey = omdbApiKey;
Engine.Server.SaveConfig();
// HACK
indexerService.InitAggregateIndexer();
}
if (port != Engine.Server.Config.Port || external != Engine.Server.Config.AllowExternal)
{
if (ServerUtil.RestrictedPorts.Contains(port))
throw new Exception("The port you have selected is restricted, try a different one.");
if (port < 1 || port > 65535)
throw new Exception("The port you have selected is invalid, it must be below 65535.");
// Save port to the config so it can be picked up by the if needed when running as admin below.
Engine.Server.Config.AllowExternal = external;
Engine.Server.Config.Port = port;
Engine.Server.SaveConfig();
// On Windows change the url reservations
if (System.Environment.OSVersion.Platform != PlatformID.Unix)
{
if (!ServerUtil.IsUserAdministrator())
{
try
{
processService.StartProcessAndLog(System.Windows.Forms.Application.ExecutablePath, "--ReserveUrls", true);
}
catch
{
Engine.Server.Config.Port = originalPort;
Engine.Server.Config.AllowExternal = originalAllowExternal;
Engine.Server.SaveConfig();
throw new Exception("Failed to acquire admin permissions to reserve the new port.");
}
}
else
{
serverService.ReserveUrls(true);
}
}
(new Thread(() =>
{
Thread.Sleep(500);
serverService.Stop();
Engine.BuildContainer();
Engine.Server.Initalize();
Engine.Server.Start();
})).Start();
}
if (saveDir != Engine.Server.Config.BlackholeDir)
{
if (!string.IsNullOrEmpty(saveDir))
{
if (!Directory.Exists(saveDir))
{
throw new Exception("Blackhole directory does not exist");
}
}
Engine.Server.Config.BlackholeDir = saveDir;
Engine.Server.SaveConfig();
}
}
[HttpGet]
public List<CachedLog> Logs()
{
return logCache.Logs;
}
private IConfigurationService config;
private IServerService serverService;
private IProcessService processService;
private IIndexerManagerService indexerService;
private ISecuityService securityService;
private IUpdateService updater;
private ILogCacheService logCache;
private Logger logger;
}
}

View File

@@ -1,181 +0,0 @@
using AutoMapper;
using Jackett.Models;
using Jackett.Services;
using Jackett.Utils;
using NLog;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using System.Web;
using System.Web.Http;
using System.Xml.Linq;
namespace Jackett.Controllers
{
[AllowAnonymous]
[JackettAPINoCache]
public class TorznabController : ApiController
{
private IIndexerManagerService indexerService;
private Logger logger;
private IServerService serverService;
private ICacheService cacheService;
public TorznabController(IIndexerManagerService i, Logger l, IServerService s, ICacheService c)
{
indexerService = i;
logger = l;
serverService = s;
cacheService = c;
}
public HttpResponseMessage GetErrorXML(int code, string description)
{
var xdoc = new XDocument(
new XDeclaration("1.0", "UTF-8", null),
new XElement("error",
new XAttribute("code", code.ToString()),
new XAttribute("description", description)
)
);
var xml = xdoc.Declaration.ToString() + Environment.NewLine + xdoc.ToString();
return new HttpResponseMessage()
{
Content = new StringContent(xml, Encoding.UTF8, "application/xml")
};
}
[HttpGet]
public async Task<HttpResponseMessage> Call(string indexerID)
{
var indexer = indexerService.GetIndexer(indexerID);
var torznabQuery = TorznabQuery.FromHttpQuery(HttpUtility.ParseQueryString(Request.RequestUri.Query));
if (string.Equals(torznabQuery.QueryType, "caps", StringComparison.InvariantCultureIgnoreCase))
{
return new HttpResponseMessage()
{
Content = new StringContent(indexer.TorznabCaps.ToXml(), Encoding.UTF8, "application/xml")
};
}
torznabQuery.ExpandCatsToSubCats();
var allowBadApiDueToDebug = false;
#if DEBUG
allowBadApiDueToDebug = Debugger.IsAttached;
#endif
if (!allowBadApiDueToDebug && !string.Equals(torznabQuery.ApiKey, serverService.Config.APIKey, StringComparison.InvariantCultureIgnoreCase))
{
logger.Warn(string.Format("A request from {0} was made with an incorrect API key.", Request.GetOwinContext().Request.RemoteIpAddress));
return Request.CreateResponse(HttpStatusCode.Forbidden, "Incorrect API key");
}
if (!indexer.IsConfigured)
{
logger.Warn(string.Format("Rejected a request to {0} which is unconfigured.", indexer.DisplayName));
return Request.CreateResponse(HttpStatusCode.Forbidden, "This indexer is not configured.");
}
if (torznabQuery.ImdbID != null)
{
if (torznabQuery.QueryType != "movie")
{
logger.Warn(string.Format("A non movie request with an imdbid was made from {0}.", Request.GetOwinContext().Request.RemoteIpAddress));
return GetErrorXML(201, "Incorrect parameter: only movie-search supports the imdbid parameter");
}
if (!string.IsNullOrEmpty(torznabQuery.SearchTerm))
{
logger.Warn(string.Format("A movie-search request from {0} was made contining q and imdbid.", Request.GetOwinContext().Request.RemoteIpAddress));
return GetErrorXML(201, "Incorrect parameter: please specify either imdbid or q");
}
torznabQuery.ImdbID = ParseUtil.GetFullImdbID(torznabQuery.ImdbID); // normalize ImdbID
if (torznabQuery.ImdbID == null)
{
logger.Warn(string.Format("A movie-search request from {0} was made with an invalid imdbid.", Request.GetOwinContext().Request.RemoteIpAddress));
return GetErrorXML(201, "Incorrect parameter: invalid imdbid format");
}
if (!indexer.TorznabCaps.SupportsImdbSearch)
{
logger.Warn(string.Format("A movie-search request with imdbid from {0} was made but the indexer {1} doesn't support it.", Request.GetOwinContext().Request.RemoteIpAddress, indexer.DisplayName));
return GetErrorXML(203, "Function Not Available: imdbid is not supported by this indexer");
}
}
var releases = await indexer.PerformQuery(torznabQuery);
releases = indexer.CleanLinks(releases);
// Some trackers do not keep their clocks up to date and can be ~20 minutes out!
foreach (var release in releases)
{
if (release.PublishDate > DateTime.Now)
release.PublishDate = DateTime.Now;
}
// Some trackers do not support multiple category filtering so filter the releases that match manually.
var filteredReleases = releases = indexer.FilterResults(torznabQuery, releases);
int? newItemCount = null;
// Cache non query results
if (string.IsNullOrEmpty(torznabQuery.SanitizedSearchTerm))
{
newItemCount = cacheService.GetNewItemCount(indexer, filteredReleases);
cacheService.CacheRssResults(indexer, releases);
}
// Log info
var logBuilder = new StringBuilder();
if (newItemCount != null) {
logBuilder.AppendFormat(string.Format("Found {0} ({1} new) releases from {2}", releases.Count(), newItemCount, indexer.DisplayName));
}
else {
logBuilder.AppendFormat(string.Format("Found {0} releases from {1}", releases.Count(), indexer.DisplayName));
}
if (!string.IsNullOrWhiteSpace(torznabQuery.SanitizedSearchTerm)) {
logBuilder.AppendFormat(" for: {0}", torznabQuery.GetQueryString());
}
logger.Info(logBuilder.ToString());
var serverUrl = string.Format("{0}://{1}:{2}{3}", Request.RequestUri.Scheme, Request.RequestUri.Host, Request.RequestUri.Port, serverService.BasePath());
var resultPage = new ResultPage(new ChannelInfo
{
Title = indexer.DisplayName,
Description = indexer.DisplayDescription,
Link = new Uri(indexer.SiteLink),
ImageUrl = new Uri(serverUrl + "logos/" + indexer.ID + ".png"),
ImageTitle = indexer.DisplayName,
ImageLink = new Uri(indexer.SiteLink),
ImageDescription = indexer.DisplayName
});
foreach(var result in releases)
{
var clone = Mapper.Map<ReleaseInfo>(result);
clone.Link = serverService.ConvertToProxyLink(clone.Link, serverUrl, indexerID, "dl", result.Title + ".torrent");
resultPage.Releases.Add(clone);
}
var xml = resultPage.ToXml(new Uri(serverUrl));
// Force the return as XML
return new HttpResponseMessage()
{
Content = new StringContent(xml, Encoding.UTF8, "application/rss+xml")
};
}
}
}

View File

@@ -0,0 +1,89 @@
using System;
using System.IO;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;
using System.Web;
using System.Web.Http;
using Jackett.Services;
using Jackett.Utils;
using NLog;
namespace Jackett.Controllers
{
[RoutePrefix("UI")]
[JackettAuthorized]
[JackettAPINoCache]
public class WebUIController : ApiController
{
public WebUIController(IConfigurationService config, IServerService ss, ISecuityService s, Logger l)
{
this.config = config;
serverService = ss;
securityService = s;
logger = l;
}
private HttpResponseMessage GetFile(string path)
{
var result = new HttpResponseMessage(HttpStatusCode.OK);
var mappedPath = Path.Combine(config.GetContentFolder(), path);
var stream = new FileStream(mappedPath, FileMode.Open, FileAccess.Read, FileShare.Read);
result.Content = new StreamContent(stream);
result.Content.Headers.ContentType = new MediaTypeHeaderValue(MimeMapping.GetMimeMapping(mappedPath));
return result;
}
[HttpGet]
[AllowAnonymous]
public IHttpActionResult Logout()
{
var ctx = Request.GetOwinContext();
var authManager = ctx.Authentication;
authManager.SignOut("ApplicationCookie");
return Redirect("UI/Dashboard");
}
[HttpGet]
[HttpPost]
[AllowAnonymous]
public async Task<HttpResponseMessage> Dashboard()
{
if (Request.RequestUri.Query != null && Request.RequestUri.Query.Contains("logout"))
{
var file = GetFile("login.html");
securityService.Logout(file);
return file;
}
if (securityService.CheckAuthorised(Request))
{
return GetFile("index.html");
}
else
{
var formData = await Request.Content.ReadAsFormDataAsync();
if (formData != null && securityService.HashPassword(formData["password"]) == serverService.Config.AdminPassword)
{
var file = GetFile("index.html");
securityService.Login(file);
return file;
}
else
{
return GetFile("login.html");
}
}
}
private IConfigurationService config;
private IServerService serverService;
private ISecuityService securityService;
private Logger logger;
}
}

View File

@@ -92,16 +92,16 @@ namespace Jackett
easy.BufferSize = 64 * 1024;
easy.UserAgent = BrowserUtil.ChromeUserAgent;
easy.FollowLocation = false;
easy.ConnectTimeout = 20;
if(curlRequest.Headers != null)
{
CurlSlist curlHeaders = new CurlSlist();
foreach (var header in curlRequest.Headers)
{
curlHeaders.Append(header.Key + ": " + header.Value);
}
easy.SetOpt(CurlOption.HttpHeader, curlHeaders);
}
easy.ConnectTimeout = 20;
if(curlRequest.Headers != null)
{
CurlSlist curlHeaders = new CurlSlist();
foreach (var header in curlRequest.Headers)
{
curlHeaders.Append(header.Key + ": " + header.Value);
}
easy.SetOpt(CurlOption.HttpHeader, curlHeaders);
}
easy.WriteFunction = (byte[] buf, int size, int nmemb, object data) =>
{
@@ -151,8 +151,8 @@ namespace Jackett
{
easy.SetOpt(CurlOption.SslVerifyhost, false);
easy.SetOpt(CurlOption.SslVerifyPeer, false);
}
}
if (Startup.ProxyConnection != null)
{
easy.SetOpt(CurlOption.HttpProxyTunnel, 1);
@@ -173,14 +173,14 @@ namespace Jackett
var headerBytes = Combine(headerBuffers.ToArray());
var headerString = Encoding.UTF8.GetString(headerBytes);
if (Startup.ProxyConnection != null)
{
var firstcrlf = headerString.IndexOf("\r\n\r\n");
var secondcrlf = headerString.IndexOf("\r\n\r\n", firstcrlf + 1);
if (secondcrlf > 0)
{
headerString = headerString.Substring(firstcrlf + 4, secondcrlf - (firstcrlf));
}
if (Startup.ProxyConnection != null)
{
var firstcrlf = headerString.IndexOf("\r\n\r\n");
var secondcrlf = headerString.IndexOf("\r\n\r\n", firstcrlf + 1);
if (secondcrlf > 0)
{
headerString = headerString.Substring(firstcrlf + 4, secondcrlf - (firstcrlf));
}
}
var headerParts = headerString.Split(new char[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries);
var headers = new List<string[]>();
@@ -231,28 +231,28 @@ namespace Jackett
}
// add some debug output to track down the problem causing people getting InternalServerError results
if (status == HttpStatusCode.NotImplemented || status == HttpStatusCode.InternalServerError)
{
try
{
OnErrorMessage("got NotImplemented/InternalServerError");
OnErrorMessage("request.Method: " + curlRequest.Method);
OnErrorMessage("request.Url: " + curlRequest.Url);
OnErrorMessage("request.Cookies: " + curlRequest.Cookies);
OnErrorMessage("request.Referer: " + curlRequest.Referer);
OnErrorMessage("request.RawPOSTDdata: " + curlRequest.RawPOSTDdata);
OnErrorMessage("cookies: "+ cookieBuilder.ToString().Trim());
OnErrorMessage("headerString:\n" + headerString);
foreach (var headerPart in headerParts)
{
OnErrorMessage("headerParts: "+headerPart);
}
if (status == HttpStatusCode.NotImplemented || status == HttpStatusCode.InternalServerError)
{
try
{
OnErrorMessage("got NotImplemented/InternalServerError");
OnErrorMessage("request.Method: " + curlRequest.Method);
OnErrorMessage("request.Url: " + curlRequest.Url);
OnErrorMessage("request.Cookies: " + curlRequest.Cookies);
OnErrorMessage("request.Referer: " + curlRequest.Referer);
OnErrorMessage("request.RawPOSTDdata: " + curlRequest.RawPOSTDdata);
OnErrorMessage("cookies: "+ cookieBuilder.ToString().Trim());
OnErrorMessage("headerString:\n" + headerString);
foreach (var headerPart in headerParts)
{
OnErrorMessage("headerParts: "+headerPart);
}
}
catch (Exception ex)
{
OnErrorMessage(string.Format("CurlHelper: error while handling NotImplemented/InternalServerError:\n{0}", ex));
}
catch (Exception ex)
{
OnErrorMessage(string.Format("CurlHelper: error while handling NotImplemented/InternalServerError:\n{0}", ex));
}
}
var contentBytes = Combine(contentBuffers.ToArray());

View File

@@ -1,139 +1,142 @@
---
site: 2fast4you
name: 2 Fast 4 You
language: fr-fr
type: private
encoding: UTF-8
links:
- http://www.2f4y.me/
caps:
categorymappings:
- {id: 10, cat: TV/Anime, desc: "Animation: HD720P"}
- {id: 11, cat: TV/Anime, desc: "Animation: HD1080P"}
- {id: 56, cat: TV/Anime, desc: "Animation: DVDRip"}
- {id: 13, cat: TV/Anime, desc: "Animation: DVD"}
- {id: 18, cat: PC/0day, desc: "Applications: PC"}
- {id: 16, cat: PC/Games, desc: "Applications: Jeux"}
- {id: 19, cat: PC/Phone-Android, desc: "Applications: Android"}
- {id: 38, cat: PC/Phone-IOS, desc: "Applications: Mobile Phone"}
- {id: 17, cat: PC/0day, desc: "Applications: Autres"}
- {id: 67, cat: TV, desc: "Autres: Emission TV"}
- {id: 68, cat: TV/Sport, desc: "Autres: Sport"}
- {id: 40, cat: Other, desc: "Autres: Autres"}
- {id: 14, cat: TV/Documentary, desc: "Documentaires: DivX"}
- {id: 15, cat: TV/Documentary, desc: "Documentaires: HD"}
- {id: 76, cat: TV/Documentary, desc: "Documentaires: TVRip"}
- {id: 62, cat: Audio/Audiobook, desc: "E-Books: E-Books Audio"}
- {id: 50, cat: Books, desc: "E-Books: Manuel Français"}
- {id: 49, cat: Books, desc: "E-Books: Manuel Anglais"}
- {id: 36, cat: Books, desc: "E-Books: Livres Français"}
- {id: 53, cat: Books, desc: "E-Books: Livre Anglais"}
- {id: 52, cat: Books, desc: "E-Books: Revue - Journaux"}
- {id: 51, cat: Books, desc: "E-Books: BD"}
- {id: 66, cat: Movies, desc: "Films: VOSTFR"}
- {id: 71, cat: Movies/WEBDL, desc: "Films: WEB-DL"}
- {id: 65, cat: Movies, desc: "Films: VO"}
- {id: 72, cat: Movies/SD, desc: "Films: TVRip/HDTV"}
- {id: 70, cat: Movies/HD, desc: "Films: MHD X265"}
- {id: 57, cat: Movies/SD, desc: "Films: TS/CAM"}
- {id: 59, cat: Movies, desc: "Films: Spectacle"}
- {id: 55, cat: Movies/HD, desc: "Films: MHD 720P"}
- {id: 54, cat: Movies/HD, desc: "Films: MHD 1080P"}
- {id: 1, cat: Movies/HD, desc: "Films: HD720P"}
- {id: 2, cat: Movies/HD, desc: "Films: HD1080P"}
- {id: 90, cat: Movies/HD, desc: "Films: HD X265"}
- {id: 92, cat: Movies/HD, desc: "Films: 4K"}
- {id: 69, cat: Movies/3D, desc: "Films: Film 3D"}
- {id: 3, cat: Movies/DVD, desc: "Films: DVDRIP"}
- {id: 4, cat: Movies/DVD, desc: "Films: DVD5"}
- {id: 5, cat: Movies/DVD, desc: "Films: DVD9"}
- {id: 91, cat: Movies/HD, desc: "Films: RemuX"}
- {id: 89, cat: Movies/HD, desc: "Films: BD/BR Rip"}
- {id: 88, cat: Movies/BluRay, desc: "Films: Full BD/BR"}
- {id: 77, cat: Other, desc: "GPS: Cartes"}
- {id: 78, cat: Other, desc: "GPS: Radars"}
- {id: 79, cat: TV/Anime, desc: "Mangas: HD"}
- {id: 80, cat: TV/Anime, desc: "Mangas: HD VO"}
- {id: 81, cat: TV/Anime, desc: "Mangas: HD VOSTFR"}
- {id: 82, cat: TV/Anime, desc: "Mangas: DVDRIP"}
- {id: 83, cat: TV/Anime, desc: "Mangas: DVDRIP VO"}
- {id: 84, cat: TV/Anime, desc: "Mangas: DVDRIP VOSTFR"}
- {id: 85, cat: TV/Anime, desc: "Mangas: Web-DL"}
- {id: 86, cat: TV/Anime, desc: "Mangas: TV-RIP"}
- {id: 75, cat: Audio, desc: "Musique: Concert TVRip"}
- {id: 25, cat: Audio/MP3, desc: "Musique: Single MP3"}
- {id: 24, cat: Audio/Lossless, desc: "Musique: Single Flac"}
- {id: 22, cat: Audio/MP3, desc: "Musique: Album MP3"}
- {id: 23, cat: Audio/Lossless, desc: "Musique: Album Flac"}
- {id: 64, cat: Audio, desc: "Musique: Mégamix Maison"}
- {id: 58, cat: Audio, desc: "Musique: Concert"}
- {id: 61, cat: TV, desc: "Serie TV: Episode VOSTFR"}
- {id: 63, cat: TV, desc: "Serie TV: Episode VO"}
- {id: 12, cat: TV/Anime, desc: "Serie TV: Animation"}
- {id: 74, cat: TV, desc: "Serie TV: TVRip"}
- {id: 73, cat: TV/WEB-DL, desc: "Serie TV: WEB-DL"}
- {id: 7, cat: TV, desc: "Serie TV: Episode FR"}
- {id: 6, cat: TV, desc: "Serie TV: Saison FR"}
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:
path: torrents-search.php
inputs:
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
search: "{{ .Query.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"]
title:
selector: a[href^="torrents-details.php?id="]
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(5)
seeders:
selector: td:nth-child(6)
leechers:
selector: td:nth-child(7)
downloadvolumefactor:
case:
img[title="freeleech"]: "0"
"*": "1"
uploadvolumefactor:
case:
---
site: 2fast4you
name: 2 Fast 4 You
language: fr-fr
type: private
encoding: UTF-8
links:
- http://www.2f4y.me/
caps:
categorymappings:
- {id: 10, cat: TV/Anime, desc: "Animation: HD720P"}
- {id: 11, cat: TV/Anime, desc: "Animation: HD1080P"}
- {id: 56, cat: TV/Anime, desc: "Animation: DVDRip"}
- {id: 13, cat: TV/Anime, desc: "Animation: DVD"}
- {id: 18, cat: PC/0day, desc: "Applications: PC"}
- {id: 16, cat: PC/Games, desc: "Applications: Jeux"}
- {id: 19, cat: PC/Phone-Android, desc: "Applications: Android"}
- {id: 38, cat: PC/Phone-IOS, desc: "Applications: Mobile Phone"}
- {id: 17, cat: PC/0day, desc: "Applications: Autres"}
- {id: 67, cat: TV, desc: "Autres: Emission TV"}
- {id: 68, cat: TV/Sport, desc: "Autres: Sport"}
- {id: 40, cat: Other, desc: "Autres: Autres"}
- {id: 14, cat: TV/Documentary, desc: "Documentaires: DivX"}
- {id: 15, cat: TV/Documentary, desc: "Documentaires: HD"}
- {id: 76, cat: TV/Documentary, desc: "Documentaires: TVRip"}
- {id: 62, cat: Audio/Audiobook, desc: "E-Books: E-Books Audio"}
- {id: 50, cat: Books, desc: "E-Books: Manuel Français"}
- {id: 49, cat: Books, desc: "E-Books: Manuel Anglais"}
- {id: 36, cat: Books, desc: "E-Books: Livres Français"}
- {id: 53, cat: Books, desc: "E-Books: Livre Anglais"}
- {id: 52, cat: Books, desc: "E-Books: Revue - Journaux"}
- {id: 51, cat: Books, desc: "E-Books: BD"}
- {id: 66, cat: Movies, desc: "Films: VOSTFR"}
- {id: 71, cat: Movies/WEBDL, desc: "Films: WEB-DL"}
- {id: 65, cat: Movies, desc: "Films: VO"}
- {id: 72, cat: Movies/SD, desc: "Films: TVRip/HDTV"}
- {id: 70, cat: Movies/HD, desc: "Films: MHD X265"}
- {id: 57, cat: Movies/SD, desc: "Films: TS/CAM"}
- {id: 59, cat: Movies, desc: "Films: Spectacle"}
- {id: 55, cat: Movies/HD, desc: "Films: MHD 720P"}
- {id: 54, cat: Movies/HD, desc: "Films: MHD 1080P"}
- {id: 1, cat: Movies/HD, desc: "Films: HD720P"}
- {id: 2, cat: Movies/HD, desc: "Films: HD1080P"}
- {id: 90, cat: Movies/HD, desc: "Films: HD X265"}
- {id: 92, cat: Movies/HD, desc: "Films: 4K"}
- {id: 69, cat: Movies/3D, desc: "Films: Film 3D"}
- {id: 3, cat: Movies/DVD, desc: "Films: DVDRIP"}
- {id: 4, cat: Movies/DVD, desc: "Films: DVD5"}
- {id: 5, cat: Movies/DVD, desc: "Films: DVD9"}
- {id: 91, cat: Movies/HD, desc: "Films: RemuX"}
- {id: 89, cat: Movies/HD, desc: "Films: BD/BR Rip"}
- {id: 88, cat: Movies/BluRay, desc: "Films: Full BD/BR"}
- {id: 77, cat: Other, desc: "GPS: Cartes"}
- {id: 78, cat: Other, desc: "GPS: Radars"}
- {id: 79, cat: TV/Anime, desc: "Mangas: HD"}
- {id: 80, cat: TV/Anime, desc: "Mangas: HD VO"}
- {id: 81, cat: TV/Anime, desc: "Mangas: HD VOSTFR"}
- {id: 82, cat: TV/Anime, desc: "Mangas: DVDRIP"}
- {id: 83, cat: TV/Anime, desc: "Mangas: DVDRIP VO"}
- {id: 84, cat: TV/Anime, desc: "Mangas: DVDRIP VOSTFR"}
- {id: 85, cat: TV/Anime, desc: "Mangas: Web-DL"}
- {id: 86, cat: TV/Anime, desc: "Mangas: TV-RIP"}
- {id: 75, cat: Audio, desc: "Musique: Concert TVRip"}
- {id: 25, cat: Audio/MP3, desc: "Musique: Single MP3"}
- {id: 24, cat: Audio/Lossless, desc: "Musique: Single Flac"}
- {id: 22, cat: Audio/MP3, desc: "Musique: Album MP3"}
- {id: 23, cat: Audio/Lossless, desc: "Musique: Album Flac"}
- {id: 64, cat: Audio, desc: "Musique: Mégamix Maison"}
- {id: 58, cat: Audio, desc: "Musique: Concert"}
- {id: 61, cat: TV, desc: "Serie TV: Episode VOSTFR"}
- {id: 63, cat: TV, desc: "Serie TV: Episode VO"}
- {id: 12, cat: TV/Anime, desc: "Serie TV: Animation"}
- {id: 74, cat: TV, desc: "Serie TV: TVRip"}
- {id: 73, cat: TV/WEB-DL, desc: "Serie TV: WEB-DL"}
- {id: 7, cat: TV, desc: "Serie TV: Episode FR"}
- {id: 6, cat: TV, desc: "Serie TV: Saison FR"}
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:
path: torrents-search.php
inputs:
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
search: "{{ .Query.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"]
title:
selector: a[href^="torrents-details.php?id="]
filters:
- name: replace
args: [" - (Nouveau!)", ""]
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(5)
seeders:
selector: td:nth-child(6)
leechers:
selector: td:nth-child(7)
downloadvolumefactor:
case:
img[title="freeleech"]: "0"
"*": "1"
uploadvolumefactor:
case:
"*": "1"

View File

@@ -1,102 +1,102 @@
---
site: 3dtorrents
name: 3D Torrents
description: "3D Movie tracker"
language: en-us
type: private
encoding: UTF-8
links:
- http://www.3dtorrents.org/
caps:
categorymappings:
- {id: 14, cat: Movies, desc: "Movies XviD"}
- {id: 34, cat: Movies, desc: "Movies UltraHD"}
- {id: 15, cat: Movies, desc: "Movies DVD-R"}
- {id: 11, cat: Movies, desc: "Movies 720p"}
- {id: 13, cat: Movies, desc: "Movies 1080p"}
- {id: 16, cat: Movies, desc: "Movies 3DTV"}
- {id: 17, cat: Movies, desc: "Movies Blu-ray"}
- {id: 27, cat: Movies, desc: "Movies BD25 Encode"}
- {id: 33, cat: Movies, desc: "Movies BD9 AVCHD"}
- {id: 22, cat: Movies, desc: "Movies 2D to 3D Conv"}
- {id: 32, cat: Movies, desc: "Bluray MKV Remux"}
- {id: 23, cat: Movies, desc: "Movies Evo 3D"}
- {id: 21, cat: PC, desc: "3D Software"}
- {id: 2, cat: Audio, desc: "Music"}
- {id: 28, cat: XXX, desc: "Adult 720p"}
- {id: 29, cat: XXX, desc: "Adult 1080p"}
- {id: 30, cat: XXX, desc: "Adult Blu-ray"}
- {id: 31, cat: Other, desc: "Misc"}
- {id: 19, cat: Audio, desc: "Audio Packs"}
modes:
search: [q]
login:
path: index.php?page=login&amp;returnto=index.php
method: form
form: form
inputs:
uid: "{{ .Config.username }}"
pwd: "{{ .Config.password }}"
captcha:
type: image
image: img.captcha
input: private_key
error:
- selector: span.errormsg
test:
path: index.php
download:
selector: a[href^="download.php?id="]
search:
path: index.php
inputs:
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
search: "{{ .Query.Keywords }}"
page: torrents
category: 0
3dformat: 0
active: 1
rows:
selector: table[cellspacing!="1"].lista > tbody > tr:has(a[href^="index.php?page=torrents&category="])
fields:
category:
selector: a[href^="index.php?page=torrents&category="]
attribute: href
filters:
- name: querystring
args: category
title:
remove: span
selector: td:nth-child(2)
download:
selector: a[href^="index.php?page=torrent-details&id="]
attribute: href
filters:
- name: replace
args: ["index.php?page=torrent-details&id=", "download.php?id="]
details:
selector: a[href^="index.php?page=torrent-details&id="]
attribute: href
size:
selector: td:nth-last-child(4)
seeders:
selector: td:nth-last-child(3)
# leechers:
# selector: td:nth-last-child(2)
date:
selector: td:nth-last-child(5)
filters:
- name: dateparse
args: "02/01/2006"
downloadvolumefactor:
case:
img[title^="You get 50% off download count on this torrent"]: "0.5"
"*": "1"
uploadvolumefactor:
case:
---
site: 3dtorrents
name: 3D Torrents
description: "3D Movie tracker"
language: en-us
type: private
encoding: UTF-8
links:
- http://www.3dtorrents.org/
caps:
categorymappings:
- {id: 14, cat: Movies, desc: "Movies XviD"}
- {id: 34, cat: Movies, desc: "Movies UltraHD"}
- {id: 15, cat: Movies, desc: "Movies DVD-R"}
- {id: 11, cat: Movies, desc: "Movies 720p"}
- {id: 13, cat: Movies, desc: "Movies 1080p"}
- {id: 16, cat: Movies, desc: "Movies 3DTV"}
- {id: 17, cat: Movies, desc: "Movies Blu-ray"}
- {id: 27, cat: Movies, desc: "Movies BD25 Encode"}
- {id: 33, cat: Movies, desc: "Movies BD9 AVCHD"}
- {id: 22, cat: Movies, desc: "Movies 2D to 3D Conv"}
- {id: 32, cat: Movies, desc: "Bluray MKV Remux"}
- {id: 23, cat: Movies, desc: "Movies Evo 3D"}
- {id: 21, cat: PC, desc: "3D Software"}
- {id: 2, cat: Audio, desc: "Music"}
- {id: 28, cat: XXX, desc: "Adult 720p"}
- {id: 29, cat: XXX, desc: "Adult 1080p"}
- {id: 30, cat: XXX, desc: "Adult Blu-ray"}
- {id: 31, cat: Other, desc: "Misc"}
- {id: 19, cat: Audio, desc: "Audio Packs"}
modes:
search: [q]
login:
path: index.php?page=login&amp;returnto=index.php
method: form
form: form
inputs:
uid: "{{ .Config.username }}"
pwd: "{{ .Config.password }}"
captcha:
type: image
image: img.captcha
input: private_key
error:
- selector: span.errormsg
test:
path: index.php
download:
selector: a[href^="download.php?id="]
search:
path: index.php
inputs:
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
search: "{{ .Query.Keywords }}"
page: torrents
category: 0
3dformat: 0
active: 1
rows:
selector: table[cellspacing!="1"].lista > tbody > tr:has(a[href^="index.php?page=torrents&category="])
fields:
category:
selector: a[href^="index.php?page=torrents&category="]
attribute: href
filters:
- name: querystring
args: category
title:
remove: span
selector: td:nth-child(2)
download:
selector: a[href^="index.php?page=torrent-details&id="]
attribute: href
filters:
- name: replace
args: ["index.php?page=torrent-details&id=", "download.php?id="]
details:
selector: a[href^="index.php?page=torrent-details&id="]
attribute: href
size:
selector: td:nth-last-child(4)
seeders:
selector: td:nth-last-child(3)
# leechers:
# selector: td:nth-last-child(2)
date:
selector: td:nth-last-child(5)
filters:
- name: dateparse
args: "02/01/2006"
downloadvolumefactor:
case:
img[title^="You get 50% off download count on this torrent"]: "0.5"
"*": "1"
uploadvolumefactor:
case:
"*": "1"

View File

@@ -0,0 +1,86 @@
---
site: anidex
name: Anidex
description: "Anidex is a torrent tracker and indexer, primarily for English fansub groups of anime"
language: en-us
encoding: UTF-8
type: public
links:
- https://anidex.info/
caps:
categorymappings:
- {id: 1, cat: TV/Anime, desc: "Anime - Sub"}
- {id: 2, cat: TV/Anime, desc: "Anime - Raw"}
- {id: 3, cat: TV/Anime, desc: "Anime - Dub"}
- {id: 4, cat: TV/Anime, desc: "LA - Sub"}
- {id: 5, cat: TV/Anime, desc: "LA - Raw"}
- {id: 6, cat: TV/Anime, desc: "Light Novel"}
- {id: 7, cat: TV/Anime, desc: "Manga - TLed"}
- {id: 8, cat: TV/Anime, desc: "Manga - Raw"}
- {id: 9, cat: TV/Anime, desc: "♫ - Lossy"}
- {id: 10, cat: TV/Anime, desc: "♫ - Lossless"}
- {id: 11, cat: TV/Anime, desc: "♫ - Video"}
- {id: 12, cat: TV/Anime, desc: "Games"}
- {id: 13, cat: TV/Anime, desc: "Applications"}
- {id: 14, cat: TV/Anime, desc: "Pictures"}
- {id: 15, cat: TV/Anime, desc: "Adult Video"}
- {id: 16, cat: TV/Anime, desc: "Other"}
modes:
search: [q]
tv-search: [q, season, ep]
settings:
- name: cat-id
type: text
label: Category Id
# no longer supported?
# - name: lang-id
# type: text
# label: Language Id
search:
path: "/"
inputs:
q: "{{ .Query.Keywords }}"
id: "{{ .Config.cat-id }}"
rows:
selector: div.table-responsive > table > tbody > tr
fields:
category:
selector: a[href^="/?id="]
attribute: href
filters:
- name: querystring
args: id
title:
selector: td:nth-child(3) > a.torrent > span.span-1440
details:
selector: td:nth-child(3) > a.torrent
attribute: href
download:
selector: td:nth-child(5) > a
attribute: href
magnet:
selector: a[href^="magnet:?"]
attribute: href
size:
selector: td:nth-child(7)
date:
selector: td:nth-child(8)
attribute: title
filters:
- name: replace
args: ["UTC", "+00:00"]
- name: dateparse
args: "2006-01-02 15:04:05 -07:00"
seeders:
selector: td:nth-child(9)
leechers:
selector: td:nth-child(10)
grabs:
selector: td:nth-child(11)
downloadvolumefactor:
text: "0"
uploadvolumefactor:
text: "1"

View File

@@ -0,0 +1,53 @@
---
site: aniRena
name: AniRena
language: en-us
type: public
encoding: UTF-8
links:
- https://www.anirena.com/
settings: []
caps:
categorymappings:
# Anime
- {id: 2, cat: TV/Anime, desc: "Anime"}
- {id: 9, cat: TV/Anime, desc: "Anime Music Videos"}
- {id: 10, cat: TV/Anime, desc: "Non-English"}
- {id: 1, cat: TV/Anime, desc: "Raw Animes"}
# Audio
- {id: 8, cat: Audio, desc: "Audio"}
# Literature
- {id: 7, cat: Books, desc: "Manga"}
# Software
- {id: 5, cat: PC/ISO, desc: "DVD/ISO"}
modes:
search: [q]
tv-search: [q, season, ep]
search:
path: "/"
inputs:
s: "{{ .Query.Keywords }}"
rows:
selector: table tbody tr
fields:
title:
selector: .torrents_small_info_data1 div
download:
selector: .torrents_small_info_data2 a[title="Download Torrent"]
attribute: href
magnet:
selector: .torrents_small_info_data2 a[title="Magnet Link"]
attribute: href
size:
selector: .torrents_small_size_data1
seeders:
selector: .torrents_small_seeders_data1 b big
leechers:
selector: .torrents_small_leechers_data1 b big
grabs:
selector: .torrents_small_downloads_data1

View File

@@ -1,124 +1,124 @@
---
site: aox
name: AOX
language: en-us
type: private
encoding: UTF-8
links:
- https://aox.to/
caps:
categorymappings:
# Japanese
- {id: 1, cat: Movies, desc: "jMovies"}
- {id: 2, cat: TV, desc: "TV Shows"}
- {id: 3, cat: TV/Other, desc: "Variety Shows"}
# Korean
- {id: 6, cat: Movies, desc: "kMovies"}
- {id: 4, cat: TV, desc: "TV Shows"}
- {id: 14, cat: TV/Other, desc: "Variety Shows"}
# Chinese
- {id: 8, cat: Movies, desc: "cMovies"}
- {id: 9, cat: TV, desc: "TV Shows"}
- {id: 13, cat: TV/Other, desc: "Variety Shows"}
# Adult
- {id: 13, cat: XXX, desc: "Adult"}
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: index.php?page=login
method: post
inputs:
uid: "{{ .Config.username }}"
pwd: "{{ .Config.password }}"
error:
- selector: body[onLoad^="makeAlert('"]
message:
selector: body[onLoad^="makeAlert('"]
attribute: onLoad
filters:
- name: replace
args: ["makeAlert('Error' , '", ""]
- name: replace
args: ["');", ""]
test:
path: index.php
download:
selector: a[href^="download.php?id="]
search:
path: index.php
inputs:
search: "{{ .Query.Keywords }}"
page: "torrents"
category: "{{range .Categories}}{{.}};{{end}}"
options: "0"
active: "0"
rows:
selector: table > tbody > tr > td > table.lista > tbody > tr:has(a[href^="index.php?page=torrent-details&id="])
fields:
download:
selector: a[href^="index.php?page=downloadcheck&id="]
attribute: href
title:
selector: a[onmouseover][href^="index.php?page=torrent-details&id="]
banner:
selector: a[onmouseover][href^="index.php?page=torrent-details&id="]
attribute: onmouseover
filters:
- name: regexp
args: "src=(.*?) "
category:
selector: a[href^="index.php?page=torrents&category="]
attribute: href
filters:
- name: querystring
args: category
details:
selector: a[onmouseover][href^="index.php?page=torrent-details&id="]
attribute: href
size:
selector: td:nth-child(12)
date:
selector: td:nth-child(7)
filters:
- name: append
args: " +01:00"
- name: dateparse
args: "02/01/2006 -07:00"
grabs:
selector: td:nth-child(10)
filters:
- name: replace
args: ["---", "0"]
seeders:
selector: td:nth-child(8)
leechers:
selector: td:nth-child(9)
downloadvolumefactor:
case:
img[alt="Full Star 100% Free"]: "0"
img[alt="Half Star 50% Free"]: "0.5"
img[alt="Empty Star 25% Free"]: "0.75"
"*": "1"
uploadvolumefactor:
case:
"*": "1"
description:
selector: td:nth-child(2)
remove: a
description|append:
selector: td:nth-child(3) > img
attribute: title
filters:
- name: prepend
args: "<br>Language: "
---
site: aox
name: AOX
language: en-us
type: private
encoding: UTF-8
links:
- https://aox.to/
caps:
categorymappings:
# Japanese
- {id: 1, cat: Movies, desc: "jMovies"}
- {id: 2, cat: TV, desc: "TV Shows"}
- {id: 3, cat: TV/Other, desc: "Variety Shows"}
# Korean
- {id: 6, cat: Movies, desc: "kMovies"}
- {id: 4, cat: TV, desc: "TV Shows"}
- {id: 14, cat: TV/Other, desc: "Variety Shows"}
# Chinese
- {id: 8, cat: Movies, desc: "cMovies"}
- {id: 9, cat: TV, desc: "TV Shows"}
- {id: 13, cat: TV/Other, desc: "Variety Shows"}
# Adult
- {id: 13, cat: XXX, desc: "Adult"}
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: index.php?page=login
method: post
inputs:
uid: "{{ .Config.username }}"
pwd: "{{ .Config.password }}"
error:
- selector: body[onLoad^="makeAlert('"]
message:
selector: body[onLoad^="makeAlert('"]
attribute: onLoad
filters:
- name: replace
args: ["makeAlert('Error' , '", ""]
- name: replace
args: ["');", ""]
test:
path: index.php
download:
selector: a[href^="download.php?id="]
search:
path: index.php
inputs:
search: "{{ .Query.Keywords }}"
page: "torrents"
category: "{{range .Categories}}{{.}};{{end}}"
options: "0"
active: "0"
rows:
selector: table > tbody > tr > td > table.lista > tbody > tr:has(a[href^="index.php?page=torrent-details&id="])
fields:
download:
selector: a[href^="index.php?page=downloadcheck&id="]
attribute: href
title:
selector: a[onmouseover][href^="index.php?page=torrent-details&id="]
banner:
selector: a[onmouseover][href^="index.php?page=torrent-details&id="]
attribute: onmouseover
filters:
- name: regexp
args: "src=(.*?) "
category:
selector: a[href^="index.php?page=torrents&category="]
attribute: href
filters:
- name: querystring
args: category
details:
selector: a[onmouseover][href^="index.php?page=torrent-details&id="]
attribute: href
size:
selector: td:nth-child(12)
date:
selector: td:nth-child(7)
filters:
- name: append
args: " +01:00"
- name: dateparse
args: "02/01/2006 -07:00"
grabs:
selector: td:nth-child(10)
filters:
- name: replace
args: ["---", "0"]
seeders:
selector: td:nth-child(8)
leechers:
selector: td:nth-child(9)
downloadvolumefactor:
case:
img[alt="Full Star 100% Free"]: "0"
img[alt="Half Star 50% Free"]: "0.5"
img[alt="Empty Star 25% Free"]: "0.75"
"*": "1"
uploadvolumefactor:
case:
"*": "1"
description:
selector: td:nth-child(2)
remove: a
description|append:
selector: td:nth-child(3) > img
attribute: title
filters:
- name: prepend
args: "<br>Language: "

View File

@@ -1,95 +1,95 @@
---
site: apollo
name: Apollo
description: "A music tracker"
language: en-us
type: private
encoding: UTF-8
links:
- https://apollo.rip
caps:
categorymappings:
- {id: 1, cat: Audio, desc: "Music"}
- {id: 2, cat: PC, desc: "Applications"}
- {id: 3, cat: Books, desc: "E-Books"}
- {id: 4, cat: Audio/Audiobook, desc: "Audiobooks"}
- {id: 5, cat: Movies, desc: "E-Learning Videos"}
- {id: 6, cat: TV, desc: "Comedy"}
- {id: 7, cat: Books/Comics, desc: "Comics"}
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: login.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
keeplogged: 1
login: "Log in"
error:
- selector: form#loginform > span.warning
test:
path: torrents.php
ratio:
path: torrents.php
selector: li#stats_ratio > span
search:
path: torrents.php
inputs:
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
searchstr: "{{ .Query.Keywords }}"
order_by: time
order_way: desc
action: basic
searchsubmit: 1
rows:
selector: table#torrent_table > tbody > tr.torrent
fields:
download:
selector: a[href^="torrents.php?action=download&id="]
attribute: href
description:
selector: div.group_info
remove: span
title:
selector: div.group_info
remove: span, div.tags
category:
selector: td.cats_col
case:
div.cats_music: 1
div.cats_applications: 2
div.cats_ebooks: 3
div.cats_audiobooks: 4
div.cats_elearningvideos: 5
div.cats_comedy: 6
div.cats_comics: 7
comments:
selector: a[href^="torrents.php?id="]
attribute: href
files:
selector: td:nth-child(3)
date:
selector: td:nth-child(4)
size:
selector: td:nth-child(5)
grabs:
selector: td:nth-child(6)
seeders:
selector: td:nth-child(7)
leechers:
selector: td:nth-child(8)
downloadvolumefactor:
case:
":root div.alertbar:contains(\"freeleech\")": "0"
":root div.alertbar:contains(\"FREELEECH\")": "0"
"*": "1"
uploadvolumefactor:
case:
---
site: apollo
name: Apollo
description: "A music tracker"
language: en-us
type: private
encoding: UTF-8
links:
- https://apollo.rip
caps:
categorymappings:
- {id: 1, cat: Audio, desc: "Music"}
- {id: 2, cat: PC, desc: "Applications"}
- {id: 3, cat: Books, desc: "E-Books"}
- {id: 4, cat: Audio/Audiobook, desc: "Audiobooks"}
- {id: 5, cat: Movies, desc: "E-Learning Videos"}
- {id: 6, cat: TV, desc: "Comedy"}
- {id: 7, cat: Books/Comics, desc: "Comics"}
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: login.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
keeplogged: 1
login: "Log in"
error:
- selector: form#loginform > span.warning
test:
path: torrents.php
ratio:
path: torrents.php
selector: li#stats_ratio > span
search:
path: torrents.php
inputs:
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
searchstr: "{{ .Query.Keywords }}"
order_by: time
order_way: desc
action: basic
searchsubmit: 1
rows:
selector: table#torrent_table > tbody > tr.torrent
fields:
download:
selector: a[href^="torrents.php?action=download&id="]
attribute: href
description:
selector: div.group_info
remove: span
title:
selector: div.group_info
remove: span, div.tags
category:
selector: td.cats_col
case:
div.cats_music: 1
div.cats_applications: 2
div.cats_ebooks: 3
div.cats_audiobooks: 4
div.cats_elearningvideos: 5
div.cats_comedy: 6
div.cats_comics: 7
comments:
selector: a[href^="torrents.php?id="]
attribute: href
files:
selector: td:nth-child(3)
date:
selector: td:nth-child(4)
size:
selector: td:nth-child(5)
grabs:
selector: td:nth-child(6)
seeders:
selector: td:nth-child(7)
leechers:
selector: td:nth-child(8)
downloadvolumefactor:
case:
":root div.alertbar:contains(\"freeleech\")": "0"
":root div.alertbar:contains(\"FREELEECH\")": "0"
"*": "1"
uploadvolumefactor:
case:
"*": "1"

View File

@@ -1,164 +1,164 @@
---
site: arabafenice
name: ArabaFenice
language: it-it
type: private
encoding: UTF-8
links:
- http://www.arabafenice.me/
caps:
categorymappings:
# HRS
- {id: 34, cat: Movies/HD, desc: "1080p HRS x264"}
- {id: 47, cat: Movies/HD, desc: "2160p 4k UltraHD HRS"}
- {id: 35, cat: TV, desc: "Serie TV HRS"}
- {id: 36, cat: Movies/SD, desc: "DVDRip HRS"}
- {id: 41, cat: Movies/SD, desc: "BDRip 576p HRS"}
- {id: 39, cat: Movies/HD, desc: "1080p HRS x265 HEVC"}
# VIDEO
- {id: 1, cat: Movies, desc: "News Cinema"}
- {id: 2, cat: Movies/SD, desc: "BD-DVDRip"}
- {id: 3, cat: Movies/DVD, desc: "DVD 5"}
- {id: 5, cat: Movies/DVD, desc: "DVD 9"}
- {id: 6, cat: Movies/BluRay, desc: "BluRay Full"}
- {id: 4, cat: Movies/HD, desc: "1080p 3D x264"}
- {id: 7, cat: Movies/HD, desc: "1080p x264"}
- {id: 46, cat: Movies/HD, desc: "1080p Video Untouch"}
- {id: 44, cat: Movies/HD, desc: "1080p x265"}
- {id: 9, cat: TV/Anime, desc: "Cartoons"}
- {id: 8, cat: TV/Anime, desc: "720p x264"}
- {id: 12, cat: TV, desc: "He concluded seasons"}
- {id: 13, cat: TV, desc: "Seasons in Onda"}
- {id: 14, cat: TV, desc: "TV Show"}
- {id: 42, cat: TV, desc: "Serie Tv Sub Ita"}
- {id: 15, cat: TV/Documentary, desc: "documentaries"}
- {id: 33, cat: TV, desc: "mp4"}
- {id: 40, cat: TV/HD, desc: "2160p 4K UltraHD"}
- {id: 38, cat: XXX, desc: "xXx"}
- {id: 43, cat: Other, desc: "Arabic for social"}
# MUSICA
- {id: 17, cat: Audio, desc: "Italian music"}
- {id: 45, cat: Audio, desc: "Discography"}
- {id: 18, cat: Audio, desc: "MusicaInternazionale"}
- {id: 19, cat: Audio, desc: "Compilation"}
# PDF
- {id: 21, cat: Books, desc: "Ebook"}
- {id: 22, cat: Books/Comics, desc: "Comics"}
- {id: 23, cat: Books, desc: "Newsstand"}
# GAMES
- {id: 25, cat: Console/PS4, desc: "Sony Games"}
- {id: 26, cat: Console/Xbox, desc: "XboX Games"}
- {id: 27, cat: Console/Other, desc: "Nintendo Games"}
- {id: 28, cat: PC/Games, desc: "PC Games"}
# SOFTWARE
- {id: 30, cat: PC/ISO, desc: "Windows APP"}
- {id: 31, cat: PC/Phone-IOS, desc: "Apple APP"}
- {id: 32, cat: PC/Phone-Android, desc: "Android APP"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid]
movie-search: [q, imdbid]
login:
path: index.php?page=login
method: post
inputs:
uid: "{{ .Config.username }}"
pwd: "{{ .Config.password }}"
error:
- selector: body[onLoad^="makeAlert('"]
message:
selector: body[onLoad^="makeAlert('"]
attribute: onLoad
filters:
- name: replace
args: ["makeAlert('Error' , '", ""]
- name: replace
args: ["');", ""]
test:
path: index.php
download:
before:
path: "thanks.php"
method: "post"
inputs:
infohash: "{{ .DownloadUri.Query.id }}"
thanks: "1"
rndval: "1487013827343"
selector: a[href^="download.php?id="]
search:
path: index.php
inputs:
search: "{{if .Query.IMDBID}}{{ .Query.IMDBIDShort }}{{else}}{{ .Keywords }}{{end}}"
page: "torrents"
category: "{{range .Categories}}{{.}};{{end}}"
options: "{{ if .Query.IMDBID }}4{{else}}0{{end}}"
active: "0"
rows:
selector: table > tbody > tr > td > table.lista > tbody > tr:has(a[href^="index.php?page=torrent-details&id="])
fields:
download:
selector: a[href^="index.php?page=downloadcheck&id="]
attribute: href
title:
selector: a[onmouseover][href^="index.php?page=torrent-details&id="]
banner:
selector: a[onmouseover][href^="index.php?page=torrent-details&id="]
attribute: onmouseover
filters:
- name: regexp
args: "src=(.*?) "
category:
selector: a[href^="index.php?page=torrents&category="]
attribute: href
filters:
- name: querystring
args: category
details:
selector: a[onmouseover][href^="index.php?page=torrent-details&id="]
attribute: href
size:
selector: td:nth-last-child(4)
date:
selector: td:nth-last-child(9)
filters:
- name: append
args: " +01:00"
- name: dateparse
args: "02/01/2006 -07:00"
grabs:
selector: td:nth-last-child(6)
filters:
- name: replace
args: ["---", "0"]
seeders:
selector: td:nth-last-child(8)
leechers:
selector: td:nth-last-child(7)
downloadvolumefactor:
case:
img[alt="Gold 100% Free"]: "0"
img[alt="Silver 50% Free"]: "0.5"
img[alt="Bronze 25% Free"]: "0.75"
"*": "1"
uploadvolumefactor:
case:
img[alt="2x Upload Multiplier"]: "2"
img[alt="3x Upload Multiplier"]: "3"
img[alt="4x Upload Multiplier"]: "4"
img[alt="5x Upload Multiplier"]: "5"
img[alt="6x Upload Multiplier"]: "6"
img[alt="7x Upload Multiplier"]: "7"
img[alt="8x Upload Multiplier"]: "8"
img[alt="9x Upload Multiplier"]: "9"
img[alt="10x Upload Multiplier"]: "10"
"*": "1"
---
site: arabafenice
name: ArabaFenice
language: it-it
type: private
encoding: UTF-8
links:
- http://www.arabafenice.me/
caps:
categorymappings:
# HRS
- {id: 34, cat: Movies/HD, desc: "1080p HRS x264"}
- {id: 47, cat: Movies/HD, desc: "2160p 4k UltraHD HRS"}
- {id: 35, cat: TV, desc: "Serie TV HRS"}
- {id: 36, cat: Movies/SD, desc: "DVDRip HRS"}
- {id: 41, cat: Movies/SD, desc: "BDRip 576p HRS"}
- {id: 39, cat: Movies/HD, desc: "1080p HRS x265 HEVC"}
# VIDEO
- {id: 1, cat: Movies, desc: "News Cinema"}
- {id: 2, cat: Movies/SD, desc: "BD-DVDRip"}
- {id: 3, cat: Movies/DVD, desc: "DVD 5"}
- {id: 5, cat: Movies/DVD, desc: "DVD 9"}
- {id: 6, cat: Movies/BluRay, desc: "BluRay Full"}
- {id: 4, cat: Movies/HD, desc: "1080p 3D x264"}
- {id: 7, cat: Movies/HD, desc: "1080p x264"}
- {id: 46, cat: Movies/HD, desc: "1080p Video Untouch"}
- {id: 44, cat: Movies/HD, desc: "1080p x265"}
- {id: 9, cat: TV/Anime, desc: "Cartoons"}
- {id: 8, cat: TV/Anime, desc: "720p x264"}
- {id: 12, cat: TV, desc: "He concluded seasons"}
- {id: 13, cat: TV, desc: "Seasons in Onda"}
- {id: 14, cat: TV, desc: "TV Show"}
- {id: 42, cat: TV, desc: "Serie Tv Sub Ita"}
- {id: 15, cat: TV/Documentary, desc: "documentaries"}
- {id: 33, cat: TV, desc: "mp4"}
- {id: 40, cat: TV/HD, desc: "2160p 4K UltraHD"}
- {id: 38, cat: XXX, desc: "xXx"}
- {id: 43, cat: Other, desc: "Arabic for social"}
# MUSICA
- {id: 17, cat: Audio, desc: "Italian music"}
- {id: 45, cat: Audio, desc: "Discography"}
- {id: 18, cat: Audio, desc: "MusicaInternazionale"}
- {id: 19, cat: Audio, desc: "Compilation"}
# PDF
- {id: 21, cat: Books, desc: "Ebook"}
- {id: 22, cat: Books/Comics, desc: "Comics"}
- {id: 23, cat: Books, desc: "Newsstand"}
# GAMES
- {id: 25, cat: Console/PS4, desc: "Sony Games"}
- {id: 26, cat: Console/Xbox, desc: "XboX Games"}
- {id: 27, cat: Console/Other, desc: "Nintendo Games"}
- {id: 28, cat: PC/Games, desc: "PC Games"}
# SOFTWARE
- {id: 30, cat: PC/ISO, desc: "Windows APP"}
- {id: 31, cat: PC/Phone-IOS, desc: "Apple APP"}
- {id: 32, cat: PC/Phone-Android, desc: "Android APP"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid]
movie-search: [q, imdbid]
login:
path: index.php?page=login
method: post
inputs:
uid: "{{ .Config.username }}"
pwd: "{{ .Config.password }}"
error:
- selector: body[onLoad^="makeAlert('"]
message:
selector: body[onLoad^="makeAlert('"]
attribute: onLoad
filters:
- name: replace
args: ["makeAlert('Error' , '", ""]
- name: replace
args: ["');", ""]
test:
path: index.php
download:
before:
path: "thanks.php"
method: "post"
inputs:
infohash: "{{ .DownloadUri.Query.id }}"
thanks: "1"
rndval: "1487013827343"
selector: a[href^="download.php?id="]
search:
path: index.php
inputs:
search: "{{if .Query.IMDBID}}{{ .Query.IMDBIDShort }}{{else}}{{ .Keywords }}{{end}}"
page: "torrents"
category: "{{range .Categories}}{{.}};{{end}}"
options: "{{ if .Query.IMDBID }}4{{else}}0{{end}}"
active: "0"
rows:
selector: table > tbody > tr > td > table.lista > tbody > tr:has(a[href^="index.php?page=torrent-details&id="])
fields:
download:
selector: a[href^="index.php?page=downloadcheck&id="]
attribute: href
title:
selector: a[onmouseover][href^="index.php?page=torrent-details&id="]
banner:
selector: a[onmouseover][href^="index.php?page=torrent-details&id="]
attribute: onmouseover
filters:
- name: regexp
args: "src=(.*?) "
category:
selector: a[href^="index.php?page=torrents&category="]
attribute: href
filters:
- name: querystring
args: category
details:
selector: a[onmouseover][href^="index.php?page=torrent-details&id="]
attribute: href
size:
selector: td:nth-last-child(4)
date:
selector: td:nth-last-child(9)
filters:
- name: append
args: " +01:00"
- name: dateparse
args: "02/01/2006 -07:00"
grabs:
selector: td:nth-last-child(6)
filters:
- name: replace
args: ["---", "0"]
seeders:
selector: td:nth-last-child(8)
leechers:
selector: td:nth-last-child(7)
downloadvolumefactor:
case:
img[alt="Gold 100% Free"]: "0"
img[alt="Silver 50% Free"]: "0.5"
img[alt="Bronze 25% Free"]: "0.75"
"*": "1"
uploadvolumefactor:
case:
img[alt="2x Upload Multiplier"]: "2"
img[alt="3x Upload Multiplier"]: "3"
img[alt="4x Upload Multiplier"]: "4"
img[alt="5x Upload Multiplier"]: "5"
img[alt="6x Upload Multiplier"]: "6"
img[alt="7x Upload Multiplier"]: "7"
img[alt="8x Upload Multiplier"]: "8"
img[alt="9x Upload Multiplier"]: "9"
img[alt="10x Upload Multiplier"]: "10"
"*": "1"

View File

@@ -0,0 +1,109 @@
---
site: ast4u
name: AST4u
language: de-de
type: private
encoding: iso-8859-1
links:
- https://www.ast4u.me/
caps:
categorymappings:
- {id: 35, cat: TV/Anime, desc: "Anime Movie"}
- {id: 36, cat: TV/Anime, desc: "Anime Serie"}
- {id: 37, cat: Audio/Foreign, desc: "Anime Musik"}
- {id: 41, cat: Books, desc: "Anime Pic & Manga"}
- {id: 42, cat: XXX, desc: "Hentai Movie & OVA"}
- {id: 43, cat: XXX, desc: "Hentai Serie"}
- {id: 44, cat: PC, desc: "Hentai Game"}
- {id: 45, cat: Movies, desc: "Cartoon Movie"}
- {id: 46, cat: TV, desc: "Cartoon Serie"}
- {id: 47, cat: TV, desc: "TV-Serie"}
- {id: 49, cat: TV/Documentary, desc: "Sonstiges Doku"}
- {id: 50, cat: Audio, desc: "Sonstiges Soundtrack"}
- {id: 52, cat: Movies/HD, desc: "Movie HD"}
- {id: 53, cat: Other, desc: "Sonstiges"}
- {id: 55, cat: Movies/Foreign, desc: "Movie Asia & MartialArts"}
- {id: 56, cat: TV/Anime, desc: "Anime OVA"}
- {id: 58, cat: Movies, desc: "Movie"}
- {id: 59, cat: Audio/Audiobook, desc: "Sonstiges Hoerspiele"}
- {id: 62, cat: Console, desc: "Sonstiges Game"}
- {id: 65, cat: Movies/BluRay, desc: "Movie BluRay"}
- {id: 66, cat: TV, desc: "TV-Serie BluRay"}
- {id: 67, cat: TV/HD, desc: "TV-Serie HD"}
- {id: 68, cat: TV/Anime, desc: "Anime Movie HD & BD"}
- {id: 69, cat: TV/Anime, desc: "Anime OVA HD & BD"}
- {id: 70, cat: TV/Anime, desc: "Anime Serie HD & BD"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
login:
path: takelogin.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
returnto: "/index.php"
test:
path: browse.php
search:
path: browse.php
inputs:
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
search: "{{ .Query.Keywords }}"
incldead: "0"
orderby: "added"
sort: "desc"
rows:
selector: table.tableinborder > tbody > tr:has(a[href^="details.php"])
fields:
title:
selector: a[href^="details.php"]
category:
selector: a[href^="browse.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
details:
selector: a[href^="details.php"]
attribute: href
download:
selector: a[href^=" /gettorrent/ssl/"]
attribute: href
files:
selector: td:nth-child(2) > table > tbody > tr:nth-child(2) > td:nth-child(1) > b:nth-child(2)
grabs:
selector: td:nth-child(2) > table > tbody > tr:nth-child(2) > td:nth-child(3) > b:nth-child(1)
size:
selector: td:nth-child(2) > table > tbody > tr:nth-child(2) > td:nth-child(1) > b:nth-child(1)
filters:
- name: replace
args: [".", ""]
- name: replace
args: [",", "."]
seeders:
selector: td:nth-child(2) > table > tbody > tr:nth-child(2) > td:nth-child(2) > b:nth-child(1)
leechers:
selector: td:nth-child(2) > table > tbody > tr:nth-child(2) > td:nth-child(2) > b:nth-child(3)
date:
selector: td:nth-child(2) > table > tbody > tr:nth-child(2) > td:nth-child(5)
filters:
- name: append
args: " +2:00"
- name: replace
args: ["\xA0", " "]
- name: dateparse
args: "02.01.2006 15:04:05 -07:00"
downloadvolumefactor:
case:
img[src="/pic/free.gif"]: "0"
"*": "1"
uploadvolumefactor:
case:
"*": "1"

View File

@@ -1,136 +1,136 @@
---
site: audiobooktorrents
name: Audiobook Torrents
language: en-us
type: private
encoding: UTF-8
links:
- https://abtorrents.me
caps:
categorymappings:
- {id: 10, cat: Audio/Audiobook, desc: "Adventure"}
- {id: 20, cat: Audio/Audiobook, desc: "Biographies & Memoirs"}
- {id: 30, cat: Audio/Audiobook, desc: "Business "}
- {id: 40, cat: Audio/Audiobook, desc: "Childrens"}
- {id: 50, cat: Audio/Audiobook, desc: "Comedy"}
- {id: 60, cat: Audio/Audiobook, desc: "Comics"}
- {id: 70, cat: Audio/Audiobook, desc: "Computers "}
- {id: 80, cat: Audio/Audiobook, desc: "Erotica"}
- {id: 90, cat: Audio/Audiobook, desc: "Fantasy-General"}
- {id: 100, cat: Audio/Audiobook, desc: "Fantasy-Youth"}
- {id: 110, cat: Audio/Audiobook, desc: "Files"}
- {id: 120, cat: Audio/Audiobook, desc: "Foreign Language"}
- {id: 130, cat: Audio/Audiobook, desc: "General Fiction"}
- {id: 140, cat: Audio/Audiobook, desc: "Historical Fiction"}
- {id: 150, cat: Audio/Audiobook, desc: "History"}
- {id: 160, cat: Audio/Audiobook, desc: "Horror"}
- {id: 170, cat: Audio/Audiobook, desc: "Literature "}
- {id: 180, cat: Audio/Audiobook, desc: "Mystery "}
- {id: 190, cat: Audio/Audiobook, desc: "Non-Fiction"}
- {id: 200, cat: Audio/Audiobook, desc: "Radio Drama"}
- {id: 210, cat: Audio/Audiobook, desc: "Romance"}
- {id: 235, cat: Audio/Audiobook, desc: "Sci-Fi Apocalypse"}
- {id: 220, cat: Audio/Audiobook, desc: "Science"}
- {id: 230, cat: Audio/Audiobook, desc: "Science Fiction "}
- {id: 240, cat: Audio/Audiobook, desc: "Self Improvement"}
- {id: 250, cat: Audio/Audiobook, desc: "Suspense"}
- {id: 260, cat: Audio/Audiobook, desc: "Talk Radio"}
- {id: 245, cat: Audio/Audiobook, desc: "Thriller"}
- {id: 270, cat: Audio/Audiobook, desc: "Urban Fantasy"}
- {id: 280, cat: Audio/Audiobook, desc: "Western"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
login:
path: takelogin.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
use_ssl: "1"
perm_ssl: "1"
submitme: "X"
error:
- selector: td.embedded:has(h2:contains("Oops"))
- selector: td.embedded:has(h2:contains("failed"))
test:
path: /browse.php
search:
path: /browse.php
inputs:
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
search: "{{ .Keywords }}"
searchin: "title"
incldead: "1"
rows:
selector: tr.browse_color, tr.freeleech_color, tr[id^="kdescr"]
after: 1
fields:
banner:
selector: a[href^="details.php?id="][onmouseover]
attribute: onmouseover
filters:
- name: regexp
args: src=\'(.*?)\'
title:
selector: a[href^="details.php?id="][onmouseover]
attribute: onmouseover
filters:
- name: regexp
args: Tip\('<b>(.*?)</b>
category:
selector: a[href^="browse.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
details:
selector: a[href^="details.php?id="][onmouseover]
attribute: href
download:
selector: a[href^="download.php"]
attribute: href
files:
selector: td:nth-child(4)
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)
date:
selector: td:nth-child(6)
downloadvolumefactor:
case:
"a.info > b:contains(\"[FREE]\")": "0"
"*": "1"
uploadvolumefactor:
case:
"*": "1"
description:
selector: a[href^="details.php?id="][onmouseover]
attribute: onmouseover
filters:
- name: regexp
args: <br /><b>(.*?)</b><br />
description:
selector: td:nth-child(2) > i
optional: true
filters:
- name: prepend
args: "{{ .Result.description }}<br>\n"
description:
selector: td[colspan=13]
filters:
- name: prepend
---
site: audiobooktorrents
name: Audiobook Torrents
language: en-us
type: private
encoding: UTF-8
links:
- https://abtorrents.me
caps:
categorymappings:
- {id: 10, cat: Audio/Audiobook, desc: "Adventure"}
- {id: 20, cat: Audio/Audiobook, desc: "Biographies & Memoirs"}
- {id: 30, cat: Audio/Audiobook, desc: "Business "}
- {id: 40, cat: Audio/Audiobook, desc: "Childrens"}
- {id: 50, cat: Audio/Audiobook, desc: "Comedy"}
- {id: 60, cat: Audio/Audiobook, desc: "Comics"}
- {id: 70, cat: Audio/Audiobook, desc: "Computers "}
- {id: 80, cat: Audio/Audiobook, desc: "Erotica"}
- {id: 90, cat: Audio/Audiobook, desc: "Fantasy-General"}
- {id: 100, cat: Audio/Audiobook, desc: "Fantasy-Youth"}
- {id: 110, cat: Audio/Audiobook, desc: "Files"}
- {id: 120, cat: Audio/Audiobook, desc: "Foreign Language"}
- {id: 130, cat: Audio/Audiobook, desc: "General Fiction"}
- {id: 140, cat: Audio/Audiobook, desc: "Historical Fiction"}
- {id: 150, cat: Audio/Audiobook, desc: "History"}
- {id: 160, cat: Audio/Audiobook, desc: "Horror"}
- {id: 170, cat: Audio/Audiobook, desc: "Literature "}
- {id: 180, cat: Audio/Audiobook, desc: "Mystery "}
- {id: 190, cat: Audio/Audiobook, desc: "Non-Fiction"}
- {id: 200, cat: Audio/Audiobook, desc: "Radio Drama"}
- {id: 210, cat: Audio/Audiobook, desc: "Romance"}
- {id: 235, cat: Audio/Audiobook, desc: "Sci-Fi Apocalypse"}
- {id: 220, cat: Audio/Audiobook, desc: "Science"}
- {id: 230, cat: Audio/Audiobook, desc: "Science Fiction "}
- {id: 240, cat: Audio/Audiobook, desc: "Self Improvement"}
- {id: 250, cat: Audio/Audiobook, desc: "Suspense"}
- {id: 260, cat: Audio/Audiobook, desc: "Talk Radio"}
- {id: 245, cat: Audio/Audiobook, desc: "Thriller"}
- {id: 270, cat: Audio/Audiobook, desc: "Urban Fantasy"}
- {id: 280, cat: Audio/Audiobook, desc: "Western"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
login:
path: takelogin.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
use_ssl: "1"
perm_ssl: "1"
submitme: "X"
error:
- selector: td.embedded:has(h2:contains("Oops"))
- selector: td.embedded:has(h2:contains("failed"))
test:
path: /browse.php
search:
path: /browse.php
inputs:
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
search: "{{ .Keywords }}"
searchin: "title"
incldead: "1"
rows:
selector: tr.browse_color, tr.freeleech_color, tr[id^="kdescr"]
after: 1
fields:
banner:
selector: a[href^="details.php?id="][onmouseover]
attribute: onmouseover
filters:
- name: regexp
args: src=\'(.*?)\'
title:
selector: a[href^="details.php?id="][onmouseover]
attribute: onmouseover
filters:
- name: regexp
args: Tip\('<b>(.*?)</b>
category:
selector: a[href^="browse.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
details:
selector: a[href^="details.php?id="][onmouseover]
attribute: href
download:
selector: a[href^="download.php"]
attribute: href
files:
selector: td:nth-child(4)
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)
date:
selector: td:nth-child(6)
downloadvolumefactor:
case:
"a.info > b:contains(\"[FREE]\")": "0"
"*": "1"
uploadvolumefactor:
case:
"*": "1"
description:
selector: a[href^="details.php?id="][onmouseover]
attribute: onmouseover
filters:
- name: regexp
args: <br /><b>(.*?)</b><br />
description:
selector: td:nth-child(2) > i
optional: true
filters:
- name: prepend
args: "{{ .Result.description }}<br>\n"
description:
selector: td[colspan=13]
filters:
- name: prepend
args: "{{ .Result.description }}<br>\n"

View File

@@ -0,0 +1,68 @@
---
site: awesomehd
name: Awesome-HD
description: "An HD tracker"
language: en-us
type: private
encoding: UTF-8
links:
- https://awesome-hd.me
caps:
categorymappings:
- {id: 1, cat: Movies/HD, desc: "Movies"}
- {id: 2, cat: TV/HD, desc: "TV-Shows"}
modes:
searchstr: [q]
settings:
- name: cookie
type: text
label: Cookie
login:
method: cookie
inputs:
cookie: "{{ .Config.cookie }}"
test:
path: index.php
search:
path: torrents.php
inputs:
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
searchstr: "{{ .Query.Keywords }}"
page: torrents
rows:
selector: table#torrent_table > tbody > tr.group, tr.torrent, tr.group_torrent:not(.edition_info)
fields:
download:
selector: a[href^="torrents.php?action=download&id="]
attribute: href
optional: true
details:
selector: a[href^="torrents.php?id="]
attribute: href
title:
selector: td:nth-child(3) > a
category:
selector: td:nth-child(2)
# files:
# selector: td:nth-child(4)
date:
selector: td:nth-last-child(5)
size:
selector: td:nth-last-child(4)
grabs:
selector: td:nth-last-child(3)
seeders:
selector: td:nth-last-child(2)
leechers:
selector: td:nth-last-child(1)
downloadvolumefactor:
case:
"*": "1"
uploadvolumefactor:
case:
"*": "1"

View File

@@ -0,0 +1,264 @@
---
site: b2s-share
name: B2S-Share
language: pt-br
type: private
encoding: iso-8859-1
links:
- http://www.b2s-share.com/
caps:
categorymappings:
#3D
- {id: 141, cat: Movies/3D, desc: "3D Ação"}
- {id: 142, cat: Movies/3D, desc: "3D Animação"}
- {id: 143, cat: Movies/3D, desc: "3D Aventura"}
- {id: 144, cat: Movies/3D, desc: "3D Clássico"}
- {id: 145, cat: Movies/3D, desc: "3D Comédia"}
- {id: 146, cat: Movies/3D, desc: "3D Documentário"}
- {id: 147, cat: Movies/3D, desc: "3D Drama"}
- {id: 149, cat: Movies/3D, desc: "3D Ficção"}
- {id: 150, cat: Movies/3D, desc: "3D Guerra"}
- {id: 151, cat: Movies/3D, desc: "3D Infantil"}
- {id: 152, cat: Movies/3D, desc: "3D Musical"}
- {id: 154, cat: Movies/3D, desc: "3D Outros"}
- {id: 155, cat: Movies/3D, desc: "3D Policial"}
- {id: 156, cat: Movies/3D, desc: "3D Religioso"}
- {id: 157, cat: Movies/3D, desc: "3D Romance"}
- {id: 158, cat: Movies/3D, desc: "3D Shows"}
- {id: 159, cat: Movies/3D, desc: "3D Suspense"}
- {id: 160, cat: Movies/3D, desc: "3D Terror"}
- {id: 161, cat: Movies/3D, desc: "3D Thriller"}
- {id: 162, cat: Movies/3D, desc: "3D Western"}
#4K
- {id: 173, cat: Movies, desc: "4K Ação"}
- {id: 191, cat: Movies, desc: "4K Animação"}
- {id: 190, cat: Movies, desc: "4K Aventura"}
- {id: 188, cat: Movies, desc: "4K Clássico"}
- {id: 175, cat: Movies, desc: "4K Comédia"}
- {id: 186, cat: Movies, desc: "4K Documentário"}
- {id: 185, cat: Movies, desc: "4K Drama"}
- {id: 177, cat: Movies, desc: "4K Ficção"}
- {id: 178, cat: Movies, desc: "4K Guerra"}
- {id: 179, cat: Movies, desc: "4K Infantil"}
- {id: 180, cat: Movies, desc: "4K Musical"}
- {id: 184, cat: Movies, desc: "4K Outros"}
- {id: 176, cat: Movies, desc: "4K Policial"}
- {id: 187, cat: Movies, desc: "4K Religioso"}
- {id: 174, cat: Movies, desc: "4K Romance"}
- {id: 181, cat: Movies, desc: "4K Shows"}
- {id: 182, cat: Movies, desc: "4K Suspense"}
- {id: 189, cat: Movies, desc: "4K Terror"}
- {id: 183, cat: Movies, desc: "4K Thriller"}
#ANIME
- {id: 11, cat: TV/Anime, desc: "Anime"}
#PC-APPS
- {id: 2, cat: PC, desc: "PC APPS - Linux"}
- {id: 3, cat: PC, desc: "PC APPS - Mac"}
- {id: 33, cat: PC, desc: "PC APPS - Portateis"}
- {id: 1, cat: PC, desc: "PC APPS - Windows"}
#BD-R
- {id: 140, cat: Movies, desc: "BD-R Autorado"}
- {id: 119, cat: Movies, desc: "BD-R"}
#MOBILE
- {id: 163, cat: Other, desc: "Mobile App/Jogos-Android"}
- {id: 164, cat: Other, desc: "Mobile App/Jogos-iPhone"}
- {id: 93, cat: Other, desc: "Mobile App/Jogos-Java"}
- {id: 169, cat: Other, desc: "Mobile App/Jogos-Outros"}
- {id: 168, cat: Other, desc: "Mobile App/Jogos-Win"}
- {id: 92, cat: Other, desc: "Mobile Filmes"}
- {id: 118, cat: Other, desc: "Mobile Séries"}
- {id: 94, cat: Other, desc: "Mobile Wallpapers"}
#CARTOON
- {id: 172, cat: TV/Other, desc: "Desenho Animado"}
#OTHER
- {id: 4, cat: Other, desc: "Apostilas/Cursos"}
- {id: 12, cat: Books, desc: "Diversos"}
- {id: 167, cat: Books, desc: "E-book/Livros"}
- {id: 7, cat: PC/Games, desc: "Emuladores / Roms"}
- {id: 166, cat: Books/Comics, desc: "HQ"}
- {id: 165, cat: Books, desc: "Revistas"}
#DVD-R
- {id: 41, cat: Movies/SD, desc: "DVD-R Autorado"}
- {id: 32, cat: Movies/SD, desc: "DVD-R"}
#MOVIES
- {id: 14, cat: Movies, desc: "Filmes Ação"}
- {id: 99, cat: Movies, desc: "Filmes Animação"}
- {id: 15, cat: Movies, desc: "Filmes Aventura"}
- {id: 16, cat: Movies, desc: "Filmes Clássico"}
- {id: 17, cat: Movies, desc: "Filmes Comédia"}
- {id: 31, cat: Movies, desc: "Filmes Documentário"}
- {id: 18, cat: Movies, desc: "Filmes Drama"}
- {id: 19, cat: Movies, desc: "Filmes Ficção"}
- {id: 20, cat: Movies, desc: "Filmes Guerra"}
- {id: 126, cat: Movies, desc: "Filmes Infantil"}
- {id: 96, cat: Movies, desc: "Filmes Musical"}
- {id: 24, cat: Movies, desc: "Filmes Outros"}
- {id: 40, cat: Movies, desc: "Filmes Policial"}
- {id: 39, cat: Movies, desc: "Filmes Religioso"}
- {id: 30, cat: Movies, desc: "Filmes Romance"}
- {id: 22, cat: Movies, desc: "Filmes Suspense"}
- {id: 23, cat: Movies, desc: "Filmes Terror"}
- {id: 130, cat: Movies, desc: "Filmes Thriller"}
- {id: 131, cat: Movies, desc: "Filmes Western"}
- {id: 34, cat: Movies, desc: "Filmes x264"}
#HD-1080p
- {id: 73, cat: Movies/HD, desc: "Filmes 1080p Ação"}
- {id: 87, cat: Movies/HD, desc: "Filmes 1080p Animação"}
- {id: 74, cat: Movies/HD, desc: "Filmes 1080p Aventura"}
- {id: 75, cat: Movies/HD, desc: "Filmes 1080p Clássico"}
- {id: 76, cat: Movies/HD, desc: "Filmes 1080p Comédia"}
- {id: 77, cat: Movies/HD, desc: "Filmes 1080p Documentário"}
- {id: 78, cat: Movies/HD, desc: "Filmes 1080p Drama"}
- {id: 79, cat: Movies/HD, desc: "Filmes 1080p Ficção"}
- {id: 80, cat: Movies/HD, desc: "Filmes 1080p Guerra"}
- {id: 127, cat: Movies/HD, desc: "Filmes 1080p Infantil"}
- {id: 97, cat: Movies/HD, desc: "Filmes 1080p Musical"}
- {id: 63, cat: Movies/HD, desc: "Filmes 1080p Outros"}
- {id: 82, cat: Movies/HD, desc: "Filmes 1080p Policial"}
- {id: 83, cat: Movies/HD, desc: "Filmes 1080p Religioso"}
- {id: 84, cat: Movies/HD, desc: "Filmes 1080p Romance"}
- {id: 88, cat: Movies/HD, desc: "Filmes 1080p Shows"}
- {id: 85, cat: Movies/HD, desc: "Filmes 1080p Suspense"}
- {id: 86, cat: Movies/HD, desc: "Filmes 1080p Terror"}
- {id: 132, cat: Movies/HD, desc: "Filmes 1080p Thriller"}
- {id: 135, cat: Movies/HD, desc: "Filmes 1080p Western"}
#HD-720p
- {id: 58, cat: Movies/HD, desc: "Filmes 720p Ação"}
- {id: 89, cat: Movies/HD, desc: "Filmes 720p Animação"}
- {id: 60, cat: Movies/HD, desc: "Filmes 720p Aventura"}
- {id: 61, cat: Movies/HD, desc: "Filmes 720p Clássico"}
- {id: 62, cat: Movies/HD, desc: "Filmes 720p Comédia"}
- {id: 72, cat: Movies/HD, desc: "Filmes 720p Documentário"}
- {id: 64, cat: Movies/HD, desc: "Filmes 720p Drama"}
- {id: 65, cat: Movies/HD, desc: "Filmes 720p Ficção"}
- {id: 66, cat: Movies/HD, desc: "Filmes 720p Guerra"}
- {id: 129, cat: Movies/HD, desc: "Filmes 720p Infantil"}
- {id: 98, cat: Movies/HD, desc: "Filmes 720p Musical"}
- {id: 59, cat: Movies/HD, desc: "Filmes 720p Outros"}
- {id: 70, cat: Movies/HD, desc: "Filmes 720p Policial"}
- {id: 57, cat: Movies/HD, desc: "Filmes 720p Religioso"}
- {id: 71, cat: Movies/HD, desc: "Filmes 720p Romance"}
- {id: 90, cat: Movies/HD, desc: "Filmes 720p Shows"}
- {id: 68, cat: Movies/HD, desc: "Filmes 720p Suspense"}
- {id: 69, cat: Movies/HD, desc: "Filmes 720p Terror"}
- {id: 134, cat: Movies/HD, desc: "Filmes 720p Thriller"}
- {id: 137, cat: Movies/HD, desc: "Filmes 720p Western"}
#GAMES
- {id: 6, cat: Console, desc: "Jogos Console"}
- {id: 51, cat: PC/Games, desc: "Jogos Emuladores"}
- {id: 44, cat: Console, desc: "Jogos Gamecube"}
- {id: 43, cat: Console/NDS, desc: "Jogos Nintendo DS"}
- {id: 52, cat: Console, desc: "Jogos Outros"}
- {id: 5, cat: PC/Games, desc: "Jogos PC"}
- {id: 47, cat: Console, desc: "Jogos PS2"}
- {id: 48, cat: Console, desc: "Jogos PS3"}
- {id: 170, cat: Console, desc: "Jogos PS4"}
- {id: 46, cat: Console, desc: "Jogos PSP"}
- {id: 45, cat: Console/Wii, desc: "Jogos Wii"}
- {id: 49, cat: Console/Xbox, desc: "Jogos XBOX"}
- {id: 50, cat: Console/Xbox 360, desc: "Jogos XBOX360"}
- {id: 171, cat: Console, desc: "Jogos XBOXONE"}
#MUSIC
- {id: 29, cat: Audio, desc: "Musica Discografia"}
- {id: 28, cat: Audio, desc: "Musica Gospel"}
- {id: 139, cat: Audio, desc: "Musica Infantil"}
- {id: 27, cat: Audio, desc: "Musica Internacionais"}
- {id: 26, cat: Audio, desc: "Musica Nacionais"}
- {id: 91, cat: Audio, desc: "Musica Outros"}
#TV-SERIES
- {id: 35, cat: TV/HD, desc: "Séries HD"}
- {id: 8, cat: TV, desc: "Séries"}
#SHOWS
- {id: 13, cat: Audio/Video, desc: "Show"}
- {id: 56, cat: Audio/Video, desc: "Video Clipes"}
#TV
- {id: 53, cat: TV, desc: "Entretenimento"}
- {id: 54, cat: TV/Sport, desc: "Esportes"}
- {id: 138, cat: TV, desc: "Infantil"}
- {id: 55, cat: TV, desc: "Jornalismo"}
#XXX
- {id: 36, cat: XXX/Other, desc: "Anime Hentai"}
- {id: 10, cat: XXX, desc: "Filmes Adultos"}
- {id: 37, cat: XXX/Other, desc: "XXX Fotos"}
- {id: 95, cat: XXX/Other, desc: "XXX Revistas"}
modes:
search: [q]
login:
path: account-login.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
test:
path: torrents.php
search:
path: torrents-search.php
keywordsfilters:
- name: re_replace
args: ["[^a-zA-Z0-9]+", "%"]
inputs:
search: "{{ .Keywords }}"
rows:
selector: table[class^="ttable_headinner"] > tbody > tr:has(a[href^="torrents-details.php?id="])
fields:
details:
selector: a[href^="torrents-details.php?id="]
attribute: href
title:
selector: a[href^="torrents-details.php?id="]
download:
selector: a[href^="torrents-details.php?id="]
attribute: href
filters:
- name: replace
args: ["torrents-details.php", "download.php"]
category:
selector: a[href^="torrents.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
date:
selector: td:nth-child(2) > span
filters:
- name: replace
args: ["(", ""]
- name: replace
args: [")", ""]
size:
selector: td:nth-child(3)
grabs:
selector: td:nth-child(4) > font > b
seeders:
selector: td:nth-child(5) > b > font
leechers:
selector: td:nth-child(6) > font > b
downloadvolumefactor:
case:
"img[alt=\"[free]\"]": "0"
"*": "1"
uploadvolumefactor:
case:
"img[alt=\"[+UP x2]\"]": "2"
"*": "1"

View File

@@ -0,0 +1,121 @@
 site: backups
name: Back-ups
language: en-us
type: private
encoding: UTF-8
links:
- https://back-ups.me/
caps:
categorymappings:
- {id: 12, cat: Console, desc: "XBOX360"}
- {id: 9, cat: TV, desc: "TV-Boxsets"}
- {id: 3, cat: PC, desc: "Apps"}
- {id: 24, cat: PC, desc: "Apple"}
- {id: 11, cat: TV, desc: "TV/x264"}
- {id: 23, cat: Console, desc: "Visionary"}
- {id: 14, cat: TV/Sport, desc: "WWE"}
- {id: 26, cat: Console, desc: "Xbox"}
- {id: 13, cat: Console, desc: "XBOX-JTAG"}
- {id: 35, cat: Movies/Other, desc: "Anime"}
- {id: 4, cat: Movies/BluRay, desc: "Blu-Ray"}
- {id: 6, cat: Movies, desc: "Movies/XVID"}
- {id: 10, cat: TV, desc: "TV/Xvid"}
- {id: 29, cat: TV/Sport, desc: "Sport"}
- {id: 40, cat: TV, desc: "Soaps"}
- {id: 27, cat: Console, desc: "Roms and Emulators"}
- {id: 30, cat: Console, desc: "Playstation"}
- {id: 7, cat: Audio, desc: "Music"}
- {id: 16, cat: TV/Documentary, desc: "Docu"}
- {id: 5, cat: Books, desc: "EBooks"}
- {id: 38, cat: Console, desc: "Hyperspin Bolt-on Edition"}
- {id: 34, cat: TV, desc: "Kids"}
- {id: 8, cat: PC/Games, desc: "PC Games"}
- {id: 22, cat: PC/Games, desc: "CoinOPS"}
- {id: 33, cat: TV/Sport, desc: "MMA/Boxing"}
- {id: 32, cat: Movies, desc: "Movie Pack"}
- {id: 31, cat: Console, desc: "Nintendo"}
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:contains("remaining tries")
test:
path: browse.php
selector: a[href*="/logout.php"]
search:
path: browse.php
keywordsfilters:
# remove words <= 3 characters and surrounding special characters
- name: re_replace
args: ["(?:^|\\s)[_\\+\\/\\.\\-\\(\\)]*[\\S]{0,3}[_\\+\\/\\.\\-\\(\\)]*(?:\\s|$)", " "]
inputs:
do: "search"
keywords: "{{ .Keywords }}"
search_type: "t_name"
category: "0" # multi cat search not supported
include_dead_torrents: "yes"
rows:
selector: table#sortabletable > tbody > tr:has(a[href*="/details.php?id="])
filters:
- name: andmatch
args: 66
fields:
title:
selector: a[href*="/details.php?id="]
title:
optional: true
selector: div.tooltip-content > div
details:
selector: a[href*="/details.php?id="]
attribute: href
download:
selector: a[href*="/download.php?id="]
attribute: href
magnet:
selector: a[href^="magnet:?xt="]
attribute: href
category:
selector: a[href*="/browse.php?category="]
attribute: href
filters:
- name: querystring
args: category
size:
selector: td:nth-child(5)
grabs:
selector: td:nth-child(6)
seeders:
selector: td:nth-child(7)
leechers:
selector: td:nth-child(8)
date:
selector: "td:nth-child(2) > div:has(span[style=\"float: right;\"])"
remove: span
filters:
- name: append
args: " +00:00"
- name: dateparse
args: "02-01-2006 15:04 -07:00"
banner:
optional: true
selector: div.tooltip-content > img
attribute: src
downloadvolumefactor:
case:
img[alt^="Free Torrent "]: "0"
img[alt^="Silver Torrent "]: "0.5"
"*": "1"
uploadvolumefactor:
case:
"*": "1"

View File

@@ -1,101 +1,97 @@
---
site: bigtorrent
name: BIGTorrent
description: "ratio-free Hungarian tracker"
language: hu
type: private
encoding: UTF-8
links:
- http://www.bigtorrent.eu/
caps:
categorymappings:
- {id: 24533, cat: Movies/3D, desc: "3D"}
- {id: 47, cat: Other, desc: "Other"}
- {id: 24541, cat: Movies/DVD, desc: "Film DVD English"}
- {id: 24540, cat: Movies/DVD, desc: "Film DVD Hungarian"}
- {id: 24539, cat: Movies/HD, desc: "Film HD English"}
- {id: 24538, cat: Movies/HD, desc: "Film HD Hungarian"}
- {id: 24537, cat: Movies/SD, desc: "Film SD English"}
- {id: 24536, cat: Movies/SD, desc: "Film SD Hungarian"}
- {id: 69, cat: PC/Games, desc: "Games ISO"}
- {id: 67, cat: PC/Games, desc: "Games Rip"}
- {id: 24534, cat: Audio/Audiobook, desc: "Audiobooks"}
- {id: 65, cat: Other, desc: "Picture"}
- {id: 64, cat: Other, desc: "Video"}
- {id: 68, cat: Console/Xbox360, desc: "Video Game Console"}
- {id: 63, cat: Books, desc: "English Books"}
- {id: 62, cat: Books, desc: "Hungarian Books"}
- {id: 74, cat: Audio/Lossless, desc: "Lossless"}
- {id: 56, cat: PC/Phone-Other, desc: "Mobile"}
- {id: 57, cat: PC, desc: "Programs"}
- {id: 24545, cat: TV/HD, desc: "English HD Series"}
- {id: 24544, cat: TV/HD, desc: "Hungarian HD Series"}
- {id: 24543, cat: TV/SD, desc: "English SD Series"}
- {id: 24542, cat: TV/SD, desc: "Hungarian SD Series"}
- {id: 24535, cat: XXX, desc: "XXX"}
- {id: 59, cat: Audio, desc: "Music"}
- {id: 58, cat: Audio, desc: "Hungarian Music"}
modes:
search: [q]
login:
path: /login.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
sent: "yes"
returnto: "/"
error:
- selector: table:contains("Login failed!")
test:
path: index.php
download:
selector: a[href^="download.php?id="]
search:
path: browse.php
inputs:
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
search: "{{ .Query.Keywords }}"
rows:
selector: table#torrent_table > tbody > tr:has(a[href^="browse.php?cat="])
fields:
category:
selector: a[href^="browse.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
title:
selector: td:nth-child(2) a
download:
selector: a[href^="details.php?id="]
attribute: href
filters:
- name: replace
args: ["details.php?id=", "download.php?id="]
details:
selector: a[href^="details.php?id="]
attribute: href
grabs:
selector: td:nth-child(8)
files:
selector: td:nth-child(5)
size:
selector: td:nth-child(7)
seeders:
selector: td:nth-child(9)
leechers:
selector: td:nth-child(10)
date:
selector: td:nth-child(4)
downloadvolumefactor:
case:
"*": "1"
uploadvolumefactor:
case:
---
site: bigtorrent
name: BIGTorrent
description: "ratio-free Hungarian tracker"
language: hu
type: private
encoding: UTF-8
links:
- http://www.bigtorrent.eu/
caps:
categorymappings:
- {id: 24533, cat: Movies/3D, desc: "3D"}
- {id: 47, cat: Other, desc: "Other"}
- {id: 24541, cat: Movies/DVD, desc: "Film DVD English"}
- {id: 24540, cat: Movies/DVD, desc: "Film DVD Hungarian"}
- {id: 24539, cat: Movies/HD, desc: "Film HD English"}
- {id: 24538, cat: Movies/HD, desc: "Film HD Hungarian"}
- {id: 24537, cat: Movies/SD, desc: "Film SD English"}
- {id: 24536, cat: Movies/SD, desc: "Film SD Hungarian"}
- {id: 69, cat: PC/Games, desc: "Games ISO"}
- {id: 67, cat: PC/Games, desc: "Games Rip"}
- {id: 24534, cat: Audio/Audiobook, desc: "Audiobooks"}
- {id: 65, cat: Other, desc: "Picture"}
- {id: 64, cat: Other, desc: "Video"}
- {id: 68, cat: Console/Xbox360, desc: "Video Game Console"}
- {id: 63, cat: Books, desc: "English Books"}
- {id: 62, cat: Books, desc: "Hungarian Books"}
- {id: 74, cat: Audio/Lossless, desc: "Lossless"}
- {id: 56, cat: PC/Phone-Other, desc: "Mobile"}
- {id: 57, cat: PC, desc: "Programs"}
- {id: 24545, cat: TV/HD, desc: "English HD Series"}
- {id: 24544, cat: TV/HD, desc: "Hungarian HD Series"}
- {id: 24543, cat: TV/SD, desc: "English SD Series"}
- {id: 24542, cat: TV/SD, desc: "Hungarian SD Series"}
- {id: 24535, cat: XXX, desc: "XXX"}
- {id: 59, cat: Audio, desc: "Music"}
- {id: 58, cat: Audio, desc: "Hungarian Music"}
modes:
search: [q]
login:
path: /login.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
sent: "yes"
returnto: "/"
error:
- selector: table:contains("Login failed!")
test:
path: index.php
download:
selector: a[href^="download.php?id="]
search:
path: browse.php
inputs:
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
search: "{{ .Query.Keywords }}"
rows:
selector: table#torrent_table > tbody > tr:has(a[href^="browse.php?cat="])
fields:
category:
selector: a[href^="browse.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
title:
selector: td:nth-child(2) a
download:
selector: a[href^="details.php?id="]
attribute: href
filters:
- name: replace
args: ["details.php?id=", "download.php?id="]
details:
selector: a[href^="details.php?id="]
attribute: href
size:
selector: td:nth-child(7)
seeders:
selector: td:nth-child(8)
leechers:
selector: td:nth-child(9)
date:
selector: td:nth-child(4)
downloadvolumefactor:
case:
"*": "1"
uploadvolumefactor:
case:
"*": "1"

View File

@@ -1,4 +1,4 @@
---
---
site: bithumen
name: BitHUmen
language: hu-hu
@@ -72,7 +72,8 @@
attribute: href
title:
selector: a[href^="details.php?id="]
title|optional:
title:
optional: true
selector: a[href^="details.php?id="]
attribute: title
details:
@@ -108,14 +109,16 @@
selector: td:nth-child(6) > u
downloadvolumefactor:
text: "1"
downloadvolumefactor|optional:
downloadvolumefactor:
optional: true
selector: td:nth-child(6) > nobr > font:contains(" × ")
filters:
- name: replace
args: ["×", ""]
uploadvolumefactor:
text: "1"
uploadvolumefactor|optional:
uploadvolumefactor:
optional: true
selector: td:nth-child(5) > nobr > font:contains(" × ")
filters:
- name: replace
@@ -131,4 +134,3 @@
description:
selector: td:nth-child(2) > div

View File

@@ -1,133 +1,136 @@
---
site: bitspyder
name: Bitspyder
language: en-us
type: private
encoding: windows-1252
links:
- http://bitspyder.net/
caps:
categorymappings:
- {id: 61, cat: Books, desc: "3D"}
- {id: 69, cat: Books, desc: "Anim|GFX"}
- {id: 56, cat: Books, desc: "Art"}
- {id: 40, cat: Audio/Audiobook, desc: "Audio Books"}
- {id: 55, cat: Books, desc: "Business"}
- {id: 46, cat: Books, desc: "Career"}
- {id: 2, cat: Books, desc: "CBTs"}
- {id: 39, cat: Books, desc: "Cert QA"}
- {id: 63, cat: Books, desc: "College"}
- {id: 53, cat: Books, desc: "Cooking"}
- {id: 42, cat: Books, desc: "Documentary"}
- {id: 37, cat: Books, desc: "e-Books"}
- {id: 65, cat: Books, desc: "Engineering"}
- {id: 54, cat: Books, desc: "Health-Fitness"}
- {id: 64, cat: Books, desc: "Kids"}
- {id: 47, cat: Books, desc: "Languages"}
- {id: 49, cat: Books, desc: "Linux CBTs"}
- {id: 43, cat: Books, desc: "Lynda.com"}
- {id: 57, cat: Books/Magazines, desc: "Magazines"}
- {id: 71, cat: Books, desc: "Magic"}
- {id: 60, cat: Books, desc: "Medical"}
- {id: 44, cat: Books, desc: "Misc Learning"}
- {id: 51, cat: Books, desc: "Music Learning"}
- {id: 41, cat: Books, desc: "Others"}
- {id: 52, cat: Books, desc: "Photography"}
- {id: 35, cat: Books, desc: "PPT 'n Docs"}
- {id: 38, cat: Books, desc: "Religion"}
- {id: 68, cat: Books, desc: "Self Growth"}
- {id: 72, cat: Books, desc: "Templates"}
- {id: 58, cat: Books, desc: "Total Training"}
- {id: 45, cat: Books, desc: "Trainsignal"}
- {id: 59, cat: Books, desc: "VTC"}
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: processid.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: td.msg_info > font > b
test:
path: /browse.php
search:
path: /browse.php
method: post
inputs:
search: "{{ .Query.Keywords }}"
incldead: "1"
rows:
selector: table > tbody > tr[class]
filters:
- name: andmatch
fields:
# there are two styles, we support both
title:
selector: a[href^="details.php?id="]
category:
selector: a[href^="browse.php?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?id=", "download.php/"]
- name: replace
args: ["&hit=1", "/dummy.torrent"]
size:
selector: td.rowcol:nth-child(6):has(br), font:contains("Size:") + font
files:
selector: a[href*="&filelist=1"]
grabs:
selector: td.rowcol:nth-child(7):has(br)
filters:
- name: regexp
args: ([\d,]+)
seeders:
selector: td.rowcol:nth-last-child(3)
leechers:
selector: td.rowcol:nth-last-child(2)
date|optional|1:
selector: font[color="5F5F5F"]
filters:
- name: split
args: [" (", 0]
- name: replace
args: ["\xA0", " "]
- name: append
args: " +00:00"
- name: dateparse
args: "2006-01-02 15:04:05 -07:00"
date|optional|2:
selector: a[title^="Upploaded at"]
attribute: title
filters:
- name: replace
args: ["Upploaded at - ", ""]
- name: append
args: " +00:00"
- name: dateparse
args: "2006-01-02 15:04:05 -07:00"
downloadvolumefactor:
case:
"*": "1"
uploadvolumefactor:
case:
"*": "1"
description|optional:
selector: font[color="#990000"]
---
site: bitspyder
name: Bitspyder
language: en-us
type: private
encoding: windows-1252
links:
- http://bitspyder.net/
caps:
categorymappings:
- {id: 61, cat: Books, desc: "3D"}
- {id: 69, cat: Books, desc: "Anim|GFX"}
- {id: 56, cat: Books, desc: "Art"}
- {id: 40, cat: Audio/Audiobook, desc: "Audio Books"}
- {id: 55, cat: Books, desc: "Business"}
- {id: 46, cat: Books, desc: "Career"}
- {id: 2, cat: Books, desc: "CBTs"}
- {id: 39, cat: Books, desc: "Cert QA"}
- {id: 63, cat: Books, desc: "College"}
- {id: 53, cat: Books, desc: "Cooking"}
- {id: 42, cat: Books, desc: "Documentary"}
- {id: 37, cat: Books, desc: "e-Books"}
- {id: 65, cat: Books, desc: "Engineering"}
- {id: 54, cat: Books, desc: "Health-Fitness"}
- {id: 64, cat: Books, desc: "Kids"}
- {id: 47, cat: Books, desc: "Languages"}
- {id: 49, cat: Books, desc: "Linux CBTs"}
- {id: 43, cat: Books, desc: "Lynda.com"}
- {id: 57, cat: Books/Magazines, desc: "Magazines"}
- {id: 71, cat: Books, desc: "Magic"}
- {id: 60, cat: Books, desc: "Medical"}
- {id: 44, cat: Books, desc: "Misc Learning"}
- {id: 51, cat: Books, desc: "Music Learning"}
- {id: 41, cat: Books, desc: "Others"}
- {id: 52, cat: Books, desc: "Photography"}
- {id: 35, cat: Books, desc: "PPT 'n Docs"}
- {id: 38, cat: Books, desc: "Religion"}
- {id: 68, cat: Books, desc: "Self Growth"}
- {id: 72, cat: Books, desc: "Templates"}
- {id: 58, cat: Books, desc: "Total Training"}
- {id: 45, cat: Books, desc: "Trainsignal"}
- {id: 59, cat: Books, desc: "VTC"}
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: processid.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: td.msg_info > font > b
test:
path: /browse.php
search:
path: /browse.php
method: post
inputs:
search: "{{ .Query.Keywords }}"
incldead: "1"
rows:
selector: table > tbody > tr[class]
filters:
- name: andmatch
fields:
# there are two styles, we support both
title:
selector: a[href^="details.php?id="]
category:
selector: a[href^="browse.php?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?id=", "download.php/"]
- name: replace
args: ["&hit=1", "/dummy.torrent"]
size:
selector: td.rowcol:nth-child(6):has(br), font:contains("Size:") + font
files:
selector: a[href*="&filelist=1"]
grabs:
selector: td.rowcol:nth-child(7):has(br)
filters:
- name: regexp
args: ([\d,]+)
seeders:
selector: td.rowcol:nth-last-child(3)
leechers:
selector: td.rowcol:nth-last-child(2)
date:
optional: true
selector: font[color="5F5F5F"]
filters:
- name: split
args: [" (", 0]
- name: replace
args: ["\xA0", " "]
- name: append
args: " +00:00"
- name: dateparse
args: "2006-01-02 15:04:05 -07:00"
date:
optional: true
selector: a[title^="Upploaded at"]
attribute: title
filters:
- name: replace
args: ["Upploaded at - ", ""]
- name: append
args: " +00:00"
- name: dateparse
args: "2006-01-02 15:04:05 -07:00"
downloadvolumefactor:
case:
"*": "1"
uploadvolumefactor:
case:
"*": "1"
description:
optional: true
selector: font[color="#990000"]

View File

@@ -1,148 +1,148 @@
---
site: blubits
name: Blu-bits
description: "A HD tracker"
language: en-us
type: private
encoding: UTF-8
links:
- https://blu-bits.com/
caps:
categorymappings:
# Movies
- {id: 14, cat: Movies/BluRay, desc: "Full Blu-ray"}
- {id: 54, cat: Movies/HD, desc: "HD-DVD"}
- {id: 16, cat: Movies/HD, desc: "Remux"}
- {id: 55, cat: Movies/HD, desc: "2160p"}
- {id: 15, cat: Movies/HD, desc: "1080p"}
- {id: 19, cat: Movies/HD, desc: "1080i"}
- {id: 18, cat: Movies/HD, desc: "720p"}
# Documentaries
- {id: 21, cat: Movies/BluRay, desc: "Full Blu-ray"}
- {id: 39, cat: Movies/HD, desc: "Remux"}
- {id: 56, cat: Movies/HD, desc: "2160p"}
- {id: 23, cat: Movies/HD, desc: "1080p"}
- {id: 24, cat: Movies/HD, desc: "1080i"}
- {id: 25, cat: Movies/HD, desc: "720p"}
# TV Series
- {id: 27, cat: TV/HD, desc: "Full Blu-ray"}
- {id: 40, cat: TV/HD, desc: "Remux"}
- {id: 28, cat: TV/HD, desc: "1080p"}
- {id: 29, cat: TV/HD, desc: "1080i"}
- {id: 30, cat: TV/HD, desc: "720p"}
# HDTV
- {id: 35, cat: TV/HD, desc: "1080i"}
- {id: 36, cat: TV/HD, desc: "720p"}
# XXX
- {id: 59, cat: XXX, desc: "Full Blu-ray"}
- {id: 46, cat: XXX, desc: "1080p"}
- {id: 51, cat: XXX, desc: "720p"}
# Music
- {id: 53, cat: Audio/Video, desc: "Full Blu-ray"}
- {id: 57, cat: Audio/Video, desc: "Remux"}
- {id: 45, cat: Audio/Video, desc: "1080p"}
- {id: 58, cat: Audio/Video, desc: "720p"}
- {id: 38, cat: Audio/Lossless, desc: "Flac"}
- {id: 41, cat: TV/Sport, desc: "Sports"}
- {id: 42, cat: TV/Anime, desc: "Anime"}
- {id: 44, cat: PC, desc: "Windows Apps"}
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: index.php?page=login
method: post
inputs:
uid: "{{ .Config.username }}"
pwd: "{{ .Config.password }}"
error:
- selector: table.lista > tbody > tr > td.lista > span[style="color:#FF0000;"]
test:
path: index.php
selector: ul#navlist
ratio:
path: index.php
selector: "ul#navlist > li:contains(\"Ratio: \")"
filters:
- name: split
args: ["\u00a0", 1]
- name: replace
args: ["---", "0"]
search:
path: index.php
inputs:
search: "{{ .Query.Keywords }}"
page: torrents
options: 0
active: 0
rows:
selector: div.b-content > table.lista > tbody > tr:has(a[href^="index.php?page=torrents&category="])
fields:
download:
selector: a[href^="download.php?id="]
attribute: href
title:
selector: a[href^="index.php?page=torrent-details&id="]
attribute: title
filters:
- name: replace
args: ["View details: ", ""]
category:
selector: a[href^="index.php?page=torrents&category="]
attribute: href
filters:
- name: querystring
args: category
comments:
selector: a[href^="index.php?page=torrent-details&id="]
attribute: href
size:
selector: p
filters:
- name: replace
args: ["\u00a0", ""]
- name: regexp
args: "\\|\\s+Size:\\s+([\\w\\d\\.,]+ \\w\\w)\\s+\\|"
date:
selector: a[href^="index.php?page=torrent-details&id="]
attribute: onmouseover
filters:
- name: regexp
args: "<center>Added:(.*?)</center>"
grabs:
selector: a[href^="index.php?page=torrent_history&id="]
filters:
- name: replace
args: ["---", "0"]
seeders:
selector: a[title="Click here to view peers details"]:nth-child(1)
leechers:
selector: a[title="Click here to view peers details"]:nth-child(2)
downloadvolumefactor:
case:
img[alt="gold"]: "0"
img[alt="silver"]: "0.5"
"*": "1"
uploadvolumefactor:
case:
img[alt="2x Upload Multiplier"]: "2"
img[alt="3x Upload Multiplier"]: "3"
img[alt="4x Upload Multiplier"]: "4"
img[alt="5x Upload Multiplier"]: "5"
img[alt="6x Upload Multiplier"]: "6"
img[alt="7x Upload Multiplier"]: "7"
img[alt="8x Upload Multiplier"]: "8"
img[alt="9x Upload Multiplier"]: "9"
img[alt="10x Upload Multiplier"]: "10"
---
site: blubits
name: Blu-bits
description: "A HD tracker"
language: en-us
type: private
encoding: UTF-8
links:
- https://blu-bits.com/
caps:
categorymappings:
# Movies
- {id: 14, cat: Movies/BluRay, desc: "Full Blu-ray"}
- {id: 54, cat: Movies/HD, desc: "HD-DVD"}
- {id: 16, cat: Movies/HD, desc: "Remux"}
- {id: 55, cat: Movies/HD, desc: "2160p"}
- {id: 15, cat: Movies/HD, desc: "1080p"}
- {id: 19, cat: Movies/HD, desc: "1080i"}
- {id: 18, cat: Movies/HD, desc: "720p"}
# Documentaries
- {id: 21, cat: Movies/BluRay, desc: "Full Blu-ray"}
- {id: 39, cat: Movies/HD, desc: "Remux"}
- {id: 56, cat: Movies/HD, desc: "2160p"}
- {id: 23, cat: Movies/HD, desc: "1080p"}
- {id: 24, cat: Movies/HD, desc: "1080i"}
- {id: 25, cat: Movies/HD, desc: "720p"}
# TV Series
- {id: 27, cat: TV/HD, desc: "Full Blu-ray"}
- {id: 40, cat: TV/HD, desc: "Remux"}
- {id: 28, cat: TV/HD, desc: "1080p"}
- {id: 29, cat: TV/HD, desc: "1080i"}
- {id: 30, cat: TV/HD, desc: "720p"}
# HDTV
- {id: 35, cat: TV/HD, desc: "1080i"}
- {id: 36, cat: TV/HD, desc: "720p"}
# XXX
- {id: 59, cat: XXX, desc: "Full Blu-ray"}
- {id: 46, cat: XXX, desc: "1080p"}
- {id: 51, cat: XXX, desc: "720p"}
# Music
- {id: 53, cat: Audio/Video, desc: "Full Blu-ray"}
- {id: 57, cat: Audio/Video, desc: "Remux"}
- {id: 45, cat: Audio/Video, desc: "1080p"}
- {id: 58, cat: Audio/Video, desc: "720p"}
- {id: 38, cat: Audio/Lossless, desc: "Flac"}
- {id: 41, cat: TV/Sport, desc: "Sports"}
- {id: 42, cat: TV/Anime, desc: "Anime"}
- {id: 44, cat: PC, desc: "Windows Apps"}
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: index.php?page=login
method: post
inputs:
uid: "{{ .Config.username }}"
pwd: "{{ .Config.password }}"
error:
- selector: table.lista > tbody > tr > td.lista > span[style="color:#FF0000;"]
test:
path: index.php
selector: ul#navlist
ratio:
path: index.php
selector: "ul#navlist > li:contains(\"Ratio: \")"
filters:
- name: split
args: ["\u00a0", 1]
- name: replace
args: ["---", "0"]
search:
path: index.php
inputs:
search: "{{ .Query.Keywords }}"
page: torrents
options: 0
active: 0
rows:
selector: div.b-content > table.lista > tbody > tr:has(a[href^="index.php?page=torrents&category="])
fields:
download:
selector: a[href^="download.php?id="]
attribute: href
title:
selector: a[href^="index.php?page=torrent-details&id="]
attribute: title
filters:
- name: replace
args: ["View details: ", ""]
category:
selector: a[href^="index.php?page=torrents&category="]
attribute: href
filters:
- name: querystring
args: category
comments:
selector: a[href^="index.php?page=torrent-details&id="]
attribute: href
size:
selector: p
filters:
- name: replace
args: ["\u00a0", ""]
- name: regexp
args: "\\|\\s+Size:\\s+([\\w\\d\\.,]+ \\w\\w)\\s+\\|"
date:
selector: a[href^="index.php?page=torrent-details&id="]
attribute: onmouseover
filters:
- name: regexp
args: "<center>Added:(.*?)</center>"
grabs:
selector: a[href^="index.php?page=torrent_history&id="]
filters:
- name: replace
args: ["---", "0"]
seeders:
selector: a[title="Click here to view peers details"]:nth-child(1)
leechers:
selector: a[title="Click here to view peers details"]:nth-child(2)
downloadvolumefactor:
case:
img[alt="gold"]: "0"
img[alt="silver"]: "0.5"
"*": "1"
uploadvolumefactor:
case:
img[alt="2x Upload Multiplier"]: "2"
img[alt="3x Upload Multiplier"]: "3"
img[alt="4x Upload Multiplier"]: "4"
img[alt="5x Upload Multiplier"]: "5"
img[alt="6x Upload Multiplier"]: "6"
img[alt="7x Upload Multiplier"]: "7"
img[alt="8x Upload Multiplier"]: "8"
img[alt="9x Upload Multiplier"]: "9"
img[alt="10x Upload Multiplier"]: "10"
"*": "1"

View File

@@ -1,89 +1,89 @@
---
site: bluebirdhd
name: BlueBird
language: ru-ru
type: private
encoding: windows-1251
links:
- https://bluebird-hd.org/
caps:
categorymappings:
- {id: 1, cat: Movies, desc: "Films"}
- {id: 2, cat: TV/Anime, desc: "Cartoons"}
- {id: 3, cat: TV/Documentary, desc: "documentary"}
- {id: 4, cat: Audio, desc: "Show / Music"}
- {id: 5, cat: TV/Sport, desc: "Sport"}
- {id: 6, cat: TV, desc: "TV series"}
- {id: 7, cat: XXX, desc: "erotica"}
- {id: 8, cat: Other, desc: "Demo / Misc"}
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: /takelogin.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: div.error
test:
path: /browse.php
search:
path: /browse.php
inputs:
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
search: "{{ .Query.Keywords }}"
incldead: "1"
rows:
selector: table > tbody > tr:has(a[href^="details.php?id="])
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^="download.php?id="]
attribute: href
grabs:
selector: a[href*="&snatched=1#snatched"]
filters:
- name: regexp
args: (\d+)
size:
selector: td:nth-child(7)
remove: a
date:
selector: div#cleft > font
seeders:
selector: td:nth-child(5)
leechers:
selector: td:nth-child(6)
banner:
selector: a.tname
attribute: onmouseover
filters:
- name: regexp
args: src=([^\s]+)
downloadvolumefactor:
case:
img[src="pic/diamond.png"]: "0"
img[src="pic/freedownload.gif"]: "0"
img[src="pic/silver.gif"]: "0.5"
img[src="pic/bronze.gif"]: "0.75"
"*": "1"
uploadvolumefactor:
case:
img[src="pic/diamond.png"]: "2"
"*": "1"
---
site: bluebirdhd
name: BlueBird
language: ru-ru
type: private
encoding: windows-1251
links:
- https://bluebird-hd.org/
caps:
categorymappings:
- {id: 1, cat: Movies, desc: "Films"}
- {id: 2, cat: TV/Anime, desc: "Cartoons"}
- {id: 3, cat: TV/Documentary, desc: "documentary"}
- {id: 4, cat: Audio, desc: "Show / Music"}
- {id: 5, cat: TV/Sport, desc: "Sport"}
- {id: 6, cat: TV, desc: "TV series"}
- {id: 7, cat: XXX, desc: "erotica"}
- {id: 8, cat: Other, desc: "Demo / Misc"}
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: /takelogin.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: div.error
test:
path: /browse.php
search:
path: /browse.php
inputs:
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
search: "{{ .Query.Keywords }}"
incldead: "1"
rows:
selector: table > tbody > tr:has(a[href^="details.php?id="])
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^="download.php?id="]
attribute: href
grabs:
selector: a[href*="&snatched=1#snatched"]
filters:
- name: regexp
args: (\d+)
size:
selector: td:nth-child(7)
remove: a
date:
selector: div#cleft > font
seeders:
selector: td:nth-child(5)
leechers:
selector: td:nth-child(6)
banner:
selector: a.tname
attribute: onmouseover
filters:
- name: regexp
args: src=([^\s]+)
downloadvolumefactor:
case:
img[src="pic/diamond.png"]: "0"
img[src="pic/freedownload.gif"]: "0"
img[src="pic/silver.gif"]: "0.5"
img[src="pic/bronze.gif"]: "0.75"
"*": "1"
uploadvolumefactor:
case:
img[src="pic/diamond.png"]: "2"
"*": "1"

View File

@@ -0,0 +1,83 @@
---
site: blutopia
name: Blutopia
description: "HD Movie tracker"
language: en-us
type: private
encoding: UTF-8
links:
- https://blutopia.xyz/
caps:
categorymappings:
- {id: 1, cat: Movies, desc: "Movies"}
- {id: 2, cat: TV, desc: "TV"}
- {id: 3, cat: Movies, desc: "FANRES"}
modes:
search: [q]
login:
path: /login
method: form
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: table.main:contains("Login Failed!")
test:
path: /torrents
download:
selector: a[href^="/download.php/"]
search:
path: /torrents/search
inputs:
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
name: "{{ .Query.Keywords }}"
category_id: 1
type: BD50
order: created_at:desc
rows:
selector: table.table > tbody > tr
fields:
# category:
# selector: a[href^="categories"]
# attribute: href
title:
remove: ul
selector: td:nth-child(2)
download:
selector: a.view-torrent
attribute: href
filters:
- name: replace
args: ["/torrents/", "/download/"]
details:
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)
filters:
- name: regexp
args: (\d+)
date:
selector: td:nth-child(3)
filters:
- name: append
args: " ago"
downloadvolumefactor:
case:
#"i[data-original-title=\"100% Free\"]": "0"
"*": "1"
uploadvolumefactor:
case:
#"i[data-original-title=\"Double upload\"]": "2"
"*": "1"

View File

@@ -120,7 +120,7 @@
search_type: "name"
searchin: "title"
error:
- selector: div.error
- selector: div.error:not(:contains("Não existem resultados encontrados."))
rows:
selector: table#torrents_table_classic > tbody > tr:has(td.torrent_name)
fields:

View File

@@ -1,104 +1,105 @@
---
site: chdbits
name: CHDBits
description: "A general tracker"
language: zh-cn
type: private
encoding: UTF-8
links:
- https://chdbits.co
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, desc: "TV Shows"}
- {id: 406, cat: Audio/Video, desc: "Music Videos"}
- {id: 407, cat: TV/Sport, desc: "Sports"}
- {id: 409, cat: Other, desc: "Misc"}
- {id: 408, cat: Audio, desc: "HQ Audio"}
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: /takelogin.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: td.embedded:has(h2:contains("failed"))
test:
path: /torrents.php
ratio:
path: /torrents.php
selector: table#info_block
filters:
- name: regexp
args: "Ratio:\\s(.*?)\\s\\s"
search:
path: /torrents.php
method: post
inputs:
$raw: "{{range .Categories}}cat{{.}}=1&{{end}}"
search: "{{ .Query.Keywords }}"
incldead: "1"
rows:
selector: table.torrents > tbody > tr:has(table.torrentname)
fields:
title:
selector: a[href^="details.php?id="]
title|optional:
selector: a[title][href^="details.php?id="]
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^="download.php?id="]
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[title]
attribute: title
filters:
- name: append
args: " +08:00"
- name: dateparse
args: "2006-01-02 15:04:05 -07:00"
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"
description:
selector: td:nth-child(2)
remove: a, img
---
site: chdbits
name: CHDBits
description: "A general tracker"
language: zh-cn
type: private
encoding: UTF-8
links:
- https://chdbits.co
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, desc: "TV Shows"}
- {id: 406, cat: Audio/Video, desc: "Music Videos"}
- {id: 407, cat: TV/Sport, desc: "Sports"}
- {id: 409, cat: Other, desc: "Misc"}
- {id: 408, cat: Audio, desc: "HQ Audio"}
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: /takelogin.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: td.embedded:has(h2:contains("failed"))
test:
path: /torrents.php
ratio:
path: /torrents.php
selector: table#info_block
filters:
- name: regexp
args: "Ratio:\\s(.*?)\\s\\s"
search:
path: /torrents.php
method: post
inputs:
$raw: "{{range .Categories}}cat{{.}}=1&{{end}}"
search: "{{ .Query.Keywords }}"
incldead: "1"
rows:
selector: table.torrents > tbody > tr:has(table.torrentname)
fields:
title:
selector: a[href^="details.php?id="]
title:
optional: true
selector: a[title][href^="details.php?id="]
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^="download.php?id="]
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[title]
attribute: title
filters:
- name: append
args: " +08:00"
- name: dateparse
args: "2006-01-02 15:04:05 -07:00"
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"
description:
selector: td:nth-child(2)
remove: a, img

View File

@@ -1,99 +1,99 @@
---
site: cinemageddon
name: Cinemageddon
description: "B-movie tracker"
language: en-us
type: private
encoding: UTF-8
links:
- http://cinemageddon.net/
caps:
categorymappings:
- {id: 1, cat: Movies, desc: "Action"}
- {id: 2, cat: Movies, desc: "Horror"}
- {id: 3, cat: Movies, desc: "Martial Arts"}
- {id: 4, cat: Movies, desc: "Comedy"}
- {id: 5, cat: Movies, desc: "Other"}
- {id: 6, cat: Movies, desc: "Hidden Gems"}
- {id: 7, cat: Movies, desc: "Sci-Fi"}
- {id: 8, cat: Movies, desc: "Gore"}
- {id: 9, cat: Movies, desc: "Exploitation"}
- {id: 11, cat: Movies, desc: "OST"}
- {id: 12, cat: Movies, desc: "XXX"}
- {id: 13, cat: Movies, desc: "Thriller"}
- {id: 14, cat: Movies, desc: "Adventure"}
- {id: 15, cat: Movies, desc: "Documentary"}
- {id: 16, cat: Movies, desc: "Western"}
- {id: 17, cat: Movies, desc: "Family"}
- {id: 18, cat: Movies, desc: "Drama"}
- {id: 19, cat: Movies, desc: "Ebooks"}
- {id: 20, cat: Movies, desc: "Softcore"}
- {id: 21, cat: Movies, desc: "Tinfoil Hat"}
- {id: 22, cat: Movies, desc: "Trailers"}
modes:
search: [q]
login:
path: takelogin.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: table:contains("Login failed!")
test:
path: index.php
download:
selector: a[href^="download.php?id="]
search:
path: browse.php
inputs:
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
search: "{{ .Query.Keywords }}"
rows:
selector: table.torrenttable > tbody > tr:has(a[href^="browse.php?cat="])
fields:
category:
text: 1
title:
selector: td:nth-child(2)
download:
selector: a[href^="details.php?id="]
attribute: href
filters:
- name: replace
args: ["details.php?id=", "download.php?id="]
details:
selector: a[href^="details.php?id="]
attribute: href
grabs:
selector: td:nth-child(6)
files:
selector: td:nth-child(5)
filters:
- name: regexp
args: (\d+)\s+file
size:
selector: td:nth-child(5)
filters:
- name: regexp
args: (\d+.*(MB|GB)+)
seeders:
selector: td:nth-child(7)
leechers:
selector: td:nth-child(8)
date:
selector: td:nth-child(4)
filters:
- name: regexp
args: (\d{4}-\d{2}-\d{2})
downloadvolumefactor:
case:
"*": "1"
uploadvolumefactor:
case:
---
site: cinemageddon
name: Cinemageddon
description: "B-movie tracker"
language: en-us
type: private
encoding: UTF-8
links:
- http://cinemageddon.net/
caps:
categorymappings:
- {id: 1, cat: Movies, desc: "Action"}
- {id: 2, cat: Movies, desc: "Horror"}
- {id: 3, cat: Movies, desc: "Martial Arts"}
- {id: 4, cat: Movies, desc: "Comedy"}
- {id: 5, cat: Movies, desc: "Other"}
- {id: 6, cat: Movies, desc: "Hidden Gems"}
- {id: 7, cat: Movies, desc: "Sci-Fi"}
- {id: 8, cat: Movies, desc: "Gore"}
- {id: 9, cat: Movies, desc: "Exploitation"}
- {id: 11, cat: Movies, desc: "OST"}
- {id: 12, cat: Movies, desc: "XXX"}
- {id: 13, cat: Movies, desc: "Thriller"}
- {id: 14, cat: Movies, desc: "Adventure"}
- {id: 15, cat: Movies, desc: "Documentary"}
- {id: 16, cat: Movies, desc: "Western"}
- {id: 17, cat: Movies, desc: "Family"}
- {id: 18, cat: Movies, desc: "Drama"}
- {id: 19, cat: Movies, desc: "Ebooks"}
- {id: 20, cat: Movies, desc: "Softcore"}
- {id: 21, cat: Movies, desc: "Tinfoil Hat"}
- {id: 22, cat: Movies, desc: "Trailers"}
modes:
search: [q]
login:
path: takelogin.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: table:contains("Login failed!")
test:
path: index.php
download:
selector: a[href^="download.php?id="]
search:
path: browse.php
inputs:
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
search: "{{ .Query.Keywords }}"
rows:
selector: table.torrenttable > tbody > tr:has(a[href^="browse.php?cat="])
fields:
category:
text: 1
title:
selector: td:nth-child(2)
download:
selector: a[href^="details.php?id="]
attribute: href
filters:
- name: replace
args: ["details.php?id=", "download.php?id="]
details:
selector: a[href^="details.php?id="]
attribute: href
grabs:
selector: td:nth-child(6)
files:
selector: td:nth-child(5)
filters:
- name: regexp
args: (\d+)\s+file
size:
selector: td:nth-child(5)
filters:
- name: regexp
args: (\d+.*(MB|GB)+)
seeders:
selector: td:nth-child(7)
leechers:
selector: td:nth-child(8)
date:
selector: td:nth-child(4)
filters:
- name: regexp
args: (\d{4}-\d{2}-\d{2})
downloadvolumefactor:
case:
"*": "1"
uploadvolumefactor:
case:
"*": "1"

View File

@@ -1,97 +1,94 @@
---
site: cinematik
name: Cinematik
description: "Non-Hollywood movie tracker"
language: en-us
type: private
encoding: UTF-8
links:
- https://www.cinematik.net
caps:
categorymappings:
- {id: 1, cat: Movies, desc: "Comedy"}
- {id: 4, cat: Movies, desc: "Action"}
- {id: 6, cat: Movies, desc: "Drama"}
- {id: 7, cat: Movies, desc: "Documentary"}
- {id: 9, cat: Movies, desc: "Crime"}
- {id: 12, cat: Movies, desc: "Sci-Fi"}
- {id: 17, cat: Movies, desc: "War"}
- {id: 21, cat: Movies, desc: "Silent Films"}
- {id: 23, cat: Movies, desc: "TV-Series"}
- {id: 24, cat: Movies, desc: "Animation"}
- {id: 25, cat: Movies, desc: "Exploitation"}
- {id: 26, cat: Movies, desc: "Experimental"}
- {id: 27, cat: Movies, desc: "Fantasy"}
- {id: 29, cat: Movies, desc: "Short"}
- {id: 30, cat: Movies, desc: "Western"}
- {id: 32, cat: Movies, desc: "Foreign Languages"}
- {id: 33, cat: Movies, desc: "Thriller"}
- {id: 34, cat: Movies, desc: "Opera and Musical"}
modes:
search: [q]
login:
path: takelogin.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: table:contains("Login failed!")
test:
path: my.php
download:
selector: a[href^="download.php?id="]
search:
path: browse.php
inputs:
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
search: "{{ .Query.Keywords }}"
rows:
selector: table[border="1"] tr:not(:first-child)
fields:
category:
text: 1
title:
selector: td:nth-child(2) a
download:
selector: a[href^="details.php?id="]
attribute: href
filters:
- name: replace
args: ["details.php?id=", "download.php?id="]
details:
selector: a[href^="details.php?id="]
attribute: href
grabs:
selector: td:nth-child(8)
filters:
- name: regexp
args: ([\d,]+)
files:
selector: td:nth-child(5)
size:
selector: td:nth-child(7)
seeders:
selector: td:nth-child(9)
leechers:
selector: td:nth-child(10)
date:
selector: td:nth-child(11)
filters:
- name: append
args: " ago"
downloadvolumefactor:
case:
"img[title=\"Golden Torrent: No Download Stats are Recorded\"]": "0"
"img[title=\"Silver Torrent: Download Stats are 25% Recorded\"]": "0.25"
"img[title=\"Platinum Torrent: No Download Stats are Recorded, Upload Stats are Doubled!\"]": "0"
"*": "1"
uploadvolumefactor:
case:
"img[title=\"Platinum Torrent: No Download Stats are Recorded, Upload Stats are Doubled!\"]": "2"
---
site: cinematik
name: Cinematik
description: "Non-Hollywood movie tracker"
language: en-us
type: private
encoding: UTF-8
links:
- https://www.cinematik.net
caps:
categorymappings:
- {id: 1, cat: Movies, desc: "Comedy"}
- {id: 4, cat: Movies, desc: "Action"}
- {id: 6, cat: Movies, desc: "Drama"}
- {id: 7, cat: Movies, desc: "Documentary"}
- {id: 9, cat: Movies, desc: "Crime"}
- {id: 12, cat: Movies, desc: "Sci-Fi"}
- {id: 17, cat: Movies, desc: "War"}
- {id: 21, cat: Movies, desc: "Silent Films"}
- {id: 23, cat: Movies, desc: "TV-Series"}
- {id: 24, cat: Movies, desc: "Animation"}
- {id: 25, cat: Movies, desc: "Exploitation"}
- {id: 26, cat: Movies, desc: "Experimental"}
- {id: 27, cat: Movies, desc: "Fantasy"}
- {id: 29, cat: Movies, desc: "Short"}
- {id: 30, cat: Movies, desc: "Western"}
- {id: 32, cat: Movies, desc: "Foreign Languages"}
- {id: 33, cat: Movies, desc: "Thriller"}
- {id: 34, cat: Movies, desc: "Opera and Musical"}
modes:
search: [q]
login:
path: takelogin.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: table:contains("Login failed!")
test:
path: my.php
download:
selector: a[href^="download.php?id="]
search:
path: browse.php
inputs:
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
search: "{{ .Query.Keywords }}"
rows:
selector: table[border="1"] tr:not(:first-child)
fields:
category:
text: 1
title:
selector: td:nth-child(2) a
download:
selector: a[href^="details.php?id="]
attribute: href
filters:
- name: replace
args: ["details.php?id=", "download.php?id="]
details:
selector: a[href^="details.php?id="]
attribute: href
grabs:
selector: td:nth-child(8)
filters:
- name: regexp
args: ([\d,]+)
files:
selector: td:nth-child(5)
size:
selector: td:nth-child(7)
seeders:
selector: td:nth-child(9)
leechers:
selector: td:nth-child(10)
date:
selector: td:nth-child(11) div.addedtor
downloadvolumefactor:
case:
"img[title=\"Golden Torrent: No Download Stats are Recorded\"]": "0"
"img[title=\"Silver Torrent: Download Stats are 25% Recorded\"]": "0.25"
"img[title=\"Platinum Torrent: No Download Stats are Recorded, Upload Stats are Doubled!\"]": "0"
"*": "1"
uploadvolumefactor:
case:
"img[title=\"Platinum Torrent: No Download Stats are Recorded, Upload Stats are Doubled!\"]": "2"
"*": "1"

View File

@@ -1,64 +1,64 @@
---
site: classix
name: Classix
description: "Classic movie tracker"
language: en-us
type: private
encoding: UTF-8
links:
- http://classix-unlimited.co.uk/
caps:
categorymappings:
- {id: 1, cat: Movies, desc: "Movies"}
modes:
search: [q]
login:
path: account-login.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: div.myContent:contains("Access Denied")
test:
path: index.php
download:
selector: a[href^="download.php?id="]
search:
path: torrents-search.php
inputs:
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
search: "{{ .Query.Keywords }}"
rows:
selector: table > tbody > tr:has(a[href^="torrents.php?cat="])
fields:
category:
text: 1
title:
selector: td:nth-child(3)
download:
selector: a[href^="torrents-details.php?id="]
attribute: href
filters:
- name: replace
args: ["torrents-details.php?id=", "download.php?id="]
details:
selector: a[href^="torrents-details.php?id="]
attribute: href
size:
selector: td:nth-child(7)
seeders:
selector: td:nth-child(8)
leechers:
selector: td:nth-child(9)
downloadvolumefactor:
case:
"*": "1"
uploadvolumefactor:
case:
---
site: classix
name: Classix
description: "Classic movie tracker"
language: en-us
type: private
encoding: UTF-8
links:
- http://classix-unlimited.co.uk/
caps:
categorymappings:
- {id: 1, cat: Movies, desc: "Movies"}
modes:
search: [q]
login:
path: account-login.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: div.myContent:contains("Access Denied")
test:
path: index.php
download:
selector: a[href^="download.php?id="]
search:
path: torrents-search.php
inputs:
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
search: "{{ .Query.Keywords }}"
rows:
selector: table > tbody > tr:has(a[href^="torrents.php?cat="])
fields:
category:
text: 1
title:
selector: td:nth-child(3)
download:
selector: a[href^="torrents-details.php?id="]
attribute: href
filters:
- name: replace
args: ["torrents-details.php?id=", "download.php?id="]
details:
selector: a[href^="torrents-details.php?id="]
attribute: href
size:
selector: td:nth-child(7)
seeders:
selector: td:nth-child(8)
leechers:
selector: td:nth-child(9)
downloadvolumefactor:
case:
"*": "1"
uploadvolumefactor:
case:
"*": "1"

View File

@@ -0,0 +1,88 @@
---
site: cpasbien
name: cpasbien
language: fr-fr
type: public
encoding: UTF-8
links:
- http://cpabien.cc/
caps:
categorymappings:
- {id: films, cat: Movies, desc: "Movies"}
- {id: series, cat: TV, desc: "TV"}
modes:
search: [q]
tv-search: [q, season, ep]
settings: []
download:
selector: "#telecharger"
search:
path: "/search.php?t={{ .Query.Keywords }}"
rows:
selector: div[class^='ligne']
fields:
site_date:
selector: a
filters:
# date is at the end of the title, so we get it and name it site_date
- name: regexp
args: "(\\w+)$"
title:
selector: a
filters:
# now we put the date at the right place according scene naming rules using .Result.site_date
- name: replace
args: ["FRENCH", "{{ .Result.site_date }} FRENCH"]
- name: replace
args: ["TRUEFRENCH", "{{ .Result.site_date }} TRUEFRENCH"]
- name: replace
args: ["VOSTFR", "{{ .Result.site_date }} VOSTFR"]
# and we delete it at the end
- name: re_replace
args: ["(\\w+)$", ""]
details:
selector: a
attribute: href
download:
selector: a
attribute: href
size:
selector: div.poid
filters:
- name: re_replace
args: [ "\\.(\\d) Ko", "$1X00"]
- name: re_replace
args: [ " Ko", "000"]
- name: re_replace
args: [ "\\.(\\d) Mo", "$1X00000"]
- name: re_replace
args: [ " Mo", "000000"]
- name: re_replace
args: [ "\\.(\\d) Go", "$1X00000000"]
- name: re_replace
args: [ " Go", "000000000"]
- name: re_replace
args: [ "\\.(\\d) To", "$1X00000000000"]
- name: re_replace
args: [ " To", "000000000000"]
- name: replace
args: [ "X", "" ]
seeders:
text: 0
seeders:
selector: div.up
optional: true
leechers:
text: 0
leechers:
selector: div.down
optional: true
downloadvolumefactor:
text: "0"
uploadvolumefactor:
text: "1"

View File

@@ -1,94 +1,94 @@
---
site: czteam
name: CZTeam
language: cs-cz
type: private
encoding: UTF-8
links:
- https://czteam.club/
caps:
categorymappings:
- {id: 1, cat: Movies, desc: "Movies"}
- {id: 2, cat: TV, desc: "TV-Eps"}
- {id: 3, cat: Audio, desc: "Music"}
- {id: 4, cat: PC/Games, desc: "Games"}
- {id: 5, cat: PC/ISO, desc: "Software"}
- {id: 6, cat: XXX, desc: "XxX"}
- {id: 7, cat: Other, desc: "Other"}
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: login.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
keeplogged: 1
login: "Log in"
error:
- selector: form#loginform > span.warning
test:
path: torrents.php
search:
path: torrents.php
inputs:
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
searchstr: "{{ .Query.Keywords }}"
order_by: time
order_way: desc
action: basic
searchsubmit: 1
rows:
selector: table#torrent_table > tbody > tr.torrent
fields:
download:
selector: a[href^="torrents.php?action=download&id="]
attribute: href
title:
selector: a.torrent_name
category:
selector: td.cats_col
case:
div.cats_movies: 1
div.cats_tveps: 2
div.cats_music: 3
div.cats_games: 4
div.cats_software: 5
div.cats_xxx: 6
div.cats_other: 7
details:
selector: a.torrent_name
attribute: href
banner:
selector: a.torrent_name
optional: true
attribute: cover
files:
selector: td:nth-child(3)
date:
selector: td:nth-child(4)
size:
selector: td:nth-child(5)
grabs:
selector: td:nth-child(6)
seeders:
selector: td:nth-child(7)
leechers:
selector: td:nth-child(8)
downloadvolumefactor:
case:
"strong.tl_free": "0"
"strong.tl_neutral": "0"
"*": "1"
uploadvolumefactor:
case:
"strong.tl_neutral": "0"
"*": "1"
description:
selector: div.torrent_info
---
site: czteam
name: CZTeam
language: cs-cz
type: private
encoding: UTF-8
links:
- https://czteam.club/
caps:
categorymappings:
- {id: 1, cat: Movies, desc: "Movies"}
- {id: 2, cat: TV, desc: "TV-Eps"}
- {id: 3, cat: Audio, desc: "Music"}
- {id: 4, cat: PC/Games, desc: "Games"}
- {id: 5, cat: PC/ISO, desc: "Software"}
- {id: 6, cat: XXX, desc: "XxX"}
- {id: 7, cat: Other, desc: "Other"}
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: login.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
keeplogged: 1
login: "Log in"
error:
- selector: form#loginform > span.warning
test:
path: torrents.php
search:
path: torrents.php
inputs:
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
searchstr: "{{ .Query.Keywords }}"
order_by: time
order_way: desc
action: basic
searchsubmit: 1
rows:
selector: table#torrent_table > tbody > tr.torrent
fields:
download:
selector: a[href^="torrents.php?action=download&id="]
attribute: href
title:
selector: a.torrent_name
category:
selector: td.cats_col
case:
div.cats_movies: 1
div.cats_tveps: 2
div.cats_music: 3
div.cats_games: 4
div.cats_software: 5
div.cats_xxx: 6
div.cats_other: 7
details:
selector: a.torrent_name
attribute: href
banner:
selector: a.torrent_name
optional: true
attribute: cover
files:
selector: td:nth-child(3)
date:
selector: td:nth-child(4)
size:
selector: td:nth-child(5)
grabs:
selector: td:nth-child(6)
seeders:
selector: td:nth-child(7)
leechers:
selector: td:nth-child(8)
downloadvolumefactor:
case:
"strong.tl_free": "0"
"strong.tl_neutral": "0"
"*": "1"
uploadvolumefactor:
case:
"strong.tl_neutral": "0"
"*": "1"
description:
selector: div.torrent_info
remove: strong

View File

@@ -0,0 +1,136 @@
 site: cztorrent
name: CzTorrent
language: cs-cz
type: semi-private
encoding: UTF-8
links:
- https://tracker.cztorrent.net/
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: 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: 11, cat: Movies/DVD, desc: "Filmy - DVD"}
- {id: 30, cat: Movies/DVD, desc: "Filmy - DVD full"}
- {id: 5, cat: Movies, desc: "Filmy - kreslené"}
- {id: 31, cat: Movies/HD, desc: "HD"}
- {id: 38, cat: Movies/HD, desc: "HD-LQ"}
- {id: 3, cat: PC/Games, desc: "Hry"}
- {id: 2, cat: Audio, desc: "Hudba"}
- {id: 34, cat: Audio/Video, desc: "Hudba DVD/HD"}
- {id: 6, cat: Books, desc: "Knihy"}
- {id: 13, cat: Console, desc: "Konzole"}
- {id: 32, cat: Audio, desc: "Mluvené slovo"}
- {id: 16, cat: PC/Phone-Other, desc: "Mobil, PDA"}
- {id: 4, cat: Other, desc: "Ostatní"}
- {id: 29, cat: Audio, desc: "Soundtrack"}
- {id: 19, cat: Audio/Video, desc: "Videoklipy"}
- {id: 24, cat: XXX, desc: "xXx"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
login:
path: /login-page
method: form
form: form[action^="/login"]
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
persistent_login: "1"
error:
- selector: div.error
test:
path: /torrents
search:
path: /torrents
inputs:
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
s: "{{ .Keywords }}"
t: "1"
rows:
selector: tr.torr_hover
fields:
title:
selector: td.detaily a
filters:
- name: re_replace
args: [".*? / ", ""]
- name: diacritics
args: replace
- name: replace
args: ["serie", ""]
- name: replace
args: ["Serie", ""]
- name: re_replace
args: ["(\\d{2})\\.", "S$1"]
- name: re_replace
args: ["(\\d{1})\\.", "S0$1"]
category:
selector: td:nth-child(2)
case:
":contains(\"Filmy\")": 1
":contains(\"Seriály\")": 25
":contains(\"Filmy - dokument\")": 23
":contains(\"Aplikace\")": 22
":contains(\"Filmy - 3D\")": 36
":contains(\"Filmy - anime\")": 35
":contains(\"Filmy - Blu-ray\")": 37
":contains(\"Filmy - DVD\")": 11
":contains(\"Filmy - DVD full\")": 30
":contains(\"Filmy - kreslené\")": 5
":contains(\"HD\")": 31
":contains(\"HD-LQ\")": 38
":contains(\"Hry\")": 3
":contains(\"Hudba\")": 2
":contains(\"Hudba DVD/HD\")": 34
":contains(\"Knihy\")": 6
":contains(\"Konzole\")": 13
":contains(\"Mluvené slovo\")": 32
":contains(\"Mobil, PDA\")": 16
":contains(\"Ostatní\")": 4
":contains(\"Soundtrack\")": 29
":contains(\"Videoklipy\")": 19
":contains(\"xXx\")": 24
details:
selector: td.detaily a
attribute: href
download:
selector: td.download a
attribute: href
size:
selector: td.detaily
filters:
- name: split
args: [ "|", 0 ]
- name: regexp
args: "Velikost: (.+?) ?$"
date:
selector: td:nth-child(4)
filters:
- name: split
args: [ "|", 1 ]
- name: regexp
args: "Přidán: (.+?) ?$"
- name: append
args: " +02:00"
- name: dateparse
args: "2.1.2006 15:04 -07:00"
seeders:
selector: td:nth-child(7) span
leechers:
selector: td:nth-child(8) span
downloadvolumefactor:
case:
"*": "1"
uploadvolumefactor:
case:
"*": "1"

View File

@@ -1,119 +1,126 @@
---
site: datascene
name: DataScene
language: ro-ro
type: private
encoding: windows-1252
links:
- http://datascene.net/
caps:
categorymappings:
- {id: 3, cat: TV/Anime, desc: "Anime | Cartoon"}
- {id: 15, cat: PC/0day, desc: "Appz | Win"}
- {id: 4, cat: PC/0day, desc: "Appz | Linux"}
- {id: 6, cat: Books, desc: "E-Book"}
- {id: 10, cat: PC/Games, desc: "Games | PC Iso"}
- {id: 9, cat: PC/Games, desc: "Games | PC Rips"}
- {id: 11, cat: Console, desc: "Games | Pack"}
- {id: 43, cat: Console, desc: "Games | Console"}
- {id: 29, cat: Other, desc: "Images"}
- {id: 2, cat: Other, desc: "MiSC"}
- {id: 5, cat: PC/Phone-Other, desc: "Mobile"}
- {id: 27, cat: Movies, desc: "Movies | Pack"}
- {id: 46, cat: Movies/3D, desc: "Movies | 3D"}
- {id: 26, cat: Movies/SD, desc: "Movies | Cam"}
- {id: 25, cat: Movies, desc: "Movies | Documentary"}
- {id: 24, cat: Movies/DVD, desc: "Movies | DVD-R"}
- {id: 32, cat: Movies/DVD, desc: "Movies | DVD-RO"}
- {id: 23, cat: Movies/HD, desc: "Movies | HD"}
- {id: 31, cat: Movies/HD, desc: "Movies | HD-Ro"}
- {id: 34, cat: Movies/Foreign, desc: "Movies | Hindi"}
- {id: 30, cat: Movies/SD, desc: "Movies | Xvid"}
- {id: 36, cat: Movies/SD, desc: "Movies | Xvid-Ro"}
- {id: 21, cat: Audio/Video, desc: "Music | Video"}
- {id: 19, cat: Audio , desc: "Music | Mp3/Flac"}
- {id: 18, cat: Other, desc: "Other"}
- {id: 42, cat: Other, desc: "Premiera | DsT"}
- {id: 14, cat: TV/Sport, desc: "Sport"}
- {id: 47, cat: TV/SD, desc: "Tv | Episodes"}
- {id: 28, cat: TV/HD, desc: "Tv-HD | Episodes"}
- {id: 13, cat: Other, desc: "Tutoriale"}
- {id: 12, cat: XXX, desc: "XxX"}
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: /takelogin.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: td.embedded:has(h2:contains("failed"))
test:
path: /browse.php
ratio:
path: /browse.php
selector: font:contains("Ratio:") > span
search:
path: /browse.php
inputs:
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
search: "{{ .Query.Keywords }}"
incldead: 1
rows:
selector: tr:has(a.tname)
fields:
title:
selector: a.tname
attribute: title
details:
selector: a.tname
attribute: href
category:
selector: a[href^="browse.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
download:
selector: a[href^="/download.php/"]
attribute: href
grabs:
selector: td:nth-child(7)
filters:
- name: regexp
args: (\d+)
size:
selector: td:nth-child(6)
date:
selector: td:nth-child(2) > right > div:has(font:contains("Uploaded"))
remove: div > font
filters:
- name: trim
args: ":"
seeders:
selector: td:nth-child(8)
leechers:
selector: td:nth-child(9)
banner:
selector: a.tname
attribute: onmouseover
filters:
- name: regexp
args: src=([^\s]+)
downloadvolumefactor:
case:
"img[src=\"pic/free.gif\"]": "0"
"*": "1"
uploadvolumefactor:
case:
"*": "1"
description:
selector: td:nth-child(2) > right
---
site: datascene
name: DataScene
language: ro-ro
type: private
encoding: windows-1252
links:
- http://datascene.net/
caps:
categorymappings:
- {id: 3, cat: TV/Anime, desc: "Anime | Cartoon"}
- {id: 15, cat: PC/0day, desc: "Appz | Win"}
- {id: 4, cat: PC/0day, desc: "Appz | Linux"}
- {id: 6, cat: Books, desc: "E-Book"}
- {id: 10, cat: PC/Games, desc: "Games | PC Iso"}
- {id: 9, cat: PC/Games, desc: "Games | PC Rips"}
- {id: 11, cat: Console, desc: "Games | Pack"}
- {id: 43, cat: Console, desc: "Games | Console"}
- {id: 29, cat: Other, desc: "Images"}
- {id: 2, cat: Other, desc: "MiSC"}
- {id: 5, cat: PC/Phone-Other, desc: "Mobile"}
- {id: 27, cat: Movies, desc: "Movies | Pack"}
- {id: 46, cat: Movies/3D, desc: "Movies | 3D"}
- {id: 26, cat: Movies/SD, desc: "Movies | Cam"}
- {id: 25, cat: Movies, desc: "Movies | Documentary"}
- {id: 24, cat: Movies/DVD, desc: "Movies | DVD-R"}
- {id: 32, cat: Movies/DVD, desc: "Movies | DVD-RO"}
- {id: 23, cat: Movies/HD, desc: "Movies | HD"}
- {id: 31, cat: Movies/HD, desc: "Movies | HD-Ro"}
- {id: 34, cat: Movies/Foreign, desc: "Movies | Hindi"}
- {id: 30, cat: Movies/SD, desc: "Movies | Xvid"}
- {id: 36, cat: Movies/SD, desc: "Movies | Xvid-Ro"}
- {id: 21, cat: Audio/Video, desc: "Music | Video"}
- {id: 19, cat: Audio , desc: "Music | Mp3/Flac"}
- {id: 18, cat: Other, desc: "Other"}
- {id: 42, cat: Other, desc: "Premiera | DsT"}
- {id: 14, cat: TV/Sport, desc: "Sport"}
- {id: 47, cat: TV/SD, desc: "Tv | Episodes"}
- {id: 28, cat: TV/HD, desc: "Tv-HD | Episodes"}
- {id: 13, cat: Other, desc: "Tutoriale"}
- {id: 12, cat: XXX, desc: "XxX"}
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: /takelogin.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: td.embedded:has(h2:contains("failed"))
test:
path: /browse.php
ratio:
path: /browse.php
selector: font:contains("Ratio:") > span
search:
path: /browse.php
inputs:
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
search: "{{ .Query.Keywords }}"
incldead: 1
rows:
selector: div.ncls > table > tbody > tr:has(a.tname)
fields:
title-attribute:
selector: a.tname
attribute: title
title-text:
selector: a.tname
title:
text: "{{if .Result.title-attribute }}{{ .Result.title-attribute }}{{else}}{{ .Result.title-text }}{{end}}"
details:
selector: a.tname
attribute: href
category:
selector: a[href^="browse.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
download:
selector: a[href^="/download.php/"], a[href^="/downloadd.php/"] # some releases use a download link with two d's
attribute: href
grabs:
selector: td:nth-child(8)
filters:
- name: regexp
args: (\d+)
size:
selector: td:nth-child(7)
date:
selector: td:nth-child(2) > right > div:has(font:contains("Uploaded"))
filters:
- name: replace
args: ["Uploaded: ", ""]
seeders:
selector: td:nth-child(9)
leechers:
selector: td:nth-child(10)
banner:
selector: a.tname
attribute: onmouseover
filters:
- name: regexp
args: src=([^\s]+)
imdb:
selector: a[href^="http://www.imdb.com/title/"]
optional: true
attribute: href
downloadvolumefactor:
case:
"img[src=\"pic/free.png\"]": "0"
"*": "1"
uploadvolumefactor:
case:
"*": "1"
description:
selector: td:nth-child(2) > right
remove: div

View File

@@ -0,0 +1,92 @@
---
site: deildu
name: Deildu
language: is-is
type: semi-private
encoding: iso-8859-1
links:
- https://deildu.net/
caps:
categorymappings:
- {id: 11, cat: Audio, desc: "Music"}
- {id: 6, cat: Movies, desc: "Movies"}
- {id: 5, cat: Movies/DVD, desc: "Movies DVDR"}
- {id: 8, cat: TV, desc: "TV shows"}
- {id: 12, cat: Movies/HD, desc: "HD Movies"}
- {id: 12, cat: TV/HD, desc: "HD TV"}
- {id: 9, cat: TV/Documentary, desc: "TV - Documentaries"}
- {id: 9, cat: Movies/Other, desc: "Movie - Documentaries"}
- {id: 2, cat: TV/Sport, desc: "Sports"}
- {id: 7, cat: Movies/Other, desc: "Cartoons"}
- {id: 14, cat: PC, desc: "Windows"}
- {id: 3, cat: PC/Mac, desc: "Mac"}
- {id: 10, cat: PC/Games, desc: "Games"}
- {id: 4, cat: XXX, desc: "XXX"}
- {id: 1, cat: Other, desc: "Other"}
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: takelogin.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
keeplogged: 1
test:
path: my.php
search:
path: browse.php
inputs:
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
search: "{{ .Query.Keywords }}"
incldead: "1"
rows:
selector: table[class="torrentlist"] > tbody > tr:has(a[href*="details.php?id="])
filters:
- name: andmatch
args: 55
fields:
download:
selector: a[href^="download.php"]
attribute: href
title:
selector: td:nth-child(2)
# category:
# selector: a[href^="browse.php?cat="]
# attribute: href
# filters:
# - name: querystring
# args: cat
details:
selector: a[href^="details.php?id="]
attribute: href
size:
selector: td:nth-child(7)
files:
selector: td:nth-child(4)
grabs:
selector: td:nth-child(8)
filters:
- name: regexp
args: ([\d,]+)
seeders:
selector: td:nth-child(9)
leechers:
selector: td:nth-child(10)
date:
selector: td:nth-child(6)
filters:
- name: dateparse
args: "2006-01-0215:04:05"
downloadvolumefactor:
case:
"*": "1"
uploadvolumefactor:
case:
"*": "1"

View File

@@ -1,4 +1,4 @@
---
---
site: diablotorrent
name: Diablo Torrent
language: hu-hu
@@ -58,32 +58,25 @@
movie-search: [q]
login:
path: login.php
submitpath: login.php
path: login
submitpath: login/run
method: form
inputs:
referer: ""
nev: "{{ .Config.username }}"
jelszo: "{{ .Config.password }}"
fsv: "-1"
ssl: "1"
fsv: "0"
login: "1"
belepes: "1"
getselectorinputs:
c:
selector: "script:contains(\"login.php\")"
filters:
- name: regexp
args: "login.php\\?c=(.*?)&rhash="
rhash:
text: "123"
rhash: "123"
test:
path: browse.php
path: browse
search:
path: browse.php
path: browse
inputs:
$raw: "{{range .Categories}}category[]={{.}}&{{end}}"
cim: "{{ .Keywords }}"
search: "{{ .Keywords }}"
s_alapjan: "7"
s_sorrend: "desc"
rows:
@@ -93,10 +86,8 @@
download:
selector: div.box_download > a
attribute: href
#title: # shortened
# selector: a.box_name_a
title:
selector: div.torrent_details_po + h2
selector: a.box_name_a > span
details:
selector: a.box_name_a
attribute: href
@@ -123,13 +114,15 @@
args: "2006-01-0215:04:05 -07:00"
size:
selector: div.box_size
banner|optional:
banner:
optional: true
selector: a.cover_a
attribute: title
filters:
- name: regexp
args: src='(.*?)'
imdb|optional:
imdb:
optional: true
selector: a[href^="http://www.imdb.com/title/"]
attribute: href
description:

View File

@@ -1,154 +0,0 @@
---
site: dragonworld
name: Dragon World (DTW)
language: de-de
type: private
encoding: UTF-8
links:
- http://dtw.sytes.net/
caps:
categorymappings:
# Dokumentation
- {id: 46, cat: TV/Documentary, desc: "Dokumentation"}
- {id: 55, cat: TV/Documentary, desc: "Dokumentation/HD"}
- {id: 56, cat: TV/Documentary, desc: "Dokumentation/SD"}
# Ebooks
- {id: 36, cat: Books, desc: "Ebooks"}
- {id: 37, cat: Books, desc: "Ebooks"}
- {id: 38, cat: Books, desc: "Ebooks/Hoerspiele/Hoerbuecher"}
# Games
- {id: 21, cat: Console, desc: "Games"}
- {id: 24, cat: Console/Other, desc: "Games/Nintendo"}
- {id: 22, cat: PC/Games, desc: "Games/PC"}
- {id: 23, cat: Console/PS4, desc: "Games/Playstation"}
- {id: 25, cat: Console/Xbox, desc: "Games/Xbox"}
# Kinder
- {id: 10, cat: Other, desc: "Kinder"}
- {id: 14, cat: Other, desc: "Kinder/Diverses"}
- {id: 12, cat: Movies, desc: "Kinder/Filme"}
- {id: 11, cat: PC/Games, desc: "Kinder/Games"}
- {id: 13, cat: Audio, desc: "Kinder/Musik"}
# Movies
- {id: 15, cat: Movies, desc: "Movies"}
- {id: 50, cat: Movies/3D, desc: "Movies/3D"}
- {id: 48, cat: Movies/HD, desc: "Movies/HD"}
- {id: 53, cat: Movies/HD, desc: "Movies/HD Pack"}
- {id: 45, cat: Movies/HD, desc: "Movies/Remuxe"}
- {id: 17, cat: Movies/SD, desc: "Movies/SD"}
- {id: 54, cat: Movies/SD, desc: "Movies/SD Pack"}
# Musik
- {id: 4, cat: Audio, desc: "Musik"}
- {id: 57, cat: Audio, desc: "Musik/Album"}
- {id: 8, cat: Audio/Lossless, desc: "Musik/Flac"}
- {id: 7, cat: Audio/MP3, desc: "Musik/Mp3"}
- {id: 9, cat: Audio/Video, desc: "Musik/Video"}
# Serien
- {id: 26, cat: TV, desc: "Serien"}
- {id: 27, cat: TV/HD, desc: "Serien/HD"}
- {id: 28, cat: TV/SD, desc: "Serien/SD"}
# Software
- {id: 29, cat: PC/0day, desc: "Software"}
- {id: 32, cat: PC/0day, desc: "Software/Diverses"}
- {id: 31, cat: PC/Mac, desc: "Software/Mac"}
- {id: 30, cat: PC/0day, desc: "Software/Windows"}
# Sport
- {id: 39, cat: TV/Sport, desc: "Sport"}
- {id: 40, cat: TV/Sport, desc: "Sport HD"}
- {id: 58, cat: TV/Sport, desc: "Sport SD"}
# XXX
- {id: 33, cat: XXX, desc: "XXX"}
- {id: 34, cat: XXX, desc: "XXX/HD"}
- {id: 35, cat: XXX, desc: "XXX/SD"}
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: table:has(td:contains("Ein Fehler ist aufgetreten"))
test:
path: browse.php
selector: a[href*="/logout.php"]
download:
before:
path: "takethanks.php"
method: "post"
inputs:
torrentid: "{{ .DownloadUri.Query.id }}"
search:
path: browse.php
keywordsfilters:
- name: re_replace
args: ["[^a-zA-Z0-9]+", "%"]
inputs:
do: "search"
keywords: "{{ .Keywords }}"
search_type: "t_name"
category: "0" # multi cat search not supported
include_dead_torrents: "yes"
rows:
selector: table#sortabletable > tbody > tr:has(a[href*="/details.php?id="])
filters:
- name: andmatch
args: 66
fields:
download:
selector: a[href*="/download.php?id="]
attribute: href
magnet:
selector: a[href^="magnet:"]
attribute: href
title:
selector: a[href*="/details.php?id="]
title:
selector: div.tooltip-content > div
optional: true
details:
selector: a[href*="/details.php?id="]
attribute: href
category:
selector: a[href*="/browse.php?category="]
attribute: href
filters:
- name: querystring
args: category
banner:
selector: div.tooltip-content > img
attribute: src
optional: true
size:
selector: td:nth-child(5)
grabs:
selector: td:nth-child(6)
seeders:
selector: td:nth-child(7)
leechers:
selector: td:nth-child(8)
downloadvolumefactor:
case:
img[alt^="OnlyUp Torrent"]: "0"
img[alt^="50% "]: "0.5"
"*": "1"
uploadvolumefactor:
case:
img[alt^="multi2 Torrent"]: "2"
"*": "1"
date:
selector: "td:nth-child(2) > div:has(span[style=\"float: right;\"])"
remove: span
filters:
- name: append
args: " +01:00"
- name: dateparse
args: "02-01-2006 15:04 -07:00"

View File

@@ -1,238 +1,238 @@
---
site: dragonworldreloaded
name: Dragonworld Reloaded
language: de-de
type: private
encoding: UTF-8
links:
- https://dragonworld-reloaded.net/
caps:
categorymappings:
# Kino
- {id: 118, cat: Movies/HD, desc: "Kino - HD"}
- {id: 4, cat: Movies/SD, desc: "Kino - SD"}
# Movies
- {id: 18, cat: Movies/SD, desc: "Movies - x264/XviD"}
- {id: 2, cat: Movies, desc: "Movies - Pack SD/HD"}
- {id: 22, cat: Movies/DVD, desc: "Movies - DVD/HD2"}
- {id: 52, cat: Movies, desc: "Movies - Kids"}
- {id: 19, cat: Movies/HD, desc: "Movies - HD"}
- {id: 25, cat: Movies/3D, desc: "Movies - 3D"}
- {id: 26, cat: Movies/BluRay, desc: "Movies - Blu-Ray"}
# Serien
- {id: 40, cat: TV/SD, desc: "Serien - SD"}
- {id: 41, cat: TV/HD, desc: "Serien - HD"}
- {id: 42, cat: TV/SD, desc: "Serien - Pack SD"}
- {id: 80, cat: TV/HD, desc: "Serien - Pack HD"}
# Musik
- {id: 119, cat: Audio, desc: "Musik - ALBEN"}
- {id: 5, cat: Audio/MP3, desc: "Musik - Mp3"}
- {id: 6, cat: Audio, desc: "Musik - Mixe"}
- {id: 92, cat: Audio, desc: "Musik - Discography"}
- {id: 114, cat: Audio, desc: "Musik - Musik Pack"}
- {id: 48, cat: Audio/Video, desc: "Musik - Video"}
# Doku
- {id: 37, cat: TV/Documentary, desc: "Doku - SD"}
- {id: 38, cat: TV/Documentary, desc: "Doku - HD"}
- {id: 81, cat: TV/Documentary, desc: "Doku - Pack "}
# Anime
- {id: 73, cat: TV/Anime, desc: "Anime - Movies"}
- {id: 74, cat: TV/Anime, desc: "Anime - Serien"}
# Games
- {id: 16, cat: PC/Games, desc: "Games - PC"}
- {id: 14, cat: Console/Other, desc: "Games - Wimmelbild"}
- {id: 7, cat: Console/PSP, desc: "Games - PSP"}
- {id: 17, cat: Console/PS3, desc: "Games - PS2/PS3"}
- {id: 29, cat: Console/NDS, desc: "Games - NDS/3DS"}
- {id: 15, cat: Console/Wii, desc: "Games - Wii"}
- {id: 8, cat: Console/Xbox, desc: "Games - XboX "}
# Appz
- {id: 30, cat: PC/0day, desc: "Appz - Windows"}
- {id: 31, cat: PC/0day, desc: "Appz - Linux"}
- {id: 32, cat: PC/Mac, desc: "Appz - Mac"}
- {id: 106, cat: PC/Phone-Android, desc: "Appz - Android"}
# Sport
- {id: 43, cat: TV/Sport, desc: "Sport - SD"}
- {id: 50, cat: TV/Sport, desc: "Sport - HD"}
# Sonstiges
- {id: 34, cat: Books, desc: "Sonstiges - E-Books"}
- {id: 35, cat: Audio/Audiobook, desc: "Sonstiges - Audiobook"}
- {id: 36, cat: Other, desc: "Sonstiges - Diverses"}
# XXX
- {id: 46, cat: XXX, desc: "XXX - SD"}
- {id: 47, cat: XXX, desc: "XXX - HD"}
- {id: 45, cat: XXX, desc: "XXX - Pack"}
- {id: 49, cat: XXX, desc: "XXX - Sonstiges"}
- {id: 110, cat: XXX, desc: "XXX - Hentai Serie"}
- {id: 111, cat: XXX, desc: "XXX - Hentai Movie"}
- {id: 116, cat: XXX, desc: "XXX - SexBooks"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
login:
path: /login.php
method: form
form: form[action="/login.php"]
cookies: ["JAVA=OK"] # avoid jscheck redirect
captcha:
type: image
image: img[src^="cap/captcha_math.php"]
input: stringCaptcha
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
loggiin: "einloggen"
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:
path: selection.php
inputs:
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:
# Kino
":has(div.kat_cat_pic_name:contains(\"Kino\")):has(div.kat_cat_pic_name_b:contains(\"HD\"))": "118"
":has(div.kat_cat_pic_name:contains(\"Kino\")):has(div.kat_cat_pic_name_b:contains(\"SD\"))": "4"
# Movies
":has(div.kat_cat_pic_name:contains(\"Movies\")):has(div.kat_cat_pic_name_b:contains(\"x264/XviD\"))": "18"
":has(div.kat_cat_pic_name:contains(\"Movies\")):has(div.kat_cat_pic_name_b:contains(\"Pack SD/HD\"))": "2"
":has(div.kat_cat_pic_name:contains(\"Movies\")):has(div.kat_cat_pic_name_b:contains(\"DVD/HD2\"))": "22"
":has(div.kat_cat_pic_name:contains(\"Movies\")):has(div.kat_cat_pic_name_b:contains(\"Kids\"))": "52"
":has(div.kat_cat_pic_name:contains(\"Movies\")):has(div.kat_cat_pic_name_b:contains(\"HD\"))": "19"
":has(div.kat_cat_pic_name:contains(\"Movies\")):has(div.kat_cat_pic_name_b:contains(\"3D\"))": "25"
":has(div.kat_cat_pic_name:contains(\"Movies\")):has(div.kat_cat_pic_name_b:contains(\"Blu-Ray\"))": "26"
# Serien
":has(div.kat_cat_pic_name:contains(\"Serien\")):has(div.kat_cat_pic_name_b:contains(\"SD\"))": "40"
":has(div.kat_cat_pic_name:contains(\"Serien\")):has(div.kat_cat_pic_name_b:contains(\"HD\"))": "41"
":has(div.kat_cat_pic_name:contains(\"Serien\")):has(div.kat_cat_pic_name_b:contains(\"Pack SD\"))": "42"
":has(div.kat_cat_pic_name:contains(\"Serien\")):has(div.kat_cat_pic_name_b:contains(\"Pack HD\"))": "80"
# Musik
":has(div.kat_cat_pic_name:contains(\"Musik\")):has(div.kat_cat_pic_name_b:contains(\"ALBEN\"))": "119"
":has(div.kat_cat_pic_name:contains(\"Musik\")):has(div.kat_cat_pic_name_b:contains(\"Mp3\"))": "5"
":has(div.kat_cat_pic_name:contains(\"Musik\")):has(div.kat_cat_pic_name_b:contains(\"Mixe\"))": "6"
":has(div.kat_cat_pic_name:contains(\"Musik\")):has(div.kat_cat_pic_name_b:contains(\"Discography\"))": "92"
":has(div.kat_cat_pic_name:contains(\"Musik\")):has(div.kat_cat_pic_name_b:contains(\"Musik Pack\"))": "114"
":has(div.kat_cat_pic_name:contains(\"Musik\")):has(div.kat_cat_pic_name_b:contains(\"Video\"))": "48"
# Doku
":has(div.kat_cat_pic_name:contains(\"Doku\")):has(div.kat_cat_pic_name_b:contains(\"SD\"))": "37"
":has(div.kat_cat_pic_name:contains(\"Doku\")):has(div.kat_cat_pic_name_b:contains(\"HD\"))": "38"
":has(div.kat_cat_pic_name:contains(\"Doku\")):has(div.kat_cat_pic_name_b:contains(\"Pack \"))": "81"
# Anime
":has(div.kat_cat_pic_name:contains(\"Anime\")):has(div.kat_cat_pic_name_b:contains(\"Movies\"))": "73"
":has(div.kat_cat_pic_name:contains(\"Anime\")):has(div.kat_cat_pic_name_b:contains(\"Serien\"))": "74"
# Games
":has(div.kat_cat_pic_name:contains(\"Games\")):has(div.kat_cat_pic_name_b:contains(\"PC\"))": "16"
":has(div.kat_cat_pic_name:contains(\"Games\")):has(div.kat_cat_pic_name_b:contains(\"Wimmelbild\"))": "14"
":has(div.kat_cat_pic_name:contains(\"Games\")):has(div.kat_cat_pic_name_b:contains(\"PSP\"))": "7"
":has(div.kat_cat_pic_name:contains(\"Games\")):has(div.kat_cat_pic_name_b:contains(\"PS2/PS3\"))": "17"
":has(div.kat_cat_pic_name:contains(\"Games\")):has(div.kat_cat_pic_name_b:contains(\"NDS/3DS\"))": "29"
":has(div.kat_cat_pic_name:contains(\"Games\")):has(div.kat_cat_pic_name_b:contains(\"Wii\"))": "15"
":has(div.kat_cat_pic_name:contains(\"Games\")):has(div.kat_cat_pic_name_b:contains(\"XboX \"))": "8"
# Appz
":has(div.kat_cat_pic_name:contains(\"Appz\")):has(div.kat_cat_pic_name_b:contains(\"Windows\"))": "30"
":has(div.kat_cat_pic_name:contains(\"Appz\")):has(div.kat_cat_pic_name_b:contains(\"Linux\"))": "31"
":has(div.kat_cat_pic_name:contains(\"Appz\")):has(div.kat_cat_pic_name_b:contains(\"Mac\"))": "32"
":has(div.kat_cat_pic_name:contains(\"Appz\")):has(div.kat_cat_pic_name_b:contains(\"Android\"))": "106"
# Sport
":has(div.kat_cat_pic_name:contains(\"Sport\")):has(div.kat_cat_pic_name_b:contains(\"SD\"))": "43"
":has(div.kat_cat_pic_name:contains(\"Sport\")):has(div.kat_cat_pic_name_b:contains(\"HD\"))": "50"
# Sonstiges
":has(div.kat_cat_pic_name:contains(\"Sonstiges\")):has(div.kat_cat_pic_name_b:contains(\"E-Books\"))": "34"
":has(div.kat_cat_pic_name:contains(\"Sonstiges\")):has(div.kat_cat_pic_name_b:contains(\"Audiobook\"))": "35"
":has(div.kat_cat_pic_name:contains(\"Sonstiges\")):has(div.kat_cat_pic_name_b:contains(\"Diverses\"))": "36"
# XXX
":has(div.kat_cat_pic_name:contains(\"XXX\")):has(div.kat_cat_pic_name_b:contains(\"SD\"))": "46"
":has(div.kat_cat_pic_name:contains(\"XXX\")):has(div.kat_cat_pic_name_b:contains(\"HD\"))": "47"
":has(div.kat_cat_pic_name:contains(\"XXX\")):has(div.kat_cat_pic_name_b:contains(\"Pack\"))": "45"
":has(div.kat_cat_pic_name:contains(\"XXX\")):has(div.kat_cat_pic_name_b:contains(\"Sonstiges\"))": "49"
":has(div.kat_cat_pic_name:contains(\"XXX\")):has(div.kat_cat_pic_name_b:contains(\"Hentai Serie\"))": "110"
":has(div.kat_cat_pic_name:contains(\"XXX\")):has(div.kat_cat_pic_name_b:contains(\"Hentai Movie\"))": "111"
":has(div.kat_cat_pic_name:contains(\"XXX\")):has(div.kat_cat_pic_name_b:contains(\"SexBooks\"))": "116"
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"
date:
selector: div.selection_unter_ab
filters:
- name: replace
args: ["Heute", "Today"]
- name: replace
args: ["Gestern", "Yesterday"]
- name: replace
args: [" um", ""]
- name: dateparse
args: "02.01.2006 15:04:05"
description:
selector: selection_unter_af
optional: true
---
site: dragonworldreloaded
name: Dragonworld Reloaded
language: de-de
type: private
encoding: UTF-8
links:
- https://dragonworld-reloaded.net/
caps:
categorymappings:
# Kino
- {id: 118, cat: Movies/HD, desc: "Kino - HD"}
- {id: 4, cat: Movies/SD, desc: "Kino - SD"}
# Movies
- {id: 18, cat: Movies/SD, desc: "Movies - x264/XviD"}
- {id: 2, cat: Movies, desc: "Movies - Pack SD/HD"}
- {id: 22, cat: Movies/DVD, desc: "Movies - DVD/HD2"}
- {id: 52, cat: Movies, desc: "Movies - Kids"}
- {id: 19, cat: Movies/HD, desc: "Movies - HD"}
- {id: 25, cat: Movies/3D, desc: "Movies - 3D"}
- {id: 26, cat: Movies/BluRay, desc: "Movies - Blu-Ray"}
# Serien
- {id: 40, cat: TV/SD, desc: "Serien - SD"}
- {id: 41, cat: TV/HD, desc: "Serien - HD"}
- {id: 42, cat: TV/SD, desc: "Serien - Pack SD"}
- {id: 80, cat: TV/HD, desc: "Serien - Pack HD"}
# Musik
- {id: 119, cat: Audio, desc: "Musik - ALBEN"}
- {id: 5, cat: Audio/MP3, desc: "Musik - Mp3"}
- {id: 6, cat: Audio, desc: "Musik - Mixe"}
- {id: 92, cat: Audio, desc: "Musik - Discography"}
- {id: 114, cat: Audio, desc: "Musik - Musik Pack"}
- {id: 48, cat: Audio/Video, desc: "Musik - Video"}
# Doku
- {id: 37, cat: TV/Documentary, desc: "Doku - SD"}
- {id: 38, cat: TV/Documentary, desc: "Doku - HD"}
- {id: 81, cat: TV/Documentary, desc: "Doku - Pack "}
# Anime
- {id: 73, cat: TV/Anime, desc: "Anime - Movies"}
- {id: 74, cat: TV/Anime, desc: "Anime - Serien"}
# Games
- {id: 16, cat: PC/Games, desc: "Games - PC"}
- {id: 14, cat: Console/Other, desc: "Games - Wimmelbild"}
- {id: 7, cat: Console/PSP, desc: "Games - PSP"}
- {id: 17, cat: Console/PS3, desc: "Games - PS2/PS3"}
- {id: 29, cat: Console/NDS, desc: "Games - NDS/3DS"}
- {id: 15, cat: Console/Wii, desc: "Games - Wii"}
- {id: 8, cat: Console/Xbox, desc: "Games - XboX "}
# Appz
- {id: 30, cat: PC/0day, desc: "Appz - Windows"}
- {id: 31, cat: PC/0day, desc: "Appz - Linux"}
- {id: 32, cat: PC/Mac, desc: "Appz - Mac"}
- {id: 106, cat: PC/Phone-Android, desc: "Appz - Android"}
# Sport
- {id: 43, cat: TV/Sport, desc: "Sport - SD"}
- {id: 50, cat: TV/Sport, desc: "Sport - HD"}
# Sonstiges
- {id: 34, cat: Books, desc: "Sonstiges - E-Books"}
- {id: 35, cat: Audio/Audiobook, desc: "Sonstiges - Audiobook"}
- {id: 36, cat: Other, desc: "Sonstiges - Diverses"}
# XXX
- {id: 46, cat: XXX, desc: "XXX - SD"}
- {id: 47, cat: XXX, desc: "XXX - HD"}
- {id: 45, cat: XXX, desc: "XXX - Pack"}
- {id: 49, cat: XXX, desc: "XXX - Sonstiges"}
- {id: 110, cat: XXX, desc: "XXX - Hentai Serie"}
- {id: 111, cat: XXX, desc: "XXX - Hentai Movie"}
- {id: 116, cat: XXX, desc: "XXX - SexBooks"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
login:
path: /login.php
method: form
form: form[action="/login.php"]
cookies: ["JAVA=OK"] # avoid jscheck redirect
captcha:
type: image
image: img[src^="cap/captcha_math.php"]
input: stringCaptcha
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
loggiin: "einloggen"
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:
path: selection.php
inputs:
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:
# Kino
":has(div.kat_cat_pic_name:contains(\"Kino\")):has(div.kat_cat_pic_name_b:contains(\"HD\"))": "118"
":has(div.kat_cat_pic_name:contains(\"Kino\")):has(div.kat_cat_pic_name_b:contains(\"SD\"))": "4"
# Movies
":has(div.kat_cat_pic_name:contains(\"Movies\")):has(div.kat_cat_pic_name_b:contains(\"x264/XviD\"))": "18"
":has(div.kat_cat_pic_name:contains(\"Movies\")):has(div.kat_cat_pic_name_b:contains(\"Pack SD/HD\"))": "2"
":has(div.kat_cat_pic_name:contains(\"Movies\")):has(div.kat_cat_pic_name_b:contains(\"DVD/HD2\"))": "22"
":has(div.kat_cat_pic_name:contains(\"Movies\")):has(div.kat_cat_pic_name_b:contains(\"Kids\"))": "52"
":has(div.kat_cat_pic_name:contains(\"Movies\")):has(div.kat_cat_pic_name_b:contains(\"HD\"))": "19"
":has(div.kat_cat_pic_name:contains(\"Movies\")):has(div.kat_cat_pic_name_b:contains(\"3D\"))": "25"
":has(div.kat_cat_pic_name:contains(\"Movies\")):has(div.kat_cat_pic_name_b:contains(\"Blu-Ray\"))": "26"
# Serien
":has(div.kat_cat_pic_name:contains(\"Serien\")):has(div.kat_cat_pic_name_b:contains(\"SD\"))": "40"
":has(div.kat_cat_pic_name:contains(\"Serien\")):has(div.kat_cat_pic_name_b:contains(\"HD\"))": "41"
":has(div.kat_cat_pic_name:contains(\"Serien\")):has(div.kat_cat_pic_name_b:contains(\"Pack SD\"))": "42"
":has(div.kat_cat_pic_name:contains(\"Serien\")):has(div.kat_cat_pic_name_b:contains(\"Pack HD\"))": "80"
# Musik
":has(div.kat_cat_pic_name:contains(\"Musik\")):has(div.kat_cat_pic_name_b:contains(\"ALBEN\"))": "119"
":has(div.kat_cat_pic_name:contains(\"Musik\")):has(div.kat_cat_pic_name_b:contains(\"Mp3\"))": "5"
":has(div.kat_cat_pic_name:contains(\"Musik\")):has(div.kat_cat_pic_name_b:contains(\"Mixe\"))": "6"
":has(div.kat_cat_pic_name:contains(\"Musik\")):has(div.kat_cat_pic_name_b:contains(\"Discography\"))": "92"
":has(div.kat_cat_pic_name:contains(\"Musik\")):has(div.kat_cat_pic_name_b:contains(\"Musik Pack\"))": "114"
":has(div.kat_cat_pic_name:contains(\"Musik\")):has(div.kat_cat_pic_name_b:contains(\"Video\"))": "48"
# Doku
":has(div.kat_cat_pic_name:contains(\"Doku\")):has(div.kat_cat_pic_name_b:contains(\"SD\"))": "37"
":has(div.kat_cat_pic_name:contains(\"Doku\")):has(div.kat_cat_pic_name_b:contains(\"HD\"))": "38"
":has(div.kat_cat_pic_name:contains(\"Doku\")):has(div.kat_cat_pic_name_b:contains(\"Pack \"))": "81"
# Anime
":has(div.kat_cat_pic_name:contains(\"Anime\")):has(div.kat_cat_pic_name_b:contains(\"Movies\"))": "73"
":has(div.kat_cat_pic_name:contains(\"Anime\")):has(div.kat_cat_pic_name_b:contains(\"Serien\"))": "74"
# Games
":has(div.kat_cat_pic_name:contains(\"Games\")):has(div.kat_cat_pic_name_b:contains(\"PC\"))": "16"
":has(div.kat_cat_pic_name:contains(\"Games\")):has(div.kat_cat_pic_name_b:contains(\"Wimmelbild\"))": "14"
":has(div.kat_cat_pic_name:contains(\"Games\")):has(div.kat_cat_pic_name_b:contains(\"PSP\"))": "7"
":has(div.kat_cat_pic_name:contains(\"Games\")):has(div.kat_cat_pic_name_b:contains(\"PS2/PS3\"))": "17"
":has(div.kat_cat_pic_name:contains(\"Games\")):has(div.kat_cat_pic_name_b:contains(\"NDS/3DS\"))": "29"
":has(div.kat_cat_pic_name:contains(\"Games\")):has(div.kat_cat_pic_name_b:contains(\"Wii\"))": "15"
":has(div.kat_cat_pic_name:contains(\"Games\")):has(div.kat_cat_pic_name_b:contains(\"XboX \"))": "8"
# Appz
":has(div.kat_cat_pic_name:contains(\"Appz\")):has(div.kat_cat_pic_name_b:contains(\"Windows\"))": "30"
":has(div.kat_cat_pic_name:contains(\"Appz\")):has(div.kat_cat_pic_name_b:contains(\"Linux\"))": "31"
":has(div.kat_cat_pic_name:contains(\"Appz\")):has(div.kat_cat_pic_name_b:contains(\"Mac\"))": "32"
":has(div.kat_cat_pic_name:contains(\"Appz\")):has(div.kat_cat_pic_name_b:contains(\"Android\"))": "106"
# Sport
":has(div.kat_cat_pic_name:contains(\"Sport\")):has(div.kat_cat_pic_name_b:contains(\"SD\"))": "43"
":has(div.kat_cat_pic_name:contains(\"Sport\")):has(div.kat_cat_pic_name_b:contains(\"HD\"))": "50"
# Sonstiges
":has(div.kat_cat_pic_name:contains(\"Sonstiges\")):has(div.kat_cat_pic_name_b:contains(\"E-Books\"))": "34"
":has(div.kat_cat_pic_name:contains(\"Sonstiges\")):has(div.kat_cat_pic_name_b:contains(\"Audiobook\"))": "35"
":has(div.kat_cat_pic_name:contains(\"Sonstiges\")):has(div.kat_cat_pic_name_b:contains(\"Diverses\"))": "36"
# XXX
":has(div.kat_cat_pic_name:contains(\"XXX\")):has(div.kat_cat_pic_name_b:contains(\"SD\"))": "46"
":has(div.kat_cat_pic_name:contains(\"XXX\")):has(div.kat_cat_pic_name_b:contains(\"HD\"))": "47"
":has(div.kat_cat_pic_name:contains(\"XXX\")):has(div.kat_cat_pic_name_b:contains(\"Pack\"))": "45"
":has(div.kat_cat_pic_name:contains(\"XXX\")):has(div.kat_cat_pic_name_b:contains(\"Sonstiges\"))": "49"
":has(div.kat_cat_pic_name:contains(\"XXX\")):has(div.kat_cat_pic_name_b:contains(\"Hentai Serie\"))": "110"
":has(div.kat_cat_pic_name:contains(\"XXX\")):has(div.kat_cat_pic_name_b:contains(\"Hentai Movie\"))": "111"
":has(div.kat_cat_pic_name:contains(\"XXX\")):has(div.kat_cat_pic_name_b:contains(\"SexBooks\"))": "116"
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"
date:
selector: div.selection_unter_ab
filters:
- name: replace
args: ["Heute", "Today"]
- name: replace
args: ["Gestern", "Yesterday"]
- name: replace
args: [" um", ""]
- name: dateparse
args: "02.01.2006 15:04:05"
description:
selector: selection_unter_af
optional: true

View File

@@ -1,320 +1,325 @@
---
site: dreamteam
name: Dream Team
language: el-gr
type: private
encoding: UTF-8
links:
- http://dream-team.ml/
caps:
categorymappings:
# - {id: 115, cat: , desc: ""}
- {id: 115, cat: Movies, desc: "One foreign films external subtitles"}
- {id: 130, cat: Movies, desc: "CAM / TS / TC"}
- {id: 131, cat: Movies, desc: "DVDSCR / PPVRiP / WebRip / R5"}
- {id: 132, cat: Movies, desc: "DVDRrip"}
- {id: 133, cat: Movies, desc: "BDRip / BRRip / HDRip"}
- {id: 134, cat: Movies, desc: "MicroHD"}
- {id: 135, cat: Movies, desc: "HD - WEB-DL"}
- {id: 136, cat: Movies, desc: "HD - 480p"}
- {id: 137, cat: Movies, desc: "HD - 720p"}
- {id: 138, cat: Movies, desc: "HD - 1080p"}
- {id: 139, cat: Movies, desc: "9.01 3D HD 720p Half SBS & OU"}
- {id: 140, cat: Movies, desc: "9.2 3D HD 1080p Half SBS & OU"}
- {id: 141, cat: Movies, desc: "9.3 3D Bluray Disc HD 720p / 1080p"}
- {id: 142, cat: Movies, desc: "9.4 3D MicroHD 720p / 1080p"}
- {id: 144, cat: Movies, desc: "9.5 packages"}
- {id: 145, cat: Movies, desc: "9.6 filmography"}
- {id: 143, cat: Movies, desc: "9.7 Tv Movies"}
# - {id: 130, cat: , desc: ""}
# - {id: 131, cat: , desc: ""}
# - {id: 132, cat: , desc: ""}
# - {id: 133, cat: , desc: ""}
# - {id: 134, cat: , desc: ""}
# - {id: 135, cat: , desc: ""}
# - {id: 136, cat: , desc: ""}
# - {id: 137, cat: , desc: ""}
# - {id: 138, cat: , desc: ""}
# - {id: 139, cat: , desc: ""}
# - {id: 140, cat: , desc: ""}
# - {id: 141, cat: , desc: ""}
# - {id: 142, cat: , desc: ""}
# - {id: 144, cat: , desc: ""}
# - {id: 145, cat: , desc: ""}
# - {id: 143, cat: , desc: ""}
# - {id: 116, cat: , desc: ""}
- {id: 116, cat: Movies, desc: "Two foreign films integrated subtitles"}
- {id: 146, cat: Movies, desc: "CAM / TS / TC"}
- {id: 147, cat: Movies, desc: "DVDSCR / PPVRiP / WebRip / R5"}
- {id: 148, cat: Movies, desc: "DVDRrip"}
- {id: 149, cat: Movies, desc: "BDRip / BRRip / HDRip"}
- {id: 150, cat: Movies, desc: "MicroHD"}
- {id: 151, cat: Movies, desc: "HD - WEB-DL"}
- {id: 152, cat: Movies, desc: "Tv Movies"}
# - {id: 242, cat: , desc: ""}
- {id: 153, cat: Movies, desc: "Packages"}
- {id: 154, cat: Movies, desc: "filmography"}
- {id: 243, cat: Movies, desc: "HD 1080p"}
- {id: 244, cat: Movies, desc: "HD 480p"}
# - {id: 146, cat: , desc: ""}
# - {id: 147, cat: , desc: ""}
# - {id: 148, cat: , desc: ""}
# - {id: 149, cat: , desc: ""}
# - {id: 150, cat: , desc: ""}
# - {id: 151, cat: , desc: ""}
# - {id: 152, cat: , desc: ""}
# - {id: 242, cat: , desc: ""}
# - {id: 153, cat: , desc: ""}
# - {id: 154, cat: , desc: ""}
# - {id: 243, cat: , desc: ""}
# - {id: 244, cat: , desc: ""}
# - {id: 117, cat: , desc: ""}
- {id: 117, cat: Movies, desc: "???????e? ?a???e?"}
- {id: 155, cat: Movies, desc: "CAM / TS / TC"}
- {id: 156, cat: Movies, desc: "SCR / PPVRiP / Webrip / R5"}
- {id: 157, cat: Movies, desc: "DVDRrip 3"}
- {id: 158, cat: Movies, desc: "BDRip / BRRip / HDRip"}
- {id: 159, cat: Movies, desc: "MicroHD 5"}
- {id: 160, cat: Movies, desc: "HD - 480p"}
- {id: 161, cat: Movies, desc: "6.1 HD - 720p"}
- {id: 162, cat: Movies, desc: "HD 6.2 - 1080"}
- {id: 163, cat: Movies, desc: "TV Movies"}
- {id: 164, cat: Movies, desc: "?a?eta 8"}
- {id: 165, cat: Movies, desc: "F??µ???af?e?"}
# - {id: 155, cat: , desc: ""}
# - {id: 156, cat: , desc: ""}
# - {id: 157, cat: , desc: ""}
# - {id: 158, cat: , desc: ""}
# - {id: 159, cat: , desc: ""}
# - {id: 160, cat: , desc: ""}
# - {id: 161, cat: , desc: ""}
# - {id: 162, cat: , desc: ""}
# - {id: 163, cat: , desc: ""}
# - {id: 164, cat: , desc: ""}
# - {id: 165, cat: , desc: ""}
# - {id: 118, cat: , desc: ""}
- {id: 118, cat: TV, desc: "Foreign Television external subtitles"}
- {id: 166, cat: TV, desc: "SD"}
- {id: 167, cat: TV, desc: "720p"}
- {id: 168, cat: TV, desc: "1080p"}
- {id: 169, cat: TV, desc: "Sport"}
- {id: 170, cat: TV, desc: "documentaries"}
- {id: 171, cat: TV, desc: "Packages"}
# - {id: 166, cat: , desc: ""}
# - {id: 167, cat: , desc: ""}
# - {id: 168, cat: , desc: ""}
# - {id: 169, cat: , desc: ""}
# - {id: 170, cat: , desc: ""}
# - {id: 171, cat: , desc: ""}
# - {id: 119, cat: , desc: ""}
- {id: 119, cat: TV, desc: "foreign Television integrated subtitles"}
- {id: 172, cat: TV, desc: "SD"}
- {id: 173, cat: TV, desc: "720p"}
- {id: 174, cat: TV, desc: "1080p"}
- {id: 175, cat: TV, desc: "Sport"}
- {id: 176, cat: TV, desc: "documentaries"}
- {id: 177, cat: TV, desc: "Tv Rips"}
- {id: 178, cat: TV, desc: "Packages"}
# - {id: 172, cat: , desc: ""}
# - {id: 173, cat: , desc: ""}
# - {id: 174, cat: , desc: ""}
# - {id: 175, cat: , desc: ""}
# - {id: 176, cat: , desc: ""}
# - {id: 177, cat: , desc: ""}
# - {id: 178, cat: , desc: ""}
# - {id: 120, cat: , desc: ""}
- {id: 120, cat: TV, desc: "Greek Television"}
- {id: 179, cat: TV, desc: "SD"}
- {id: 180, cat: TV, desc: "720p"}
- {id: 181, cat: TV, desc: "1080p"}
- {id: 182, cat: TV, desc: "Sport"}
- {id: 183, cat: TV, desc: "five documentaries"}
- {id: 184, cat: TV, desc: "six Tv Rips"}
- {id: 185, cat: TV, desc: "Packages"}
# - {id: 179, cat: , desc: ""}
# - {id: 180, cat: , desc: ""}
# - {id: 181, cat: , desc: ""}
# - {id: 182, cat: , desc: ""}
# - {id: 183, cat: , desc: ""}
# - {id: 184, cat: , desc: ""}
# - {id: 185, cat: , desc: ""}
# - {id: 122, cat: , desc: ""}
- {id: 122, cat: Audio, desc: "?e?? ???s???"}
- {id: 216, cat: Audio, desc: "1. DJs Stuff & Promos"}
- {id: 217, cat: Audio, desc: "2. DJs Stuff & Promos (Flac)"}
- {id: 218, cat: Audio, desc: "3. Singles"}
- {id: 219, cat: Audio, desc: "4. Singles (Flac)"}
- {id: 220, cat: Audio, desc: "5. ??s????af?e?"}
- {id: 221, cat: Audio, desc: "6. ??s????af?e? (Flac)"}
- {id: 222, cat: Audio, desc: "7. ??af??e? S?????e?"}
- {id: 223, cat: Audio, desc: "8. ??af??e? S?????e? (Flac)"}
- {id: 224, cat: Audio, desc: "9. SoundTracks"}
- {id: 225, cat: Audio, desc: "9.1 Varius Artist"}
- {id: 226, cat: Audio, desc: "9.2 Compact Disc Club"}
- {id: 227, cat: Audio, desc: "9.3 ???s??a Video Clips"}
# - {id: 123, cat: , desc: ""}
- {id: 123, cat: Audio, desc: "???????? ???s???"}
- {id: 228, cat: Audio, desc: "1. DJs Stuff & Promos"}
- {id: 229, cat: Audio, desc: "2. DJs Stuff & Promos (Flac)"}
- {id: 230, cat: Audio, desc: "3. Singles"}
- {id: 231, cat: Audio, desc: "4. Singles (Flac)"}
- {id: 232, cat: Audio, desc: "5. ??s????af?e?"}
- {id: 233, cat: Audio, desc: "6. ??s????af?e? (Flac)"}
- {id: 234, cat: Audio, desc: "7. ??af??e? S?????e?"}
- {id: 235, cat: Audio, desc: "8. ??af??e? S?????e? (Flac)"}
- {id: 236, cat: Audio, desc: "9. ?a?d??a"}
- {id: 237, cat: Audio, desc: "9.1 SoundTracks"}
- {id: 238, cat: Audio, desc: "9.2 Varius Artist"}
- {id: 239, cat: Audio, desc: "9.3 Compact Disc Club"}
- {id: 240, cat: Audio, desc: "9.4 ???s??a Video Clips"}
# - {id: 121, cat: , desc: ""}
- {id: 121, cat: Movies, desc: "children"}
- {id: 186, cat: Movies, desc: "children's films external subtitles"}
- {id: 187, cat: Movies, desc: "two children's films integrated subtitles"}
- {id: 188, cat: Movies, desc: "three children's films Metaglotismenes"}
- {id: 189, cat: Movies, desc: "four cartoon series external subtitles"}
- {id: 190, cat: Movies, desc: "five children's series integrated subtitles"}
- {id: 191, cat: Movies, desc: "six children's series Metaglotismenes"}
- {id: 192, cat: Movies, desc: "Anime external subtitles"}
- {id: 193, cat: Movies, desc: "Anime integrated subtitles"}
- {id: 194, cat: Movies, desc: "Anime Metaglotismenes"}
# - {id: 186, cat: , desc: ""}
# - {id: 187, cat: , desc: ""}
# - {id: 188, cat: , desc: ""}
# - {id: 189, cat: , desc: ""}
# - {id: 190, cat: , desc: ""}
# - {id: 191, cat: , desc: ""}
# - {id: 192, cat: , desc: ""}
# - {id: 193, cat: , desc: ""}
# - {id: 194, cat: , desc: ""}
# - {id: 128, cat: , desc: ""}
- {id: 128, cat: Console, desc: "9.1 ?a????d?a"}
- {id: 195, cat: Console, desc: "Windows Games"}
- {id: 196, cat: Console, desc: "Nintendo DS"}
- {id: 197, cat: Console, desc: "Sony PS1"}
- {id: 198, cat: Console, desc: "Sony PS2"}
- {id: 199, cat: Console, desc: "Sony PS3"}
- {id: 200, cat: Console, desc: "Sony PSP"}
- {id: 201, cat: Console, desc: "Wii"}
- {id: 202, cat: Console, desc: "XboX 360"}
# - {id: 124, cat: , desc: ""}
- {id: 124, cat: PC, desc: "9.2 Applications"}
- {id: 203, cat: PC, desc: "Applications Windows"}
- {id: 204, cat: PC, desc: "Applications Mac"}
- {id: 205, cat: PC, desc: "Linux Applications"}
# - {id: 203, cat: , desc: ""}
# - {id: 204, cat: , desc: ""}
# - {id: 205, cat: , desc: ""}
# - {id: 126, cat: , desc: ""}
- {id: 126, cat: Books, desc: "9.3 Electronic Books"}
- {id: 206, cat: Books, desc: "Electronic books"}
- {id: 207, cat: Books, desc: "Magazines"}
- {id: 208, cat: Books, desc: "Comic Books"}
# - {id: 206, cat: , desc: ""}
# - {id: 207, cat: , desc: ""}
# - {id: 208, cat: , desc: ""}
# - {id: 125, cat: , desc: ""}
- {id: 125, cat: Other, desc: "9.4 Gallery"}
- {id: 209, cat: Other, desc: "Gallery"}
- {id: 210, cat: Other, desc: "Gallery HD"}
- {id: 211, cat: Other, desc: "Photos 3D"}
- {id: 212, cat: Other, desc: "Wallpapers"}
- {id: 213, cat: Other, desc: "Screensavers"}
# - {id: 209, cat: , desc: ""}
# - {id: 210, cat: , desc: ""}
# - {id: 211, cat: , desc: ""}
# - {id: 212, cat: , desc: ""}
# - {id: 213, cat: , desc: ""}
# - {id: 127, cat: , desc: ""}
- {id: 127, cat: PC/Phone-Other, desc: "9.5 Mobile / Miscellaneous"}
- {id: 214, cat: PC/Phone-Other, desc: "Mobile"}
- {id: 215, cat: PC/Phone-Other, desc: "Miscellaneous"}
# - {id: 214, cat: , desc: ""}
# - {id: 215, cat: , desc: ""}
# - {id: 129, cat: , desc: ""}
- {id: 129, cat: Other, desc: "9.6 Blocked DREAM TEAM"}
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: takelogin.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: td:contains("remaining tries")
test:
path: browse.php
selector: a[href^="http://dream-team.ml/logout.php"]
download:
before:
path: "takethanks.php"
method: "post"
inputs:
torrentid: "{{ .DownloadUri.Query.id }}"
search:
path: browse.php
keywordsfilters:
# remove words <= 3 characters and surrounding special characters
- name: re_replace
args: ["(?:^|\\s)[_\\+\\/\\.\\-\\(\\)]*[\\S]{0,3}[_\\+\\/\\.\\-\\(\\)]*(?:\\s|$)", " "]
inputs:
do: "search"
keywords: "{{ .Keywords }}"
search_type: "t_name"
category: "0" # multi cat search not supported
include_dead_torrents: "yes"
rows:
selector: table#sortabletable > tbody > tr:has(a[href^="http://dream-team.ml/details.php?id="])
filters:
- name: andmatch
args: 66
fields:
download:
selector: a[href^="http://dream-team.ml/download.php?id="]
attribute: href
title:
selector: a[href^="http://dream-team.ml/details.php?id="]
title|optional:
selector: div.tooltip-content > div
details:
selector: a[href^="http://dream-team.ml/details.php?id="]
attribute: href
category:
selector: a[href^="http://dream-team.ml/browse.php?category="]
attribute: href
filters:
- name: querystring
args: category
banner|optional:
selector: div.tooltip-content > img
size:
selector: td:nth-child(5)
grabs:
selector: td:nth-child(6)
seeders:
selector: td:nth-child(7)
leechers:
selector: td:nth-child(8)
downloadvolumefactor:
case:
img[alt^="Free Torrent "]: "0"
img[alt^="Silver Torrent "]: "0.5"
"*": "1"
uploadvolumefactor:
case:
"*": "1"
date:
selector: "td:nth-child(2) > div:has(span[style=\"float: right;\"])"
remove: span
filters:
- name: append
args: " +00:00"
- name: dateparse
args: "02-01-2006 15:04 -07:00"
---
site: dreamteam
name: Dream Team
language: el-gr
type: private
encoding: UTF-8
links:
- http://dream-team.ga/
legacylinks:
- http://dream-team.ml/
caps:
categorymappings:
# - {id: 115, cat: , desc: ""}
- {id: 115, cat: Movies, desc: "One foreign films external subtitles"}
- {id: 130, cat: Movies, desc: "CAM / TS / TC"}
- {id: 131, cat: Movies, desc: "DVDSCR / PPVRiP / WebRip / R5"}
- {id: 132, cat: Movies, desc: "DVDRrip"}
- {id: 133, cat: Movies, desc: "BDRip / BRRip / HDRip"}
- {id: 134, cat: Movies, desc: "MicroHD"}
- {id: 135, cat: Movies, desc: "HD - WEB-DL"}
- {id: 136, cat: Movies, desc: "HD - 480p"}
- {id: 137, cat: Movies, desc: "HD - 720p"}
- {id: 138, cat: Movies, desc: "HD - 1080p"}
- {id: 139, cat: Movies, desc: "9.01 3D HD 720p Half SBS & OU"}
- {id: 140, cat: Movies, desc: "9.2 3D HD 1080p Half SBS & OU"}
- {id: 141, cat: Movies, desc: "9.3 3D Bluray Disc HD 720p / 1080p"}
- {id: 142, cat: Movies, desc: "9.4 3D MicroHD 720p / 1080p"}
- {id: 144, cat: Movies, desc: "9.5 packages"}
- {id: 145, cat: Movies, desc: "9.6 filmography"}
- {id: 143, cat: Movies, desc: "9.7 Tv Movies"}
# - {id: 130, cat: , desc: ""}
# - {id: 131, cat: , desc: ""}
# - {id: 132, cat: , desc: ""}
# - {id: 133, cat: , desc: ""}
# - {id: 134, cat: , desc: ""}
# - {id: 135, cat: , desc: ""}
# - {id: 136, cat: , desc: ""}
# - {id: 137, cat: , desc: ""}
# - {id: 138, cat: , desc: ""}
# - {id: 139, cat: , desc: ""}
# - {id: 140, cat: , desc: ""}
# - {id: 141, cat: , desc: ""}
# - {id: 142, cat: , desc: ""}
# - {id: 144, cat: , desc: ""}
# - {id: 145, cat: , desc: ""}
# - {id: 143, cat: , desc: ""}
# - {id: 116, cat: , desc: ""}
- {id: 116, cat: Movies, desc: "Two foreign films integrated subtitles"}
- {id: 146, cat: Movies, desc: "CAM / TS / TC"}
- {id: 147, cat: Movies, desc: "DVDSCR / PPVRiP / WebRip / R5"}
- {id: 148, cat: Movies, desc: "DVDRrip"}
- {id: 149, cat: Movies, desc: "BDRip / BRRip / HDRip"}
- {id: 150, cat: Movies, desc: "MicroHD"}
- {id: 151, cat: Movies, desc: "HD - WEB-DL"}
- {id: 152, cat: Movies, desc: "Tv Movies"}
# - {id: 242, cat: , desc: ""}
- {id: 153, cat: Movies, desc: "Packages"}
- {id: 154, cat: Movies, desc: "filmography"}
- {id: 243, cat: Movies, desc: "HD 1080p"}
- {id: 244, cat: Movies, desc: "HD 480p"}
# - {id: 146, cat: , desc: ""}
# - {id: 147, cat: , desc: ""}
# - {id: 148, cat: , desc: ""}
# - {id: 149, cat: , desc: ""}
# - {id: 150, cat: , desc: ""}
# - {id: 151, cat: , desc: ""}
# - {id: 152, cat: , desc: ""}
# - {id: 242, cat: , desc: ""}
# - {id: 153, cat: , desc: ""}
# - {id: 154, cat: , desc: ""}
# - {id: 243, cat: , desc: ""}
# - {id: 244, cat: , desc: ""}
# - {id: 117, cat: , desc: ""}
- {id: 117, cat: Movies, desc: "???????e? ?a???e?"}
- {id: 155, cat: Movies, desc: "CAM / TS / TC"}
- {id: 156, cat: Movies, desc: "SCR / PPVRiP / Webrip / R5"}
- {id: 157, cat: Movies, desc: "DVDRrip 3"}
- {id: 158, cat: Movies, desc: "BDRip / BRRip / HDRip"}
- {id: 159, cat: Movies, desc: "MicroHD 5"}
- {id: 160, cat: Movies, desc: "HD - 480p"}
- {id: 161, cat: Movies, desc: "6.1 HD - 720p"}
- {id: 162, cat: Movies, desc: "HD 6.2 - 1080"}
- {id: 163, cat: Movies, desc: "TV Movies"}
- {id: 164, cat: Movies, desc: "?a?eta 8"}
- {id: 165, cat: Movies, desc: "F??µ???af?e?"}
# - {id: 155, cat: , desc: ""}
# - {id: 156, cat: , desc: ""}
# - {id: 157, cat: , desc: ""}
# - {id: 158, cat: , desc: ""}
# - {id: 159, cat: , desc: ""}
# - {id: 160, cat: , desc: ""}
# - {id: 161, cat: , desc: ""}
# - {id: 162, cat: , desc: ""}
# - {id: 163, cat: , desc: ""}
# - {id: 164, cat: , desc: ""}
# - {id: 165, cat: , desc: ""}
# - {id: 118, cat: , desc: ""}
- {id: 118, cat: TV, desc: "Foreign Television external subtitles"}
- {id: 166, cat: TV, desc: "SD"}
- {id: 167, cat: TV, desc: "720p"}
- {id: 168, cat: TV, desc: "1080p"}
- {id: 169, cat: TV, desc: "Sport"}
- {id: 170, cat: TV, desc: "documentaries"}
- {id: 171, cat: TV, desc: "Packages"}
# - {id: 166, cat: , desc: ""}
# - {id: 167, cat: , desc: ""}
# - {id: 168, cat: , desc: ""}
# - {id: 169, cat: , desc: ""}
# - {id: 170, cat: , desc: ""}
# - {id: 171, cat: , desc: ""}
# - {id: 119, cat: , desc: ""}
- {id: 119, cat: TV, desc: "foreign Television integrated subtitles"}
- {id: 172, cat: TV, desc: "SD"}
- {id: 173, cat: TV, desc: "720p"}
- {id: 174, cat: TV, desc: "1080p"}
- {id: 175, cat: TV, desc: "Sport"}
- {id: 176, cat: TV, desc: "documentaries"}
- {id: 177, cat: TV, desc: "Tv Rips"}
- {id: 178, cat: TV, desc: "Packages"}
# - {id: 172, cat: , desc: ""}
# - {id: 173, cat: , desc: ""}
# - {id: 174, cat: , desc: ""}
# - {id: 175, cat: , desc: ""}
# - {id: 176, cat: , desc: ""}
# - {id: 177, cat: , desc: ""}
# - {id: 178, cat: , desc: ""}
# - {id: 120, cat: , desc: ""}
- {id: 120, cat: TV, desc: "Greek Television"}
- {id: 179, cat: TV, desc: "SD"}
- {id: 180, cat: TV, desc: "720p"}
- {id: 181, cat: TV, desc: "1080p"}
- {id: 182, cat: TV, desc: "Sport"}
- {id: 183, cat: TV, desc: "five documentaries"}
- {id: 184, cat: TV, desc: "six Tv Rips"}
- {id: 185, cat: TV, desc: "Packages"}
# - {id: 179, cat: , desc: ""}
# - {id: 180, cat: , desc: ""}
# - {id: 181, cat: , desc: ""}
# - {id: 182, cat: , desc: ""}
# - {id: 183, cat: , desc: ""}
# - {id: 184, cat: , desc: ""}
# - {id: 185, cat: , desc: ""}
# - {id: 122, cat: , desc: ""}
- {id: 122, cat: Audio, desc: "?e?? ???s???"}
- {id: 216, cat: Audio, desc: "1. DJs Stuff & Promos"}
- {id: 217, cat: Audio, desc: "2. DJs Stuff & Promos (Flac)"}
- {id: 218, cat: Audio, desc: "3. Singles"}
- {id: 219, cat: Audio, desc: "4. Singles (Flac)"}
- {id: 220, cat: Audio, desc: "5. ??s????af?e?"}
- {id: 221, cat: Audio, desc: "6. ??s????af?e? (Flac)"}
- {id: 222, cat: Audio, desc: "7. ??af??e? S?????e?"}
- {id: 223, cat: Audio, desc: "8. ??af??e? S?????e? (Flac)"}
- {id: 224, cat: Audio, desc: "9. SoundTracks"}
- {id: 225, cat: Audio, desc: "9.1 Varius Artist"}
- {id: 226, cat: Audio, desc: "9.2 Compact Disc Club"}
- {id: 227, cat: Audio, desc: "9.3 ???s??a Video Clips"}
# - {id: 123, cat: , desc: ""}
- {id: 123, cat: Audio, desc: "???????? ???s???"}
- {id: 228, cat: Audio, desc: "1. DJs Stuff & Promos"}
- {id: 229, cat: Audio, desc: "2. DJs Stuff & Promos (Flac)"}
- {id: 230, cat: Audio, desc: "3. Singles"}
- {id: 231, cat: Audio, desc: "4. Singles (Flac)"}
- {id: 232, cat: Audio, desc: "5. ??s????af?e?"}
- {id: 233, cat: Audio, desc: "6. ??s????af?e? (Flac)"}
- {id: 234, cat: Audio, desc: "7. ??af??e? S?????e?"}
- {id: 235, cat: Audio, desc: "8. ??af??e? S?????e? (Flac)"}
- {id: 236, cat: Audio, desc: "9. ?a?d??a"}
- {id: 237, cat: Audio, desc: "9.1 SoundTracks"}
- {id: 238, cat: Audio, desc: "9.2 Varius Artist"}
- {id: 239, cat: Audio, desc: "9.3 Compact Disc Club"}
- {id: 240, cat: Audio, desc: "9.4 ???s??a Video Clips"}
# - {id: 121, cat: , desc: ""}
- {id: 121, cat: Movies, desc: "children"}
- {id: 186, cat: Movies, desc: "children's films external subtitles"}
- {id: 187, cat: Movies, desc: "two children's films integrated subtitles"}
- {id: 188, cat: Movies, desc: "three children's films Metaglotismenes"}
- {id: 189, cat: Movies, desc: "four cartoon series external subtitles"}
- {id: 190, cat: Movies, desc: "five children's series integrated subtitles"}
- {id: 191, cat: Movies, desc: "six children's series Metaglotismenes"}
- {id: 192, cat: Movies, desc: "Anime external subtitles"}
- {id: 193, cat: Movies, desc: "Anime integrated subtitles"}
- {id: 194, cat: Movies, desc: "Anime Metaglotismenes"}
# - {id: 186, cat: , desc: ""}
# - {id: 187, cat: , desc: ""}
# - {id: 188, cat: , desc: ""}
# - {id: 189, cat: , desc: ""}
# - {id: 190, cat: , desc: ""}
# - {id: 191, cat: , desc: ""}
# - {id: 192, cat: , desc: ""}
# - {id: 193, cat: , desc: ""}
# - {id: 194, cat: , desc: ""}
# - {id: 128, cat: , desc: ""}
- {id: 128, cat: Console, desc: "9.1 ?a????d?a"}
- {id: 195, cat: Console, desc: "Windows Games"}
- {id: 196, cat: Console, desc: "Nintendo DS"}
- {id: 197, cat: Console, desc: "Sony PS1"}
- {id: 198, cat: Console, desc: "Sony PS2"}
- {id: 199, cat: Console, desc: "Sony PS3"}
- {id: 200, cat: Console, desc: "Sony PSP"}
- {id: 201, cat: Console, desc: "Wii"}
- {id: 202, cat: Console, desc: "XboX 360"}
# - {id: 124, cat: , desc: ""}
- {id: 124, cat: PC, desc: "9.2 Applications"}
- {id: 203, cat: PC, desc: "Applications Windows"}
- {id: 204, cat: PC, desc: "Applications Mac"}
- {id: 205, cat: PC, desc: "Linux Applications"}
# - {id: 203, cat: , desc: ""}
# - {id: 204, cat: , desc: ""}
# - {id: 205, cat: , desc: ""}
# - {id: 126, cat: , desc: ""}
- {id: 126, cat: Books, desc: "9.3 Electronic Books"}
- {id: 206, cat: Books, desc: "Electronic books"}
- {id: 207, cat: Books, desc: "Magazines"}
- {id: 208, cat: Books, desc: "Comic Books"}
# - {id: 206, cat: , desc: ""}
# - {id: 207, cat: , desc: ""}
# - {id: 208, cat: , desc: ""}
# - {id: 125, cat: , desc: ""}
- {id: 125, cat: Other, desc: "9.4 Gallery"}
- {id: 209, cat: Other, desc: "Gallery"}
- {id: 210, cat: Other, desc: "Gallery HD"}
- {id: 211, cat: Other, desc: "Photos 3D"}
- {id: 212, cat: Other, desc: "Wallpapers"}
- {id: 213, cat: Other, desc: "Screensavers"}
# - {id: 209, cat: , desc: ""}
# - {id: 210, cat: , desc: ""}
# - {id: 211, cat: , desc: ""}
# - {id: 212, cat: , desc: ""}
# - {id: 213, cat: , desc: ""}
# - {id: 127, cat: , desc: ""}
- {id: 127, cat: PC/Phone-Other, desc: "9.5 Mobile / Miscellaneous"}
- {id: 214, cat: PC/Phone-Other, desc: "Mobile"}
- {id: 215, cat: PC/Phone-Other, desc: "Miscellaneous"}
# - {id: 214, cat: , desc: ""}
# - {id: 215, cat: , desc: ""}
# - {id: 129, cat: , desc: ""}
- {id: 129, cat: Other, desc: "9.6 Blocked DREAM TEAM"}
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: takelogin.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: td:contains("remaining tries")
test:
path: browse.php
selector: a[href*="/logout.php"]
download:
before:
path: "takethanks.php"
method: "post"
inputs:
torrentid: "{{ .DownloadUri.Query.id }}"
search:
path: browse.php
keywordsfilters:
# remove words <= 3 characters and surrounding special characters
- name: re_replace
args: ["(?:^|\\s)[_\\+\\/\\.\\-\\(\\)]*[\\S]{0,3}[_\\+\\/\\.\\-\\(\\)]*(?:\\s|$)", " "]
inputs:
do: "search"
keywords: "{{ .Keywords }}"
search_type: "t_name"
category: "0" # multi cat search not supported
include_dead_torrents: "yes"
rows:
selector: table#sortabletable > tbody > tr:has(a[href*="/details.php?id="])
filters:
- name: andmatch
args: 66
fields:
download:
selector: a[href*="/download.php?id="]
attribute: href
title:
selector: a[href*="/details.php?id="]
title:
optional: true
selector: div.tooltip-content > div
details:
selector: a[href*="/details.php?id="]
attribute: href
category:
selector: a[href*="/browse.php?category="]
attribute: href
filters:
- name: querystring
args: category
banner:
optional: true
selector: div.tooltip-content > img
attribute: src
size:
selector: td:nth-child(5)
grabs:
selector: td:nth-child(6)
seeders:
selector: td:nth-child(7)
leechers:
selector: td:nth-child(8)
downloadvolumefactor:
case:
img[alt^="Free Torrent "]: "0"
img[alt^="Silver Torrent "]: "0.5"
"*": "1"
uploadvolumefactor:
case:
"*": "1"
date:
selector: "td:nth-child(2) > div:has(span[style=\"float: right;\"])"
remove: span
filters:
- name: append
args: " +00:00"
- name: dateparse
args: "02-01-2006 15:04 -07:00"

View File

@@ -1,180 +1,180 @@
---
site: eotforum
name: EoT-Forum
description: "A German gerneral tracker"
language: de-de
type: private
encoding: windows-1252
links:
- http://eot-forum.net
caps:
categorymappings:
# Filme
- {id: 14, cat: Movies/SD, desc: "SD XviD"}
- {id: 15, cat: Movies/SD, desc: "SD x264"}
- {id: 16, cat: Movies/HD, desc: "HD"}
- {id: 68, cat: Movies/HD, desc: "UHD"}
- {id: 17, cat: Movies/3D, desc: "3D"}
- {id: 18, cat: Movies/DVD, desc: "DVD-R"}
- {id: 19, cat: Movies, desc: "Pack"}
- {id: 20, cat: Movies, desc: "International"}
- {id: 21, cat: XXX, desc: "XXX"}
# Serien/TV
- {id: 23, cat: TV/SD, desc: "SD XviD"}
- {id: 24, cat: TV/SD, desc: "SD x264"}
- {id: 25, cat: TV/HD, desc: "HD"}
- {id: 26, cat: TV/SD, desc: "DVD-R"}
- {id: 27, cat: TV, desc: "Pack"}
- {id: 28, cat: TV, desc: "International"}
- {id: 29, cat: TV/Sport, desc: "Sport"}
# Dokus
- {id: 31, cat: TV/Documentary, desc: "SD XviD"}
- {id: 32, cat: TV/Documentary, desc: "SD x264"}
- {id: 33, cat: TV/Documentary, desc: "HD"}
- {id: 34, cat: TV/Documentary, desc: "3D"}
- {id: 35, cat: TV/Documentary, desc: "Pack"}
- {id: 67, cat: TV/Documentary, desc: "DVD-R"}
- {id: 36, cat: TV/Documentary, desc: "International"}
# Audio
- {id: 38, cat: Audio, desc: "Charts"}
- {id: 39, cat: Audio/MP3, desc: "MP3"}
- {id: 40, cat: Audio/Lossless, desc: "Flac"}
- {id: 41, cat: Audio, desc: "Pack"}
- {id: 42, cat: Audio/Video, desc: "MusikVideo"}
- {id: 43, cat: Audio/Audiobook, desc: "Hörbücher"}
# Spiele
- {id: 45, cat: PC/Games, desc: "Windows"}
- {id: 46, cat: PC/Mac, desc: "MacOS"}
- {id: 47, cat: Console/PS4, desc: "Sony PS"}
- {id: 48, cat: Console/Xbox , desc: "Microsoft XBox"}
- {id: 49, cat: Console/NDS, desc: "Nintendo"}
- {id: 50, cat: PC/Games, desc: "Linux"}
- {id: 51, cat: Console, desc: "Andere"}
# Software
- {id: 53, cat: PC, desc: "Windows"}
- {id: 54, cat: PC/Mac, desc: "MacOS"}
- {id: 55, cat: PC, desc: "Linux"}
- {id: 56, cat: PC/Phone-Android, desc: "Android"}
- {id: 57, cat: PC/Phone-IOS, desc: "Apple IOS"}
- {id: 58, cat: PC/Phone-Other, desc: "Andere"}
# Sonstiges
- {id: 60, cat: Books, desc: "EBooks"}
- {id: 61, cat: Other, desc: "Bilder"}
- {id: 62, cat: TV/Anime, desc: "Anime"}
- {id: 63, cat: Other, desc: "MISC"}
- {id: 64, cat: XXX, desc: "XXX-Bilder/EBooks/Audio"}
# EOT-Specials
- {id: 66, cat: Other, desc: "Special"}
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: index.php?page=login
method: post
inputs:
uid: "{{ .Config.username }}"
pwd: "{{ .Config.password }}"
rememberme: "forever"
submit: "Login"
error:
- selector: td.lista[align="center"][colspan="2"] > span
test:
path: index.php
selector: img[alt="Ratio"]
ratio:
path: index.php
selector: img[alt="Ratio"] + font
search:
path: index.php
inputs:
page: "torrents"
search: "{{ .Query.Keywords }}"
options: "0"
active: "0"
gold: "0"
rows:
selector: table.lista > tbody > tr:has(a[href^="index.php?page=torrent-details&id="])
dateheaders:
selector: ":has(td.header > b)"
filters:
- name: replace
args: ["Torrents vom ", ""]
- name: replace
args: ["Januar", "January"]
- name: replace
args: ["Februar", "February"]
- name: replace
args: ["März", "March"]
- name: replace
args: ["Mai", "May"]
- name: replace
args: ["Juni", "June"]
- name: replace
args: ["Juli", "July"]
- name: replace
args: ["Oktober", "October"]
- name: replace
args: ["Dezember", "December"]
- name: dateparse
args: "02.January.2006"
fields:
download:
selector: a[href^="download.php?id="]
attribute: href
title:
selector: a[href^="index.php?page=torrent-details&id="]
attribute: title
filters:
- name: replace
args: ["Details anzeigen: ", ""]
category:
selector: a[href^="index.php?page=torrents&category="]
attribute: href
filters:
- name: querystring
args: category
comments:
selector: a[href*="#comments"]
attribute: href
size:
selector: td:nth-child(3)
grabs:
selector: td:nth-child(5)
filters:
- name: split
args: ["♦", 2]
- name: replace
args: ["---", "0"]
seeders:
selector: td:nth-child(5) > a:nth-child(1)
leechers:
selector: td:nth-child(5) > a:nth-child(2)
downloadvolumefactor:
case:
img[alt="gold"]: "0"
img[alt="silver"]: "0.5"
"*": "1"
uploadvolumefactor:
case:
img[alt="2x Upload Multiplier"]: "2"
img[alt="3x Upload Multiplier"]: "3"
img[alt="4x Upload Multiplier"]: "4"
img[alt="5x Upload Multiplier"]: "5"
img[alt="6x Upload Multiplier"]: "6"
img[alt="7x Upload Multiplier"]: "7"
img[alt="8x Upload Multiplier"]: "8"
img[alt="9x Upload Multiplier"]: "9"
img[alt="10x Upload Multiplier"]: "10"
"*": "1"
---
site: eotforum
name: EoT-Forum
description: "A German gerneral tracker"
language: de-de
type: private
encoding: windows-1252
links:
- https://eot-forum.net
caps:
categorymappings:
# Filme
- {id: 14, cat: Movies/SD, desc: "SD XviD"}
- {id: 15, cat: Movies/SD, desc: "SD x264"}
- {id: 16, cat: Movies/HD, desc: "HD"}
- {id: 68, cat: Movies/HD, desc: "UHD"}
- {id: 17, cat: Movies/3D, desc: "3D"}
- {id: 18, cat: Movies/DVD, desc: "DVD-R"}
- {id: 19, cat: Movies, desc: "Pack"}
- {id: 20, cat: Movies, desc: "International"}
- {id: 21, cat: XXX, desc: "XXX"}
# Serien/TV
- {id: 23, cat: TV/SD, desc: "SD XviD"}
- {id: 24, cat: TV/SD, desc: "SD x264"}
- {id: 25, cat: TV/HD, desc: "HD"}
- {id: 26, cat: TV/SD, desc: "DVD-R"}
- {id: 27, cat: TV, desc: "Pack"}
- {id: 28, cat: TV, desc: "International"}
- {id: 29, cat: TV/Sport, desc: "Sport"}
# Dokus
- {id: 31, cat: TV/Documentary, desc: "SD XviD"}
- {id: 32, cat: TV/Documentary, desc: "SD x264"}
- {id: 33, cat: TV/Documentary, desc: "HD"}
- {id: 34, cat: TV/Documentary, desc: "3D"}
- {id: 35, cat: TV/Documentary, desc: "Pack"}
- {id: 67, cat: TV/Documentary, desc: "DVD-R"}
- {id: 36, cat: TV/Documentary, desc: "International"}
# Audio
- {id: 38, cat: Audio, desc: "Charts"}
- {id: 39, cat: Audio/MP3, desc: "MP3"}
- {id: 40, cat: Audio/Lossless, desc: "Flac"}
- {id: 41, cat: Audio, desc: "Pack"}
- {id: 42, cat: Audio/Video, desc: "MusikVideo"}
- {id: 43, cat: Audio/Audiobook, desc: "Hörbücher"}
# Spiele
- {id: 45, cat: PC/Games, desc: "Windows"}
- {id: 46, cat: PC/Mac, desc: "MacOS"}
- {id: 47, cat: Console/PS4, desc: "Sony PS"}
- {id: 48, cat: Console/Xbox , desc: "Microsoft XBox"}
- {id: 49, cat: Console/NDS, desc: "Nintendo"}
- {id: 50, cat: PC/Games, desc: "Linux"}
- {id: 51, cat: Console, desc: "Andere"}
# Software
- {id: 53, cat: PC, desc: "Windows"}
- {id: 54, cat: PC/Mac, desc: "MacOS"}
- {id: 55, cat: PC, desc: "Linux"}
- {id: 56, cat: PC/Phone-Android, desc: "Android"}
- {id: 57, cat: PC/Phone-IOS, desc: "Apple IOS"}
- {id: 58, cat: PC/Phone-Other, desc: "Andere"}
# Sonstiges
- {id: 60, cat: Books, desc: "EBooks"}
- {id: 61, cat: Other, desc: "Bilder"}
- {id: 62, cat: TV/Anime, desc: "Anime"}
- {id: 63, cat: Other, desc: "MISC"}
- {id: 64, cat: XXX, desc: "XXX-Bilder/EBooks/Audio"}
# EOT-Specials
- {id: 66, cat: Other, desc: "Special"}
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: index.php?page=login
method: post
inputs:
uid: "{{ .Config.username }}"
pwd: "{{ .Config.password }}"
rememberme: "forever"
submit: "Login"
error:
- selector: td.lista[align="center"][colspan="2"] > span
test:
path: index.php
selector: img[alt="Ratio"]
ratio:
path: index.php
selector: img[alt="Ratio"] + font
search:
path: index.php
inputs:
page: "torrents"
search: "{{ .Query.Keywords }}"
options: "0"
active: "0"
gold: "0"
rows:
selector: table.lista > tbody > tr:has(a[href^="index.php?page=torrent-details&id="])
dateheaders:
selector: ":has(td.header > b)"
filters:
- name: replace
args: ["Torrents vom ", ""]
- name: replace
args: ["Januar", "January"]
- name: replace
args: ["Februar", "February"]
- name: replace
args: ["März", "March"]
- name: replace
args: ["Mai", "May"]
- name: replace
args: ["Juni", "June"]
- name: replace
args: ["Juli", "July"]
- name: replace
args: ["Oktober", "October"]
- name: replace
args: ["Dezember", "December"]
- name: dateparse
args: "02.January.2006"
fields:
download:
selector: a[href^="download.php?id="]
attribute: href
title:
selector: a[href^="index.php?page=torrent-details&id="]
attribute: title
filters:
- name: replace
args: ["Details anzeigen: ", ""]
category:
selector: a[href^="index.php?page=torrents&category="]
attribute: href
filters:
- name: querystring
args: category
comments:
selector: a[href*="#comments"]
attribute: href
size:
selector: td:nth-child(3)
grabs:
selector: td:nth-child(5)
filters:
- name: split
args: ["♦", 2]
- name: replace
args: ["---", "0"]
seeders:
selector: td:nth-child(5) > a:nth-child(1)
leechers:
selector: td:nth-child(5) > a:nth-child(2)
downloadvolumefactor:
case:
img[alt="gold"]: "0"
img[alt="silver"]: "0.5"
"*": "1"
uploadvolumefactor:
case:
img[alt="2x Upload Multiplier"]: "2"
img[alt="3x Upload Multiplier"]: "3"
img[alt="4x Upload Multiplier"]: "4"
img[alt="5x Upload Multiplier"]: "5"
img[alt="6x Upload Multiplier"]: "6"
img[alt="7x Upload Multiplier"]: "7"
img[alt="8x Upload Multiplier"]: "8"
img[alt="9x Upload Multiplier"]: "9"
img[alt="10x Upload Multiplier"]: "10"
"*": "1"

View File

@@ -1,119 +1,119 @@
---
site: estone
name: eStone
language: hu-hu
type: private
encoding: UTF-8
links:
- http://estone.cc/
caps:
categorymappings:
- {id: 24, cat: Movies/SD, desc: "Film/XviD/Hun"}
- {id: 38, cat: Movies/SD, desc: "Film/XviD/Eng"}
- {id: 51, cat: Movies/SD, desc: "Film/SD/Hun"}
- {id: 52, cat: Movies/SD, desc: "Film/SD/Eng"}
- {id: 25, cat: Movies/DVD, desc: "Film/DVD/Hun"}
- {id: 26, cat: Movies/DVD, desc: "Film/DVD/Eng"}
- {id: 42, cat: Movies/HD, desc: "Film/HD/Hun"}
- {id: 50, cat: Movies/HD, desc: "Film/HD/Eng"}
- {id: 36, cat: TV, desc: "Sorozat/Hun"}
- {id: 47, cat: TV, desc: "Sorozat/Eng"}
- {id: 41, cat: Audio/MP3, desc: "Mp3/Hun"}
- {id: 40, cat: Audio/MP3, desc: "Mp3/Eng"}
- {id: 35, cat: PC/0day, desc: "Program"}
- {id: 28, cat: PC/Games, desc: "Játék/ISO"}
- {id: 30, cat: PC/Games, desc: "Játék/Rip"}
- {id: 32, cat: Console, desc: "Konzol"}
- {id: 34, cat: PC/Phone-Other, desc: "Mobil"}
- {id: 44, cat: Books, desc: "Könyv/Hun"}
- {id: 33, cat: Books, desc: "Könyv/Eng"}
- {id: 31, cat: Other, desc: "Képek"}
- {id: 39, cat: XXX, desc: "XXX/Film"}
- {id: 49, cat: XXX/Imageset, desc: "XXX/Kép"}
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: login.php
method: post
inputs:
login_username: "{{ .Config.username }}"
login_password: "{{ .Config.password }}"
error:
- selector: script:contains("hiba(\"")
message:
selector: script:contains("hiba(\"")
filters:
- name: replace
args: ["hiba(\"", ""]
- name: replace
args: ["\");", ""]
test:
path: /letoltes.php
search:
path: /letoltes.php
method: get
inputs:
$raw: "{{range .Categories}}kat[]={{.}}&{{end}}"
kereses_nev: "{{ .Query.Keywords }}"
rows:
selector: body > div[id^="torrent_"]
fields:
title:
selector: a[title]
attribute: title
category:
selector: div#kategoria_torrent > a
attribute: href
filters:
- name: querystring
args: cat
details:
attribute: id
filters:
- name: replace
args: ["torrent_", "adatlap.php?id="]
download:
attribute: id
filters:
- name: replace
args: ["torrent_", "download.php?id="]
banner:
selector: img[onmouseover]
attribute: onmouseover
filters:
- name: regexp
args: borito\("(.*?) +?",
size:
selector: input[id^="meret_"]
attribute: value
grabs:
selector: div:nth-child(8) > div
seeders:
selector: div:nth-child(6) > div > a
leechers:
selector: div:nth-child(7) > div > a
date:
selector: div:nth-child(4)
filters:
- name: split
args: ["(", 0]
- name: append
args: "+01:00"
- name: dateparse
args: "2006-01-02 15:04:05 -07:00"
downloadvolumefactor:
case:
img[src="pic/free.png"]: "0"
"*": "1"
uploadvolumefactor:
case:
img[src="pic/dupla_up.png"]: "2"
"*": "1"
description:
selector: div:nth-child(2)
remove: a
---
site: estone
name: eStone
language: hu-hu
type: private
encoding: UTF-8
links:
- http://estone.cc/
caps:
categorymappings:
- {id: 24, cat: Movies/SD, desc: "Film/XviD/Hun"}
- {id: 38, cat: Movies/SD, desc: "Film/XviD/Eng"}
- {id: 51, cat: Movies/SD, desc: "Film/SD/Hun"}
- {id: 52, cat: Movies/SD, desc: "Film/SD/Eng"}
- {id: 25, cat: Movies/DVD, desc: "Film/DVD/Hun"}
- {id: 26, cat: Movies/DVD, desc: "Film/DVD/Eng"}
- {id: 42, cat: Movies/HD, desc: "Film/HD/Hun"}
- {id: 50, cat: Movies/HD, desc: "Film/HD/Eng"}
- {id: 36, cat: TV, desc: "Sorozat/Hun"}
- {id: 47, cat: TV, desc: "Sorozat/Eng"}
- {id: 41, cat: Audio/MP3, desc: "Mp3/Hun"}
- {id: 40, cat: Audio/MP3, desc: "Mp3/Eng"}
- {id: 35, cat: PC/0day, desc: "Program"}
- {id: 28, cat: PC/Games, desc: "Játék/ISO"}
- {id: 30, cat: PC/Games, desc: "Játék/Rip"}
- {id: 32, cat: Console, desc: "Konzol"}
- {id: 34, cat: PC/Phone-Other, desc: "Mobil"}
- {id: 44, cat: Books, desc: "Könyv/Hun"}
- {id: 33, cat: Books, desc: "Könyv/Eng"}
- {id: 31, cat: Other, desc: "Képek"}
- {id: 39, cat: XXX, desc: "XXX/Film"}
- {id: 49, cat: XXX/Imageset, desc: "XXX/Kép"}
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: login.php
method: post
inputs:
login_username: "{{ .Config.username }}"
login_password: "{{ .Config.password }}"
error:
- selector: script:contains("hiba(\"")
message:
selector: script:contains("hiba(\"")
filters:
- name: replace
args: ["hiba(\"", ""]
- name: replace
args: ["\");", ""]
test:
path: /letoltes.php
search:
path: /letoltes.php
method: get
inputs:
$raw: "{{range .Categories}}kat[]={{.}}&{{end}}"
kereses_nev: "{{ .Query.Keywords }}"
rows:
selector: body > div[id^="torrent_"]
fields:
title:
selector: a[title]
attribute: title
category:
selector: div#kategoria_torrent > a
attribute: href
filters:
- name: querystring
args: cat
details:
attribute: id
filters:
- name: replace
args: ["torrent_", "adatlap.php?id="]
download:
attribute: id
filters:
- name: replace
args: ["torrent_", "download.php?id="]
banner:
selector: img[onmouseover]
attribute: onmouseover
filters:
- name: regexp
args: borito\("(.*?) +?",
size:
selector: input[id^="meret_"]
attribute: value
grabs:
selector: div:nth-child(8) > div
seeders:
selector: div:nth-child(6) > div > a
leechers:
selector: div:nth-child(7) > div > a
date:
selector: div:nth-child(4)
filters:
- name: split
args: ["(", 0]
- name: append
args: "+01:00"
- name: dateparse
args: "2006-01-02 15:04:05 -07:00"
downloadvolumefactor:
case:
img[src="pic/free.png"]: "0"
"*": "1"
uploadvolumefactor:
case:
img[src="pic/dupla_up.png"]: "2"
"*": "1"
description:
selector: div:nth-child(2)
remove: a

View File

@@ -1,119 +1,119 @@
---
site: ethor
name: Ethor.net (Thor's Land)
description: "A French gerneral tracker"
language: fr-fr
type: private
encoding: UTF-8
links:
- https://ethor.net/
caps:
categorymappings:
- {id: 22, cat: PC, desc: "Applications/Divers"}
- {id: 1, cat: PC, desc: "Applications/PC ISO"}
- {id: 44, cat: PC, desc: "Applications/Portable"}
- {id: 47, cat: Movies/BluRay, desc: "Films/Bluray"}
- {id: 20, cat: Movies/DVD, desc: "Films/DVDr"}
- {id: 42, cat: Movies/HD, desc: "Films/HD Rip"}
- {id: 19, cat: Movies/SD, desc: "Films/SD Rip"}
- {id: 5, cat: Movies/SD, desc: "Films/VCD"}
- {id: 4, cat: PC/Games, desc: "Jeux/PC"}
- {id: 41, cat: Console, desc: "Jeux/Portable"}
- {id: 34, cat: Console/PS4, desc: "Jeux/PS2-PS3"}
- {id: 38, cat: Console/Wii, desc: "Jeux/Wii-GC"}
- {id: 40, cat: Console/Xbox, desc: "Jeux/Xbox360"}
- {id: 6, cat: Audio, desc: "Musique"}
- {id: 37, cat: Audio/Video, desc: "Musique/Video"}
- {id: 48, cat: TV/HD, desc: "Série-Télé/Bluray"}
- {id: 45, cat: TV/SD, desc: "Série-Télé/DVDr"}
- {id: 43, cat: TV/HD, desc: "Série-Télé/HD Rip"}
- {id: 7, cat: TV/SD, desc: "Série-Télé/SD Rip"}
- {id: 23, cat: Books, desc: "E-Books"}
- {id: 46, cat: Other, desc: "Évé. sportif"}
- {id: 36, cat: Other, desc: "Kidz"}
- {id: 25, cat: Other, desc: "Misc"}
- {id: 9, cat: XXX, desc: "XXX"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q, imdbid]
login:
path: login3.php
method: form
form: form[action="login3.php?takelogin=1"]
captcha:
type: image
image: img#validationimage
input: validationcode
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
secure_cookie: "0"
test:
path: browse.php
ratio:
path: browse.php
selector: span#ratioRatio
search:
path: browse.php
inputs:
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
search: "{{if .Query.IMDBID}}{{ .Query.IMDBID }}{{else}}{{ .Query.Keywords }}{{end}}"
advcat: "0"
incldead: "1"
stype: "b"
dp: "0"
isUserClick: "0"
rows:
selector: p + table > tbody > tr:has(a[href^="/details.php"])
fields:
download:
selector: a[href^="/details.php"]:has(b)
attribute: href
filters:
- name: replace
args: ["/details.php", "/download.php"]
title:
selector: a[href^="/details.php"]:has(b)
category:
selector: a[href^="/browse.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
comments:
selector: a[href^="/details.php"]:has(b)
attribute: href
files:
selector: a[href*="#filelist"]
size:
selector: td:nth-child(6)
grabs:
selector: td:nth-child(7)
filters:
- name: regexp
args: "(\\d+)"
seeders:
selector: td:nth-child(8)
leechers:
selector: td:nth-child(9)
date:
selector: td:nth-child(5)
filters:
- name: append
args: " -05:00" # timezone offset
- name: dateparse
args: "2006-01-0215:04:05 -07:00"
downloadvolumefactor:
case:
"img[title^=\"Freeleech: \"]": "0"
"img[title^=\"Half Freeleech: \"]": "0.5"
"*": "1"
uploadvolumefactor:
case:
"*": "1"
---
site: ethor
name: Ethor.net (Thor's Land)
description: "A French gerneral tracker"
language: fr-fr
type: private
encoding: UTF-8
links:
- https://ethor.net/
caps:
categorymappings:
- {id: 22, cat: PC, desc: "Applications/Divers"}
- {id: 1, cat: PC, desc: "Applications/PC ISO"}
- {id: 44, cat: PC, desc: "Applications/Portable"}
- {id: 47, cat: Movies/BluRay, desc: "Films/Bluray"}
- {id: 20, cat: Movies/DVD, desc: "Films/DVDr"}
- {id: 42, cat: Movies/HD, desc: "Films/HD Rip"}
- {id: 19, cat: Movies/SD, desc: "Films/SD Rip"}
- {id: 5, cat: Movies/SD, desc: "Films/VCD"}
- {id: 4, cat: PC/Games, desc: "Jeux/PC"}
- {id: 41, cat: Console, desc: "Jeux/Portable"}
- {id: 34, cat: Console/PS4, desc: "Jeux/PS2-PS3"}
- {id: 38, cat: Console/Wii, desc: "Jeux/Wii-GC"}
- {id: 40, cat: Console/Xbox, desc: "Jeux/Xbox360"}
- {id: 6, cat: Audio, desc: "Musique"}
- {id: 37, cat: Audio/Video, desc: "Musique/Video"}
- {id: 48, cat: TV/HD, desc: "Série-Télé/Bluray"}
- {id: 45, cat: TV/SD, desc: "Série-Télé/DVDr"}
- {id: 43, cat: TV/HD, desc: "Série-Télé/HD Rip"}
- {id: 7, cat: TV/SD, desc: "Série-Télé/SD Rip"}
- {id: 23, cat: Books, desc: "E-Books"}
- {id: 46, cat: Other, desc: "Évé. sportif"}
- {id: 36, cat: Other, desc: "Kidz"}
- {id: 25, cat: Other, desc: "Misc"}
- {id: 9, cat: XXX, desc: "XXX"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q, imdbid]
login:
path: login3.php
method: form
form: form[action="login3.php?takelogin=1"]
captcha:
type: image
image: img#validationimage
input: validationcode
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
secure_cookie: "0"
test:
path: browse.php
ratio:
path: browse.php
selector: span#ratioRatio
search:
path: browse.php
inputs:
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
search: "{{if .Query.IMDBID}}{{ .Query.IMDBID }}{{else}}{{ .Query.Keywords }}{{end}}"
advcat: "0"
incldead: "1"
stype: "b"
dp: "0"
isUserClick: "0"
rows:
selector: p + table > tbody > tr:has(a[href^="/details.php"])
fields:
download:
selector: a[href^="/details.php"]:has(b)
attribute: href
filters:
- name: replace
args: ["/details.php", "/download.php"]
title:
selector: a[href^="/details.php"]:has(b)
category:
selector: a[href^="/browse.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
comments:
selector: a[href^="/details.php"]:has(b)
attribute: href
files:
selector: a[href*="#filelist"]
size:
selector: td:nth-child(6)
grabs:
selector: td:nth-child(7)
filters:
- name: regexp
args: "(\\d+)"
seeders:
selector: td:nth-child(8)
leechers:
selector: td:nth-child(9)
date:
selector: td:nth-child(5)
filters:
- name: append
args: " -05:00" # timezone offset
- name: dateparse
args: "2006-01-0215:04:05 -07:00"
downloadvolumefactor:
case:
"img[title^=\"Freeleech: \"]": "0"
"img[title^=\"Half Freeleech: \"]": "0.5"
"*": "1"
uploadvolumefactor:
case:
"*": "1"

View File

@@ -43,7 +43,8 @@
download:
selector: td:nth-child(3) a.magnet, td:nth-child(3) a
attribute: href
size|optional:
size:
optional: true
selector: td:nth-child(4)
date:
selector: td:nth-child(5)

View File

@@ -1,130 +1,140 @@
---
site: freedomhd
name: Freedom-HD
language: fr-fr
type: private
encoding: UTF-8
links:
- http://freedom-paradise.eu/
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"}
# 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"}
# 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"}
# SPECTACLES
- {id: 118, cat: TV/Sport, desc: "HDRIP1080p"}
- {id: 117, cat: TV/Sport, desc: "HDRIP720p"}
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: account-login.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
remember: "yes"
returnto: "/"
error:
- selector: div.myFrame:has(font.error)
test:
path: torrents-search.php
search:
path: torrents-search.php
inputs:
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
search: "{{ .Query.Keywords }}"
incldead: "1"
rows:
selector: table.ttable_headinner > tbody > tr[class^="t-row"]
filters:
- name: andmatch
after: 1
fields:
download:
selector: a[href^="torrents-details.php?id="]
attribute: href
filters:
- name: replace
args: ["torrents-details.php", "download.php"]
title:
selector: a[href^="torrents-details.php?id="]
attribute: title
category:
selector: a[href^="torrents.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
details:
selector: a[href^="torrents-details.php?id="]
attribute: href
description:
selector: ul
banner:
selector: img.rounded-img
attribute: src
size:
selector: td:nth-child(3)
grabs:
selector: td:nth-child(6)
seeders:
selector: td:nth-child(4)
leechers:
selector: td:nth-child(5)
downloadvolumefactor:
case:
img[alt="freeleech"]: "0"
"*": "1"
uploadvolumefactor:
case:
---
site: freedomhd
name: Freedom-HD
language: fr-fr
type: private
encoding: UTF-8
links:
- http://freedom-paradise.eu/
download:
before:
path: "list_thanks.php"
method: "get"
inputs:
id: "{{ .DownloadUri.Query.id }}"
to: "give"
torrent: "{{ .DownloadUri.Query.id }}"
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"}
# 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"}
# 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"}
# SPECTACLES
- {id: 118, cat: TV/Sport, desc: "HDRIP1080p"}
- {id: 117, cat: TV/Sport, desc: "HDRIP720p"}
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: account-login.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
remember: "yes"
returnto: "/"
error:
- selector: div.myFrame:has(font.error)
test:
path: torrents-search.php
search:
path: torrents-search.php
inputs:
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
search: "{{ .Query.Keywords }}"
incldead: "1"
rows:
selector: table.ttable_headinner > tbody > tr[class^="t-row"]
filters:
- name: andmatch
after: 1
fields:
download:
selector: a[href^="torrents-details.php?id="]
attribute: href
filters:
- name: replace
args: ["torrents-details.php", "download.php"]
title:
selector: a[href^="torrents-details.php?id="]
attribute: title
category:
selector: a[href^="torrents.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
details:
selector: a[href^="torrents-details.php?id="]
attribute: href
description:
selector: ul
banner:
selector: img.rounded-img
attribute: src
size:
selector: td:nth-child(3)
grabs:
selector: td:nth-child(6)
seeders:
selector: td:nth-child(4)
leechers:
selector: td:nth-child(5)
downloadvolumefactor:
case:
img[alt="freeleech"]: "0"
"*": "1"
uploadvolumefactor:
case:
"*": "1"

View File

@@ -5,6 +5,8 @@
type: private
encoding: UTF-8
links:
- https://fullmixmusic.org/
legacylinks:
- http://fullmixmusic.org/
caps:

View File

@@ -1,4 +1,4 @@
---
---
site: funkytorrents
name: FunkyTorrents
language: en-us
@@ -72,7 +72,8 @@
rows:
selector: table.mainouter > tbody > tr > td.outer > table > tbody > tr.mouse_out
fields:
description|optional:
description:
optional: true
selector: td:nth-child(2) > font
title:
selector: td:nth-child(2)
@@ -83,7 +84,8 @@
filters:
- name: querystring
args: cat
category|optional:
category:
optional: true
case:
a[href="/browse.php?ext=1&bitrate=Lossless"]: "3040"
a[href="/browse.php?ext=1&format=MP3"]: "3010"
@@ -116,4 +118,4 @@
"*": "1"
uploadvolumefactor:
case:
"*": "1"
"*": "1"

View File

@@ -0,0 +1,114 @@
site: gay-torrents
name: Gay-Torrents.net
description: "Gay Torrents Live Free!"
language: en-us
type: semi-private
encoding: UTF-8
links:
- https://www.gay-torrents.net/
caps:
categorymappings:
- {id: porn , cat: XXX , desc: "Porn"}
- {id: porn/Amateur , cat: XXX , desc: "Amateur"}
- {id: porn/Anal , cat: XXX , desc: "Anal"}
- {id: porn/Asian , cat: XXX , desc: "Asian"}
- {id: porn/Bareback , cat: XXX , desc: "Bareback"}
- {id: porn/Bears , cat: XXX , desc: "Bears"}
- {id: porn/Bisexual , cat: XXX , desc: "Bisexual"}
- {id: porn/Black-Men , cat: XXX , desc: "Black-Men"}
- {id: porn/Chubs , cat: XXX , desc: "Chubs"}
- {id: porn/Clips , cat: XXX/Packs , desc: "Clips"}
- {id: porn/Cross-Generation , cat: XXX , desc: "Cross-Generation"}
- {id: porn/DVD-R , cat: XXX/DVD , desc: "DVD-R"}
- {id: porn/Fetish , cat: XXX , desc: "Fetish"}
- {id: porn/Group-Sex , cat: XXX , desc: "Group-Sex"}
- {id: porn/HD-Movies , cat: XXX , desc: "HD-Movies"}
- {id: porn/Hunks , cat: XXX , desc: "Hunks"}
- {id: porn/Images , cat: XXX/Imageset , desc: "Images"}
- {id: porn/Interracial , cat: XXX , desc: "Interracial"}
- {id: porn/Jocks , cat: XXX , desc: "Jocks"}
- {id: porn/Latino , cat: XXX , desc: "Latino"}
- {id: porn/Mature , cat: XXX , desc: "Mature"}
- {id: porn/Member , cat: XXX , desc: "Member"}
- {id: porn/MiddleEast , cat: XXX , desc: "MiddleEast"}
- {id: porn/Military , cat: XXX , desc: "Military"}
- {id: porn/Muscle , cat: XXX , desc: "Muscle"}
- {id: porn/Oral-Sex , cat: XXX , desc: "Oral-Sex"}
- {id: porn/Solo , cat: XXX , desc: "Solo"}
- {id: porn/Transsexual , cat: XXX , desc: "Transsexual"}
- {id: porn/Twinks , cat: XXX , desc: "Twinks"}
- {id: porn/Vintage , cat: XXX , desc: "Vintage"}
- {id: porn/Wrestling , cat: XXX , desc: "Wrestling"}
- {id: nonporn , cat: Other , desc: "NonPorn"}
- {id: nonporn/Anime , cat: TV/Anime , desc: "Anime"}
- {id: nonporn/Applications , cat: PC , desc: "Applications"}
- {id: nonporn/Comedy , cat: Movies , desc: "Comedy"}
- {id: nonporn/Comics , cat: Books/Comics , desc: "Comics"}
- {id: nonporn/Coming-Out , cat: Movies , desc: "Coming-Out"}
- {id: nonporn/Documentary , cat: Movies , desc: "Documentary"}
- {id: nonporn/Drama , cat: Movies , desc: "Drama"}
- {id: nonporn/DVD-R , cat: Movies/DVD , desc: "DVD-R"}
- {id: nonporn/Gay-Movies , cat: Movies , desc: "Gay-Movies"}
- {id: nonporn/Misc , cat: Other/Misc , desc: "Misc"}
- {id: nonporn/Short-Film , cat: Movies , desc: "Short-Film"}
- {id: nonporn/Softcore , cat: Movies , desc: "Softcore"}
- {id: nonporn/Thriller , cat: Movies , desc: "Thriller"}
- {id: nonporn/TV-Episode , cat: TV , desc: "TV-Episode"}
modes:
search: [q]
login:
path: login.php
method: post
inputs:
vb_login_username: "{{ .Config.username }}"
vb_login_password: "{{ .Config.password }}"
cookieuser: "1"
do: "login"
test:
path: torrentslist.php
selector: ul.isuser
search:
path: "{{if .Query.Keywords}}search.php{{else}}torrentslist.php{{end}}"
inputs:
$raw: "{{range .Categories}}type={{.}}&{{end}}"
textsearch: "{{ .Query.Keywords }}"
rows:
selector: ul.TorrentList
fields:
category:
selector: .TorrentList1 > a
attribute: href
filters:
- name: querystring
args: type
title:
selector: .TorrentList2 > a
download:
selector: .TorrentList2 > a
attribute: href
filters:
- name: append
args: "&do=download"
details:
selector: .TorrentList2 > a
attribute: href
size:
selector: .TorrentList3
seeders:
selector: .TorrentList6
leechers:
selector: .TorrentList7
date:
selector: li.TorrentList8
filters:
- name: dateparse
args: "02 Jan 06, 15:04"
downloadvolumefactor:
case:
".TorrentList2 > a:contains(\"[FFL]\")": "0"
"*": "1"
uploadvolumefactor:
text: "1"

View File

@@ -0,0 +1,113 @@
site: gaytorrentru
name: GayTorrent.ru
description: "World largest gay porn library for free with a stunning forum and 24/7 Chat"
language: en-us
type: private
encoding: UTF-8
links:
- https://www.gaytorrent.ru/
caps:
categorymappings:
- {id: 62 , cat: XXX , desc: "Amateur"}
- {id: 29 , cat: XXX , desc: "Anal"}
- {id: 46 , cat: XXX , desc: "Anime Games"}
- {id: 30 , cat: XXX , desc: "Asian"}
- {id: 43 , cat: XXX , desc: "Bareback"}
- {id: 19 , cat: XXX , desc: "BDSM"}
- {id: 17 , cat: XXX , desc: "Bears"}
- {id: 44 , cat: XXX , desc: "Black"}
- {id: 50 , cat: Books , desc: "Books & Magazines"}
- {id: 9 , cat: XXX , desc: "Chubbies"}
- {id: 7 , cat: XXX , desc: "Clips"}
- {id: 48 , cat: Books/Comics , desc: "Comic & Yaoi"}
- {id: 5 , cat: XXX , desc: "Daddies / Sons"}
- {id: 34 , cat: XXX , desc: "Fetish"}
- {id: 27 , cat: XXX , desc: "Grey / Older"}
- {id: 32 , cat: XXX , desc: "Group-Sex"}
- {id: 63 , cat: XXX , desc: "Homemade"}
- {id: 12 , cat: XXX , desc: "Hunks"}
- {id: 33 , cat: XXX , desc: "Images"}
- {id: 53 , cat: XXX , desc: "Interracial"}
- {id: 57 , cat: XXX , desc: "Jocks"}
- {id: 35 , cat: XXX , desc: "Latino"}
- {id: 36 , cat: XXX , desc: "Mature"}
- {id: 58 , cat: PC , desc: "Media Programs"}
- {id: 37 , cat: XXX , desc: "Member"}
- {id: 54 , cat: XXX , desc: "Middle Eastern"}
- {id: 38 , cat: XXX , desc: "Military"}
- {id: 39 , cat: XXX , desc: "Oral-Sex"}
- {id: 47 , cat: XXX , desc: "Shemale"}
- {id: 56 , cat: XXX , desc: "Softcore"}
- {id: 40 , cat: XXX , desc: "Solo"}
- {id: 45 , cat: Movies , desc: "Themed Movie"}
- {id: 1 , cat: TV , desc: "TV / Episodes"}
- {id: 41 , cat: XXX , desc: "Twinks"}
- {id: 42 , cat: XXX , desc: "Vintage"}
- {id: 51 , cat: XXX , desc: "Voyeur"}
- {id: 65 , cat: XXX , desc: "Wrestling and Sports"}
- {id: 28 , cat: XXX , desc: "Youngblood"}
modes:
search: [q]
login:
path: takelogin.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
test:
path: browse.php
search:
path: browse.php
inputs:
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
search: "{{ .Query.Keywords }}"
incldead: "0" # Searches only for alive torrents
rows:
selector: table.browse_result > tbody > tr:has(a[href^="details.php?id="])
fields:
category:
selector: a[href^="browse.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
title:
selector: .browsedesc > a
download:
selector: a[href^="download.php/"]
attribute: href
details:
selector: a[href^="details.php?id="]
attribute: href
grabs:
selector: .tsnatch
files:
selector: .tfiles
filters:
- name: regexp
args: ([\d]+)
size:
selector: .tsize
seeders:
optional: true
selector: a[href$="&toseeders=1"]
leechers:
optional: true
selector: a[href$="&todlers=1"]
date:
selector: .tadded
filters:
- name: re_replace
args: ["(\\d{4}-\\d{2}-\\d{2})(\\d{2}:\\d{2}:\\d{2})(.*)","$1 $2"]
- name: dateparse
args: "2006-01-02 15:04:05"
downloadvolumefactor:
case:
"td:nth-child(3) > div > nobr > font[color=\"yellow\"]": "0"
"*": "1"
uploadvolumefactor:
case:
"*": "1"

View File

@@ -1,80 +1,80 @@
---
site: gfxpeers
name: GFXPeers
language: en-us
type: private
encoding: UTF-8
links:
- https://gfxpeers.net/
caps:
categorymappings:
- {id: 1, cat: PC/0day, desc: "Applications"}
- {id: 2, cat: PC/0day, desc: "Plug-ins"}
- {id: 3, cat: Other, desc: "Tutorials"}
- {id: 4, cat: Other, desc: "Textures"}
- {id: 5, cat: Other, desc: "3D Models"}
- {id: 6, cat: Other, desc: "Game-Dev"}
- {id: 7, cat: Other, desc: "Miscellaneous"}
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: /login.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
keeplogged: "1"
error:
- selector: .auth_form > .warning
test:
path: /torrents.php
search:
path: /torrents.php
inputs:
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
searchstr: "{{ .Query.Keywords }}"
order_by: "time"
order_way: "desc"
action: "advanced"
searchsubmit: "1"
rows:
selector: table#torrent_table > tbody > tr.torrent
fields:
download:
selector: a[href^="torrents.php?action=download&id="]
attribute: href
title:
selector: a[href^="torrents.php?id="]
downloadvolumefactor:
case:
"*": "1"
uploadvolumefactor:
case:
"*": "1"
category:
selector: a[href^="torrents.php?filter_cat"]
attribute: href
filters:
- name: regexp
args: "\\[(\\d+?)\\]"
details:
selector: a[href^="torrents.php?id="]
attribute: href
size:
selector: td:nth-child(5)
grabs:
selector: td:nth-child(6)
files:
selector: td:nth-child(3)
seeders:
selector: td:nth-child(7)
leechers:
selector: td:nth-child(8)
date:
selector: td:nth-child(4)
---
site: gfxpeers
name: GFXPeers
language: en-us
type: private
encoding: UTF-8
links:
- https://gfxpeers.net/
caps:
categorymappings:
- {id: 1, cat: PC/0day, desc: "Applications"}
- {id: 2, cat: PC/0day, desc: "Plug-ins"}
- {id: 3, cat: Other, desc: "Tutorials"}
- {id: 4, cat: Other, desc: "Textures"}
- {id: 5, cat: Other, desc: "3D Models"}
- {id: 6, cat: Other, desc: "Game-Dev"}
- {id: 7, cat: Other, desc: "Miscellaneous"}
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: /login.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
keeplogged: "1"
error:
- selector: .auth_form > .warning
test:
path: /torrents.php
search:
path: /torrents.php
inputs:
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
searchstr: "{{ .Query.Keywords }}"
order_by: "time"
order_way: "desc"
action: "advanced"
searchsubmit: "1"
rows:
selector: table#torrent_table > tbody > tr.torrent
fields:
download:
selector: a[href^="torrents.php?action=download&id="]
attribute: href
title:
selector: a[href^="torrents.php?id="]
downloadvolumefactor:
case:
"*": "1"
uploadvolumefactor:
case:
"*": "1"
category:
selector: a[href^="torrents.php?filter_cat"]
attribute: href
filters:
- name: regexp
args: "\\[(\\d+?)\\]"
details:
selector: a[href^="torrents.php?id="]
attribute: href
size:
selector: td:nth-child(5)
grabs:
selector: td:nth-child(6)
files:
selector: td:nth-child(3)
seeders:
selector: td:nth-child(7)
leechers:
selector: td:nth-child(8)
date:
selector: td:nth-child(4)

View File

@@ -70,6 +70,8 @@
blah: "0"
rows:
selector: table#torrenttable > tbody > tr:has()
error:
- selector: div.content:contains("Meg van vonva a letöltési jogod")
fields:
download:
selector: a[href^="/details.php?id="]

View File

@@ -0,0 +1,77 @@
---
site: gktorrent
name: GkTorrent
language: fr-fr
type: public
encoding: UTF-8
links:
- https://www.gktorrent.com
caps:
categorymappings:
- {id: movies, cat: Movies, desc: "Movies"}
- {id: tvshows, cat: TV, desc: "TV Shows"}
- {id: softwares, cat: PC, desc: "Softwares"}
- {id: music, cat: Audio, desc: "Music"}
- {id: games, cat: Console, desc: "Games"}
- {id: books, cat: Books, desc: "Books"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
settings: []
download:
selector: a[href^="/get_torrent/"]
search:
path: "/search/{{ .Query.Keywords }}"
rows:
selector: div.listing-torrent > table > tbody > tr:has(a)
fields:
site_date:
selector: td:nth-child(1) a
filters:
# date is at the end of the title, so we get it and name it site_date
- name: regexp
args: "(\\w+)$"
title:
selector: td:nth-child(1) a
filters:
# now we put the date at the right place according scene naming rules using .Result.site_date
- name: replace
args: ["FRENCH", "{{ .Result.site_date }} FRENCH"]
- name: replace
args: ["TRUEFRENCH", "{{ .Result.site_date }} TRUEFRENCH"]
- name: replace
args: ["VOSTFR", "{{ .Result.site_date }} VOSTFR"]
# and we delete it at the end
- name: re_replace
args: ["(\\w+)$", ""]
details:
selector: td:nth-child(1) a
attribute: href
download:
selector: td:nth-child(1) a
attribute: href
size:
selector: td:nth-child(2)
seeders:
selector: td:nth-child(3)
leechers:
selector: td:nth-child(4)
downloadvolumefactor:
text: "0"
uploadvolumefactor:
text: "1"
category:
selector: td:nth-child(1) > i
case:
.Movies: "movies"
.TV: "tvshows"
.Softwares: "softwares"
.Music: "music"
.Games: "games"
.Books: "books"

View File

@@ -1,162 +1,162 @@
---
site: gods
name: GODS
language: de-de
type: private
encoding: windows-1252
links:
- https://gods.lu/
caps:
categorymappings:
# Movie
- {id: 132, cat: Movies/BluRay, desc: "BluRay"}
- {id: 146, cat: Movies/HD, desc: "Remux"}
- {id: 186, cat: Movies/HD, desc: "UHD"}
- {id: 189, cat: Movies/HD, desc: "HD"}
- {id: 190, cat: Movies/SD, desc: "SD"}
- {id: 20, cat: Movies/DVD, desc: "DVD"}
- {id: 131, cat: Movies/3D, desc: "3D"}
- {id: 16, cat: Movies, desc: "Packs"}
# Serien
- {id: 187, cat: TV/HD, 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: 174, cat: TV/HD, desc: "Folgen HD"}
- {id: 7, cat: TV/SD, desc: "Folgen SD"}
# Doku
- {id: 152, cat: TV/Documentary, desc: "HD"}
- {id: 153, cat: TV/Documentary, desc: "SD"}
# Spiele
- {id: 4, cat: PC/Games, desc: "Windows"}
- {id: 29, cat: Console/XBox360, desc: "XBOX 360"}
- {id: 126, cat: Console/Wii, desc: "Wii"}
- {id: 183, cat: Console/Wii, desc: "Wii U"}
- {id: 128, cat: Console/PS3, desc: "PS3"}
- {id: 154, cat: Console/Other, desc: "Andere"}
# Musik
- {id: 6, cat: Audio, desc: "Alben"}
- {id: 139, cat: Audio/Lossless, desc: "Lossless"}
- {id: 177, cat: Audio, desc: "Singles"}
- {id: 157, cat: Audio, desc: "Charts"}
- {id: 192, cat: Audio, desc: "Packs"}
- {id: 161, cat: Audio/Video, desc: "Video"}
- {id: 22, cat: PC/0day, desc: "Windows"}
- {id: 129, cat: PC/Mac, desc: "Mac OS"}
- {id: 164, cat: PC/0day, desc: "Linux"}
- {id: 124, cat: PC/Phone-Android, desc: "Android"}
- {id: 165, cat: PC/Phone-IOS, desc: "Apple iOS"}
- {id: 167, cat: PC/Phone-Other, desc: "Andere"}
# Sport
- {id: 130, cat: TV/Sport, desc: "HD"}
- {id: 135, cat: TV/Sport, desc: "SD"}
# International
- {id: 170, cat: Movies/Foreign, desc: "Filme HD"}
- {id: 134, cat: Movies/Foreign, desc: "Filme SD"}
- {id: 171, cat: TV/Foreign, desc: "Folgen HD"}
- {id: 172, cat: TV/Foreign, desc: "Folgen SD"}
# Sonstiges
- {id: 28, cat: TV/Anime, desc: "Anime"}
- {id: 13, cat: Books, desc: "e-Book"}
- {id: 11, cat: Audio/Audiobook, desc: "Hören"}
- {id: 136, cat: Other, desc: "Bilder"}
- {id: 9, cat: Other, desc: "Tutorial"}
- {id: 178, cat: Other, desc: "Anderes"}
modes:
search: [q]
tv-search: [q, season, ep]
settings:
- name: pin
type: text
label: Pin
- name: username
type: text
label: Username
- name: password
type: password
label: Password
login:
path: /login/
method: form
form: form
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
pin: "{{ .Config.pin }}"
test:
path: browse.php
search:
path: browse.php
inputs:
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
search: "{{ .Query.Keywords }}"
intitle: "1"
incldead: "1"
team: "0"
orderby: "added"
sort: desc
rows:
selector: table.tableinborder > tbody > tr:has(a[href^="details.php"])
fields:
title:
selector: a[href^="details.php"]
banner:
selector: a[href^="details.php"] > span > img
attribute: src
category:
selector: a[href^="browse.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
details:
selector: a[href^="details.php"]
attribute: href
comments:
selector: a[href*="&tocomm="]
attribute: href
download:
selector: a[href^="download.php"]
attribute: href
files:
selector: td:nth-child(2) > table > tbody > tr:nth-child(2) > td:nth-child(1) > b:nth-child(2)
grabs:
selector: td:nth-child(2) > table > tbody > tr:nth-child(2) > td:nth-child(3) > b:nth-child(1)
size:
selector: td:nth-child(2) > table > tbody > tr:nth-child(2) > td:nth-child(1) > b:nth-child(1)
filters:
- name: replace
args: [".", ""]
- name: replace
args: [",", "."]
seeders:
selector: td:nth-child(2) > table > tbody > tr:nth-child(2) > td:nth-child(3) > b:nth-child(1)
leechers:
selector: td:nth-child(2) > table > tbody > tr:nth-child(2) > td:nth-child(3) > b:nth-child(3)
date:
selector: td:nth-child(2) > table > tbody > tr:nth-child(2) > td:nth-child(6)
filters:
- name: replace
args: ["\xA0", " "]
- name: dateparse
args: "02.01.2006 15:04:05"
downloadvolumefactor:
case:
img[alt="onlyupload"]: "0"
"*": "1"
uploadvolumefactor:
case:
---
site: gods
name: GODS
language: de-de
type: private
encoding: windows-1252
links:
- https://gods.lu/
caps:
categorymappings:
# Movie
- {id: 132, cat: Movies/BluRay, desc: "BluRay"}
- {id: 146, cat: Movies/HD, desc: "Remux"}
- {id: 186, cat: Movies/HD, desc: "UHD"}
- {id: 189, cat: Movies/HD, desc: "HD"}
- {id: 190, cat: Movies/SD, desc: "SD"}
- {id: 20, cat: Movies/DVD, desc: "DVD"}
- {id: 131, cat: Movies/3D, desc: "3D"}
- {id: 16, cat: Movies, desc: "Packs"}
# Serien
- {id: 187, cat: TV/HD, 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: 174, cat: TV/HD, desc: "Folgen HD"}
- {id: 7, cat: TV/SD, desc: "Folgen SD"}
# Doku
- {id: 152, cat: TV/Documentary, desc: "HD"}
- {id: 153, cat: TV/Documentary, desc: "SD"}
# Spiele
- {id: 4, cat: PC/Games, desc: "Windows"}
- {id: 29, cat: Console/XBox360, desc: "XBOX 360"}
- {id: 126, cat: Console/Wii, desc: "Wii"}
- {id: 183, cat: Console/Wii, desc: "Wii U"}
- {id: 128, cat: Console/PS3, desc: "PS3"}
- {id: 154, cat: Console/Other, desc: "Andere"}
# Musik
- {id: 6, cat: Audio, desc: "Alben"}
- {id: 139, cat: Audio/Lossless, desc: "Lossless"}
- {id: 177, cat: Audio, desc: "Singles"}
- {id: 157, cat: Audio, desc: "Charts"}
- {id: 192, cat: Audio, desc: "Packs"}
- {id: 161, cat: Audio/Video, desc: "Video"}
- {id: 22, cat: PC/0day, desc: "Windows"}
- {id: 129, cat: PC/Mac, desc: "Mac OS"}
- {id: 164, cat: PC/0day, desc: "Linux"}
- {id: 124, cat: PC/Phone-Android, desc: "Android"}
- {id: 165, cat: PC/Phone-IOS, desc: "Apple iOS"}
- {id: 167, cat: PC/Phone-Other, desc: "Andere"}
# Sport
- {id: 130, cat: TV/Sport, desc: "HD"}
- {id: 135, cat: TV/Sport, desc: "SD"}
# International
- {id: 170, cat: Movies/Foreign, desc: "Filme HD"}
- {id: 134, cat: Movies/Foreign, desc: "Filme SD"}
- {id: 171, cat: TV/Foreign, desc: "Folgen HD"}
- {id: 172, cat: TV/Foreign, desc: "Folgen SD"}
# Sonstiges
- {id: 28, cat: TV/Anime, desc: "Anime"}
- {id: 13, cat: Books, desc: "e-Book"}
- {id: 11, cat: Audio/Audiobook, desc: "Hören"}
- {id: 136, cat: Other, desc: "Bilder"}
- {id: 9, cat: Other, desc: "Tutorial"}
- {id: 178, cat: Other, desc: "Anderes"}
modes:
search: [q]
tv-search: [q, season, ep]
settings:
- name: pin
type: text
label: Pin
- name: username
type: text
label: Username
- name: password
type: password
label: Password
login:
path: /login/
method: form
form: form
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
pin: "{{ .Config.pin }}"
test:
path: browse.php
search:
path: browse.php
inputs:
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
search: "{{ .Query.Keywords }}"
intitle: "1"
incldead: "1"
team: "0"
orderby: "added"
sort: desc
rows:
selector: table.tableinborder > tbody > tr:has(a[href^="details.php"])
fields:
title:
selector: a[href^="details.php"]
banner:
selector: a[href^="details.php"] > span > img
attribute: src
category:
selector: a[href^="browse.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
details:
selector: a[href^="details.php"]
attribute: href
comments:
selector: a[href*="&tocomm="]
attribute: href
download:
selector: a[href^="download.php"]
attribute: href
files:
selector: td:nth-child(2) > table > tbody > tr:nth-child(2) > td:nth-child(1) > b:nth-child(2)
grabs:
selector: td:nth-child(2) > table > tbody > tr:nth-child(2) > td:nth-child(3) > b:nth-child(1)
size:
selector: td:nth-child(2) > table > tbody > tr:nth-child(2) > td:nth-child(1) > b:nth-child(1)
filters:
- name: replace
args: [".", ""]
- name: replace
args: [",", "."]
seeders:
selector: td:nth-child(2) > table > tbody > tr:nth-child(2) > td:nth-child(3) > b:nth-child(1)
leechers:
selector: td:nth-child(2) > table > tbody > tr:nth-child(2) > td:nth-child(3) > b:nth-child(3)
date:
selector: td:nth-child(2) > table > tbody > tr:nth-child(2) > td:nth-child(6)
filters:
- name: replace
args: ["\xA0", " "]
- name: dateparse
args: "02.01.2006 15:04:05"
downloadvolumefactor:
case:
img[alt="onlyupload"]: "0"
"*": "1"
uploadvolumefactor:
case:
"*": "1"

View File

@@ -1,193 +1,193 @@
---
site: gormogon
name: Gormogon
language: en-us
type: private
encoding: UTF-8
links:
- http://www.gormogon.com
caps:
categorymappings:
# Movies:
- {id: 1, cat: Movies/DVD, desc: "DVD-R"}
- {id: 2, cat: Movies, desc: "Action"}
- {id: 14, cat: Movies, desc: "Adventure"}
- {id: 15, cat: Movies, desc: "Animation"}
- {id: 16, cat: Movies, desc: "Biography"}
- {id: 17, cat: Movies, desc: "Comedy"}
- {id: 18, cat: Movies, desc: "Crime"}
- {id: 19, cat: Movies, desc: "Disney"}
- {id: 92, cat: Movies, desc: "Documentary"}
- {id: 20, cat: Movies, desc: "Drama"}
- {id: 21, cat: Movies, desc: "Family"}
- {id: 22, cat: Movies, desc: "Fantasy"}
- {id: 23, cat: Movies, desc: "Film Noir"}
- {id: 97, cat: Movies, desc: "History"}
- {id: 24, cat: Movies, desc: "Horror"}
- {id: 25, cat: Movies, desc: "Martial Arts"}
- {id: 26, cat: Movies, desc: "Musicals"}
- {id: 27, cat: Movies, desc: "Mystery"}
- {id: 28, cat: Movies, desc: "Romance"}
- {id: 29, cat: Movies, desc: "Sci-Fi"}
- {id: 30, cat: Movies, desc: "Thriller"}
- {id: 31, cat: Movies, desc: "War"}
- {id: 32, cat: Movies, desc: "Western"}
- {id: 33, cat: Movies, desc: "Other"}
# Classic TV:
- {id: 34, cat: TV, desc: "Action"}
- {id: 35, cat: TV, desc: "Adventure"}
- {id: 36, cat: TV, desc: "Animation"}
- {id: 37, cat: TV, desc: "Biography"}
- {id: 38, cat: TV, desc: "Comedy"}
- {id: 39, cat: TV, desc: "Crime"}
- {id: 40, cat: TV, desc: "Disney"}
- {id: 41, cat: TV, desc: "Documentary"}
- {id: 42, cat: TV, desc: "Drama"}
- {id: 43, cat: TV, desc: "Family"}
- {id: 44, cat: TV, desc: "Fantasy"}
- {id: 45, cat: TV, desc: "TV Noir"}
- {id: 46, cat: TV, desc: "Horror"}
- {id: 47, cat: TV, desc: "Martial Arts"}
- {id: 49, cat: TV, desc: "Musicals"}
- {id: 50, cat: TV, desc: "Mystery"}
- {id: 51, cat: TV, desc: "Romance"}
- {id: 52, cat: TV, desc: "Sci-Fi"}
- {id: 48, cat: TV, desc: "Shows"}
- {id: 53, cat: TV, desc: "Thriller"}
- {id: 54, cat: TV, desc: "War"}
- {id: 55, cat: TV, desc: "Western"}
- {id: 56, cat: TV, desc: "Other"}
- {id: 90, cat: TV, desc: "TV Movies"}
# Old Time Radio
- {id: 57, cat: Audio, desc: "Action"}
- {id: 58, cat: Audio, desc: "Adventure"}
- {id: 59, cat: Audio, desc: "Biography"}
- {id: 60, cat: Audio, desc: "Comedy"}
- {id: 61, cat: Audio, desc: "Crime"}
- {id: 62, cat: Audio, desc: "Documentary"}
- {id: 63, cat: Audio, desc: "Drama"}
- {id: 64, cat: Audio, desc: "Family"}
- {id: 65, cat: Audio, desc: "Fantasy"}
- {id: 66, cat: Audio, desc: "Radio Noir"}
- {id: 67, cat: Audio, desc: "Horror"}
- {id: 68, cat: Audio, desc: "Musicals"}
- {id: 69, cat: Audio, desc: "Mystery"}
- {id: 70, cat: Audio, desc: "Romance"}
- {id: 71, cat: Audio, desc: "Sci-Fi"}
- {id: 72, cat: Audio, desc: "Shows"}
- {id: 73, cat: Audio, desc: "Thriller"}
- {id: 74, cat: Audio, desc: "War"}
- {id: 75, cat: Audio, desc: "Western"}
- {id: 76, cat: Audio, desc: "Other"}
# Music:
- {id: 77, cat: Audio, desc: "Official Sountracks"}
- {id: 78, cat: Audio, desc: "Theme Tunes"}
- {id: 79, cat: Audio, desc: "Music 30s"}
- {id: 80, cat: Audio, desc: "Music 40s"}
- {id: 81, cat: Audio, desc: "Music 50s"}
- {id: 85, cat: Audio, desc: "Music 60s"}
- {id: 86, cat: Audio, desc: "Music 70s"}
- {id: 87, cat: Audio, desc: "Music '80 - '84"}
# Printed:
- {id: 82, cat: Books, desc: "Books"}
- {id: 91, cat: Books, desc: "Newspaper"}
- {id: 83, cat: Books, desc: "Scripts"}
- {id: 84, cat: Books, desc: "Posters"}
- {id: 88, cat: Books, desc: "Comics"}
- {id: 89, cat: Books, desc: "Magazines"}
# Software:
- {id: 94, cat: Other, desc: "Screensavers"}
- {id: 95, cat: PC, desc: "Programs"}
- {id: 96, cat: Other, desc: "Other"}
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: index.php?page=login&returnto=index.php
method: post
inputs:
uid: "{{ .Config.username }}"
pwd: "{{ .Config.password }}"
error:
- selector: td.lista > span[style="color:#FF0000;"]
test:
path: index.php
selector: form[name="jump1"]
ratio:
path: index.php
selector: form[name="jump1"] > table > tbody > tr > td:contains("SR ")
filters:
- name: trim
args: ")"
- name: split
args: [" ", 1]
download:
selector: a[href^="download.php?id="]
search:
path: index.php
inputs:
search: "{{ .Query.Keywords }}"
category: "{{range .Categories}}{{.}};{{end}}"
page: torrents
active: 0
rows:
selector: table.lista > tbody > tr:has(a[href^="index.php?page=torrents&category="])
fields:
download:
selector: a[href^="index.php?page=downloadcheck&id="]
attribute: href
title:
selector: a[onmouseover][href^="index.php?page=torrent-details&id="]
category:
selector: a[href^="index.php?page=torrents&category="]
attribute: href
filters:
- name: querystring
args: category
details:
selector: a[onmouseover][href^="index.php?page=torrent-details&id="]
attribute: href
size:
selector: td:nth-child(10)
date:
selector: td:nth-child(5)
filters:
- name: dateparse
args: "02/01/2006"
grabs:
selector: td:nth-child(8)
filters:
- name: replace
args: ["---", "0"]
seeders:
selector: td:nth-child(6)
leechers:
selector: td:nth-child(7)
downloadvolumefactor:
case:
img[alt="gold"]: "0"
img[alt="silver"]: "0.5"
"*": "1"
uploadvolumefactor:
case:
img[alt="2x Upload Multiplier"]: "2"
img[alt="3x Upload Multiplier"]: "3"
img[alt="4x Upload Multiplier"]: "4"
img[alt="5x Upload Multiplier"]: "5"
img[alt="6x Upload Multiplier"]: "6"
img[alt="7x Upload Multiplier"]: "7"
img[alt="8x Upload Multiplier"]: "8"
img[alt="9x Upload Multiplier"]: "9"
img[alt="10x Upload Multiplier"]: "10"
---
site: gormogon
name: Gormogon
language: en-us
type: private
encoding: UTF-8
links:
- http://www.gormogon.com
caps:
categorymappings:
# Movies:
- {id: 1, cat: Movies/DVD, desc: "DVD-R"}
- {id: 2, cat: Movies, desc: "Action"}
- {id: 14, cat: Movies, desc: "Adventure"}
- {id: 15, cat: Movies, desc: "Animation"}
- {id: 16, cat: Movies, desc: "Biography"}
- {id: 17, cat: Movies, desc: "Comedy"}
- {id: 18, cat: Movies, desc: "Crime"}
- {id: 19, cat: Movies, desc: "Disney"}
- {id: 92, cat: Movies, desc: "Documentary"}
- {id: 20, cat: Movies, desc: "Drama"}
- {id: 21, cat: Movies, desc: "Family"}
- {id: 22, cat: Movies, desc: "Fantasy"}
- {id: 23, cat: Movies, desc: "Film Noir"}
- {id: 97, cat: Movies, desc: "History"}
- {id: 24, cat: Movies, desc: "Horror"}
- {id: 25, cat: Movies, desc: "Martial Arts"}
- {id: 26, cat: Movies, desc: "Musicals"}
- {id: 27, cat: Movies, desc: "Mystery"}
- {id: 28, cat: Movies, desc: "Romance"}
- {id: 29, cat: Movies, desc: "Sci-Fi"}
- {id: 30, cat: Movies, desc: "Thriller"}
- {id: 31, cat: Movies, desc: "War"}
- {id: 32, cat: Movies, desc: "Western"}
- {id: 33, cat: Movies, desc: "Other"}
# Classic TV:
- {id: 34, cat: TV, desc: "Action"}
- {id: 35, cat: TV, desc: "Adventure"}
- {id: 36, cat: TV, desc: "Animation"}
- {id: 37, cat: TV, desc: "Biography"}
- {id: 38, cat: TV, desc: "Comedy"}
- {id: 39, cat: TV, desc: "Crime"}
- {id: 40, cat: TV, desc: "Disney"}
- {id: 41, cat: TV, desc: "Documentary"}
- {id: 42, cat: TV, desc: "Drama"}
- {id: 43, cat: TV, desc: "Family"}
- {id: 44, cat: TV, desc: "Fantasy"}
- {id: 45, cat: TV, desc: "TV Noir"}
- {id: 46, cat: TV, desc: "Horror"}
- {id: 47, cat: TV, desc: "Martial Arts"}
- {id: 49, cat: TV, desc: "Musicals"}
- {id: 50, cat: TV, desc: "Mystery"}
- {id: 51, cat: TV, desc: "Romance"}
- {id: 52, cat: TV, desc: "Sci-Fi"}
- {id: 48, cat: TV, desc: "Shows"}
- {id: 53, cat: TV, desc: "Thriller"}
- {id: 54, cat: TV, desc: "War"}
- {id: 55, cat: TV, desc: "Western"}
- {id: 56, cat: TV, desc: "Other"}
- {id: 90, cat: TV, desc: "TV Movies"}
# Old Time Radio
- {id: 57, cat: Audio, desc: "Action"}
- {id: 58, cat: Audio, desc: "Adventure"}
- {id: 59, cat: Audio, desc: "Biography"}
- {id: 60, cat: Audio, desc: "Comedy"}
- {id: 61, cat: Audio, desc: "Crime"}
- {id: 62, cat: Audio, desc: "Documentary"}
- {id: 63, cat: Audio, desc: "Drama"}
- {id: 64, cat: Audio, desc: "Family"}
- {id: 65, cat: Audio, desc: "Fantasy"}
- {id: 66, cat: Audio, desc: "Radio Noir"}
- {id: 67, cat: Audio, desc: "Horror"}
- {id: 68, cat: Audio, desc: "Musicals"}
- {id: 69, cat: Audio, desc: "Mystery"}
- {id: 70, cat: Audio, desc: "Romance"}
- {id: 71, cat: Audio, desc: "Sci-Fi"}
- {id: 72, cat: Audio, desc: "Shows"}
- {id: 73, cat: Audio, desc: "Thriller"}
- {id: 74, cat: Audio, desc: "War"}
- {id: 75, cat: Audio, desc: "Western"}
- {id: 76, cat: Audio, desc: "Other"}
# Music:
- {id: 77, cat: Audio, desc: "Official Sountracks"}
- {id: 78, cat: Audio, desc: "Theme Tunes"}
- {id: 79, cat: Audio, desc: "Music 30s"}
- {id: 80, cat: Audio, desc: "Music 40s"}
- {id: 81, cat: Audio, desc: "Music 50s"}
- {id: 85, cat: Audio, desc: "Music 60s"}
- {id: 86, cat: Audio, desc: "Music 70s"}
- {id: 87, cat: Audio, desc: "Music '80 - '84"}
# Printed:
- {id: 82, cat: Books, desc: "Books"}
- {id: 91, cat: Books, desc: "Newspaper"}
- {id: 83, cat: Books, desc: "Scripts"}
- {id: 84, cat: Books, desc: "Posters"}
- {id: 88, cat: Books, desc: "Comics"}
- {id: 89, cat: Books, desc: "Magazines"}
# Software:
- {id: 94, cat: Other, desc: "Screensavers"}
- {id: 95, cat: PC, desc: "Programs"}
- {id: 96, cat: Other, desc: "Other"}
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: index.php?page=login&returnto=index.php
method: post
inputs:
uid: "{{ .Config.username }}"
pwd: "{{ .Config.password }}"
error:
- selector: td.lista > span[style="color:#FF0000;"]
test:
path: index.php
selector: form[name="jump1"]
ratio:
path: index.php
selector: form[name="jump1"] > table > tbody > tr > td:contains("SR ")
filters:
- name: trim
args: ")"
- name: split
args: [" ", 1]
download:
selector: a[href^="download.php?id="]
search:
path: index.php
inputs:
search: "{{ .Query.Keywords }}"
category: "{{range .Categories}}{{.}};{{end}}"
page: torrents
active: 0
rows:
selector: table.lista > tbody > tr:has(a[href^="index.php?page=torrents&category="])
fields:
download:
selector: a[href^="index.php?page=downloadcheck&id="]
attribute: href
title:
selector: a[onmouseover][href^="index.php?page=torrent-details&id="]
category:
selector: a[href^="index.php?page=torrents&category="]
attribute: href
filters:
- name: querystring
args: category
details:
selector: a[onmouseover][href^="index.php?page=torrent-details&id="]
attribute: href
size:
selector: td:nth-child(10)
date:
selector: td:nth-child(5)
filters:
- name: dateparse
args: "02/01/2006"
grabs:
selector: td:nth-child(8)
filters:
- name: replace
args: ["---", "0"]
seeders:
selector: td:nth-child(6)
leechers:
selector: td:nth-child(7)
downloadvolumefactor:
case:
img[alt="gold"]: "0"
img[alt="silver"]: "0.5"
"*": "1"
uploadvolumefactor:
case:
img[alt="2x Upload Multiplier"]: "2"
img[alt="3x Upload Multiplier"]: "3"
img[alt="4x Upload Multiplier"]: "4"
img[alt="5x Upload Multiplier"]: "5"
img[alt="6x Upload Multiplier"]: "6"
img[alt="7x Upload Multiplier"]: "7"
img[alt="8x Upload Multiplier"]: "8"
img[alt="9x Upload Multiplier"]: "9"
img[alt="10x Upload Multiplier"]: "10"
"*": "1"

View File

@@ -119,9 +119,9 @@
download:
text: "download2.php?torrent={{ .Result._id }}"
size:
selector: td:nth-last-child(3)
selector: td:nth-last-child(4)
date:
selector: td:nth-last-child(5)
selector: td:nth-last-child(6) > nobr
filters:
- name: append
args: " +02:00"
@@ -130,9 +130,9 @@
files:
selector: td:nth-last-child(7)
seeders:
selector: td:nth-last-child(2)
selector: td:nth-last-child(3)
leechers:
selector: td:nth-last-child(1)
selector: td:nth-last-child(2)
downloadvolumefactor:
case:
"img[src=\"pic/free.png\"]": "0"

View File

@@ -1,83 +1,83 @@
---
site: hdbits
name: HDBits
description: "Best HD Tracker"
language: en-us
type: private
encoding: UTF-8
links:
- https://hdbits.org
caps:
categorymappings:
- {id: 1, cat: "Movies", desc: "Movie"}
- {id: 2, cat: "TV", desc: "TV"}
- {id: 3, cat: "TV/Documentary", desc: "Documentary"}
- {id: 4, cat: "Audio", desc: "Music"}
- {id: 5, cat: "TV/Sport", desc: "Sport"}
- {id: 6, cat: "Audio", desc: "Audio Track"}
- {id: 7, cat: "XXX", desc: "XXX"}
- {id: 8, cat: "Other", desc: "Misc/Demo"}
modes:
search: [q]
login:
path: /login
method: form
form: form
inputs:
uname: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: table.main:contains("Login Failed!")
test:
path: my.php
download:
selector: a[href^="/download.php"]
search:
path: browse.php
inputs:
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
search: "{{ .Query.Keywords }}"
rows:
selector: table#torrent-list > tbody > tr:has(a[href^="/details.php?id="])
fields:
category:
selector: a[href^="?cat="]
attribute: href
filters:
- name: querystring
args: cat
title:
selector: td:nth-child(3) a
download:
selector: a[href^="/download.php"]
attribute: href
details:
selector: a[href^="/details.php?id="]
attribute: href
grabs:
selector: td:nth-child(7) a
size:
selector: td:nth-child(6)
seeders:
selector: td:nth-child(8)
leechers:
selector: td:nth-child(9)
date:
selector: td:nth-child(5)
filters:
- name: append
args: " ago"
downloadvolumefactor:
case:
"a[title=\"25% Free Leech: only 75% of the download is counted.\"]": "0.25"
"a[title=\"50% Free Leech: only half the download is counted.\"]": "0.5"
"a[title=\"100% FL: no download is counted.\"]": "0"
"*": "1"
uploadvolumefactor:
case:
---
site: hdbits
name: HDBits
description: "Best HD Tracker"
language: en-us
type: private
encoding: UTF-8
links:
- https://hdbits.org
caps:
categorymappings:
- {id: 1, cat: "Movies", desc: "Movie"}
- {id: 2, cat: "TV", desc: "TV"}
- {id: 3, cat: "TV/Documentary", desc: "Documentary"}
- {id: 4, cat: "Audio", desc: "Music"}
- {id: 5, cat: "TV/Sport", desc: "Sport"}
- {id: 6, cat: "Audio", desc: "Audio Track"}
- {id: 7, cat: "XXX", desc: "XXX"}
- {id: 8, cat: "Other", desc: "Misc/Demo"}
modes:
search: [q]
login:
path: /login
method: form
form: form
inputs:
uname: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: table.main:contains("Login Failed!")
test:
path: my.php
download:
selector: a[href^="/download.php"]
search:
path: browse.php
inputs:
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
search: "{{ .Query.Keywords }}"
rows:
selector: table#torrent-list > tbody > tr:has(a[href^="/details.php?id="])
fields:
category:
selector: a[href^="?cat="]
attribute: href
filters:
- name: querystring
args: cat
title:
selector: td:nth-child(3) a
download:
selector: a[href^="/download.php"]
attribute: href
details:
selector: a[href^="/details.php?id="]
attribute: href
grabs:
selector: td:nth-child(7) a
size:
selector: td:nth-child(6)
seeders:
selector: td:nth-child(8)
leechers:
selector: td:nth-child(9)
date:
selector: td:nth-child(5)
filters:
- name: append
args: " ago"
downloadvolumefactor:
case:
"a[title=\"25% Free Leech: only 75% of the download is counted.\"]": "0.25"
"a[title=\"50% Free Leech: only half the download is counted.\"]": "0.5"
"a[title=\"100% FL: no download is counted.\"]": "0"
"*": "1"
uploadvolumefactor:
case:
"*": "1"

View File

@@ -1,97 +1,97 @@
---
site: hdbitscom
name: HD-Bits.com
description: "HD tracker"
language: en-us
encoding: UTF-8
type: private
links:
- https://www.hd-bits.com
caps:
categorymappings:
- {id: 1, cat: Audio, desc: "Music"}
- {id: 2, cat: Movies, desc: "Movies"}
- {id: 3, cat: TV, desc: "TV-Series"}
- {id: 4, cat: PC, desc: "Applications"}
- {id: 5, cat: XXX, desc: "Adult"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
login:
path: login.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
keeplogged: 1
login: "Log in"
error:
- selector: form#loginform > span.warning
test:
path: torrents.php
ratio:
path: torrents.php
selector: li#stats_ratio > span
search:
path: torrents.php
inputs:
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
searchstr: "{{ .Query.Keywords }}"
order_by: time
order_way: desc
action: basic
searchsubmit: 1
rows:
selector: table#torrent_table > tbody > tr.torrent
fields:
download:
selector: a[href^="torrents.php?action=download&id="]
attribute: href
description:
selector: div.group_info div.tags
title:
selector: div.group_info a[href^="torrents.php?id="]
category:
selector: td.cats_col
case:
div.cats_music: 1
div.cats_movies: 2
div.cats_tvseries: 3
div.cats_applications: 4
div.cats_xxx: 5
comments:
selector: a[href^="torrents.php?id="]
attribute: href
imdb:
selector: a[href*="http://www.imdb.com/title/"]
optional: true
attribute: href
banner:
selector: img[alt="Cover"]
optional: true
attribute: src
files:
selector: td:nth-child(3)
date:
selector: td:nth-child(4)
size:
selector: td:nth-child(5)
grabs:
selector: td:nth-child(6)
seeders:
selector: td:nth-child(7)
leechers:
selector: td:nth-child(8)
downloadvolumefactor:
case:
"div.freeleech:contains('Freeleech!')": "0"
"*": "1"
uploadvolumefactor:
case:
"*": "1"
---
site: hdbitscom
name: HD-Bits.com
description: "HD tracker"
language: en-us
encoding: UTF-8
type: private
links:
- https://www.hd-bits.com
caps:
categorymappings:
- {id: 1, cat: Audio, desc: "Music"}
- {id: 2, cat: Movies, desc: "Movies"}
- {id: 3, cat: TV, desc: "TV-Series"}
- {id: 4, cat: PC, desc: "Applications"}
- {id: 5, cat: XXX, desc: "Adult"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
login:
path: login.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
keeplogged: 1
login: "Log in"
error:
- selector: form#loginform > span.warning
test:
path: torrents.php
ratio:
path: torrents.php
selector: li#stats_ratio > span
search:
path: torrents.php
inputs:
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
searchstr: "{{ .Query.Keywords }}"
order_by: time
order_way: desc
action: basic
searchsubmit: 1
rows:
selector: table#torrent_table > tbody > tr.torrent
fields:
download:
selector: a[href^="torrents.php?action=download&id="]
attribute: href
description:
selector: div.group_info div.tags
title:
selector: div.group_info a[href^="torrents.php?id="]
category:
selector: td.cats_col
case:
div.cats_music: 1
div.cats_movies: 2
div.cats_tvseries: 3
div.cats_applications: 4
div.cats_xxx: 5
comments:
selector: a[href^="torrents.php?id="]
attribute: href
imdb:
selector: a[href*="http://www.imdb.com/title/"]
optional: true
attribute: href
banner:
selector: img[alt="Cover"]
optional: true
attribute: src
files:
selector: td:nth-child(3)
date:
selector: td:nth-child(4)
size:
selector: td:nth-child(5)
grabs:
selector: td:nth-child(6)
seeders:
selector: td:nth-child(7)
leechers:
selector: td:nth-child(8)
downloadvolumefactor:
case:
"div.freeleech:contains('Freeleech!')": "0"
"*": "1"
uploadvolumefactor:
case:
"*": "1"

View File

@@ -1,111 +1,121 @@
---
site: hdchina
name: HDChina
description: "A chinese tracker"
language: zh-cn
type: private
encoding: UTF-8
links:
- https://hdchina.club/
caps:
categorymappings:
- {id: 20, cat: Movies/BluRay, desc: "Movie Full BD"}
- {id: 17, cat: Movies/HD, desc: "Movie 1080p"}
- {id: 16, cat: Movies/HD, desc: "Movie 1080i"}
- {id: 9, cat: Movies/HD, desc: "Movie 720p"}
- {id: 13, cat: TV, desc: "EU/US TV series"}
- {id: 25, cat: TV, desc: "Chinese TV series"}
- {id: 26, cat: TV, desc: "Kor Drama"}
- {id: 24, cat: TV, desc: "Jpn Drama"}
- {id: 21, cat: TV, desc: "EU/US TV series pack"}
- {id: 22, cat: TV, desc: "Chinese TV series pack"}
- {id: 23, cat: TV, desc: "JPN/KOR drama pack"}
- {id: 27, cat: Movies/SD, desc: "iPad Video"}
- {id: 5, cat: TV/Documentary, desc: "Documentary"}
- {id: 15, cat: TV/Sport, desc: "Sports"}
- {id: 14, cat: TV/Anime, desc: "Animation"}
- {id: 401, cat: TV, desc: "TV Shows"}
- {id: 402, cat: Audio, desc: "Vocal Concert"}
- {id: 406, cat: Audio, desc: "Music Video"}
- {id: 408, cat: Audio, desc: "Music"}
- {id: 19, cat: Audio, desc: "Audio Track"}
- {id: 405, cat: Audio, desc: "Drama"}
- {id: 404, cat: Books, desc: "Book"}
- {id: 409, cat: Other, desc: "Other"}
- {id: 410, cat: Movies/HD, desc: "4K UltraHD"}
- {id: 411, cat: TV, desc: "Travel"}
- {id: 412, cat: TV, desc: "Food"}
modes:
search: [q]
login:
path: login.php
method: form
form: form[action="takelogin.php"]
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
captcha:
type: image
image: img[alt="CAPTCHA"]
input: imagestring
error:
- selector: td.embedded:has(h2:contains("failed"))
test:
path: /torrents.php
search:
path: /torrents.php
method: post
inputs:
$raw: "{{range .Categories}}cat{{.}}=1&{{end}}"
search: "{{if .Query.IMDBID}}{{ .Query.IMDBID }}{{else}}{{ .Keywords }}{{end}}"
incldead: "0"
spstate: "0"
inclbookmarked: "0"
search_area: "{{ if .Query.IMDBID }}4{{else}}0{{end}}"
search_mode: "0"
rows:
selector: table.torrent_list > tbody > tr:has(a[href^="?cat="])
fields:
title:
selector: td:nth-child(2) a
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"]
size:
selector: td.t_size
grabs:
selector: td.t_completed
seeders:
selector: td.t_torrents
leechers:
selector: td.t_leech
date:
selector: td.t_time
filters:
- name: append
args: " ago"
downloadvolumefactor:
case:
img.pro_50pctdown: ".5"
img.pro_30pctdown: ".3"
img.pro_free: "0"
"*": "1"
uploadvolumefactor:
case:
---
site: hdchina
name: HDChina
description: "A chinese tracker"
language: zh-cn
type: private
encoding: UTF-8
links:
- https://hdchina.club/
caps:
categorymappings:
- {id: 20, cat: Movies/BluRay, desc: "Movie Full BD"}
- {id: 17, cat: Movies/HD, desc: "Movie 1080p"}
- {id: 16, cat: Movies/HD, desc: "Movie 1080i"}
- {id: 9, cat: Movies/HD, desc: "Movie 720p"}
- {id: 13, cat: TV, desc: "EU/US TV series"}
- {id: 25, cat: TV, desc: "Chinese TV series"}
- {id: 26, cat: TV, desc: "Kor Drama"}
- {id: 24, cat: TV, desc: "Jpn Drama"}
- {id: 21, cat: TV, desc: "EU/US TV series pack"}
- {id: 22, cat: TV, desc: "Chinese TV series pack"}
- {id: 23, cat: TV, desc: "JPN/KOR drama pack"}
- {id: 27, cat: Movies/SD, desc: "iPad Video"}
- {id: 5, cat: TV/Documentary, desc: "Documentary"}
- {id: 15, cat: TV/Sport, desc: "Sports"}
- {id: 14, cat: TV/Anime, desc: "Animation"}
- {id: 401, cat: TV, desc: "TV Shows"}
- {id: 402, cat: Audio, desc: "Vocal Concert"}
- {id: 406, cat: Audio, desc: "Music Video"}
- {id: 408, cat: Audio, desc: "Music"}
- {id: 19, cat: Audio, desc: "Audio Track"}
- {id: 405, cat: Audio, desc: "Drama"}
- {id: 404, cat: Books, desc: "Book"}
- {id: 409, cat: Other, desc: "Other"}
- {id: 410, cat: Movies/HD, desc: "4K UltraHD"}
- {id: 411, cat: TV, desc: "Travel"}
- {id: 412, cat: TV, desc: "Food"}
modes:
search: [q]
login:
path: login.php
method: form
form: form[action="takelogin.php"]
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
captcha:
type: image
image: img[alt="CAPTCHA"]
input: imagestring
error:
- selector: td.embedded:has(h2:contains("failed"))
test:
path: /torrents.php
search:
path: /torrents.php
method: post
inputs:
$raw: "{{range .Categories}}cat{{.}}=1&{{end}}"
search: "{{if .Query.IMDBID}}{{ .Query.IMDBID }}{{else}}{{ .Keywords }}{{end}}"
incldead: "0"
spstate: "0"
inclbookmarked: "0"
search_area: "{{ if .Query.IMDBID }}4{{else}}0{{end}}"
search_mode: "0"
rows:
selector: table.torrent_list > tbody > tr:has(a[href^="?cat="])
fields:
title:
selector: td:nth-child(2) a
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"]
size:
selector: td.t_size
grabs:
selector: td.t_completed
seeders:
selector: td.t_torrents
leechers:
selector: td.t_leech
date:
selector: td.t_time
filters:
- name: replace
args: ["时", " hours"]
- name: replace
args: ["分", " minutes"]
- name: replace
args: ["天", " days"]
- name: replace
args: ["年", " year"]
- name: replace
args: ["月", " months"]
- name: append
args: " ago"
downloadvolumefactor:
case:
img.pro_50pctdown: ".5"
img.pro_30pctdown: ".3"
img.pro_free: "0"
"*": "1"
uploadvolumefactor:
case:
"*": "1"

View File

@@ -1,98 +0,0 @@
---
site: hdclub
name: HDClub
language: ru-ru
type: private
encoding: windows-1251
links:
- http://hdclub.org
caps:
categorymappings:
- {id: 70, cat: Movies, desc: "Animation"}
- {id: 71, cat: Movies, desc: "Movie"}
- {id: 81, cat: Audio, desc: "HD Audio"}
- {id: 78, cat: TV/Documentary, desc: "Documentary"}
- {id: 68, cat: Audio/Video, desc: "Music Video"}
- {id: 64, cat: TV, desc: "TV Show"}
- {id: 62, cat: TV/Sport, desc: "Sport"}
- {id: 82, cat: Other, desc: "Demo"}
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: login.php
method: form
form: form[action="takelogin.php"]
captcha:
type: image
image: img#captcha
input: imagestring
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: td.embedded > div.error
test:
path: browse.php
selector: td.main_bottom
search:
path: browse.php
inputs:
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
search: "{{ .Query.Keywords }}"
dsearch: ""
stype: "or"
incldead: "1"
webdl: "0"
3d: "0"
rows:
selector: tbody#highlighted > tr
fields:
download:
selector: a[href^="details.php?id="]
attribute: href
filters:
- name: replace
args: ["details.php", "download.php"]
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
date:
selector: div#frame > div#cleft > font
filters:
- name: append
args: " +02:00"
- name: dateparse
args: "2006-01-02 15:04:05 -07:00"
seeders:
selector: td:nth-child(5)
leechers:
selector: td:nth-child(6)
grabs:
selector: td:nth-child(7) b
filters:
- name: regexp
args: ([\d,]+)
size:
selector: td:nth-child(7)
remove: a, br, b
downloadvolumefactor:
case:
img[src="pic/freedownload.gif"]: "0"
img[src="pic/silver.gif"]: "0.5"
"*": "1"
uploadvolumefactor:
case:
"*": "1"

View File

@@ -1,142 +1,142 @@
---
site: hdhome
name: HDHome
language: zh-cn
type: private
encoding: UTF-8
links:
- https://hdhome.org
caps:
categorymappings:
- {id: 411, cat: Movies/SD, desc: "Movies SD"}
- {id: 412, cat: Movies/SD, desc: "Movies IPad"}
- {id: 413, cat: Movies/HD, desc: "Movies 720p"}
- {id: 414, cat: Movies/HD, desc: "Movies 1080p"}
- {id: 415, cat: Movies/HD, desc: "Movies REMUX"}
- {id: 450, cat: Movies/BluRay, desc: "Movies Bluray"}
- {id: 416, cat: Movies/HD, desc: "Movies 2160p"}
- {id: 417, cat: TV/Documentary, desc: "Doc SD"}
- {id: 418, cat: TV/Documentary, desc: "Doc IPad"}
- {id: 419, cat: TV/Documentary, desc: "Doc 720p"}
- {id: 420, cat: TV/Documentary, desc: "Doc 1080p"}
- {id: 421, cat: TV/Documentary, desc: "Doc REMUX"}
- {id: 451, cat: TV/Documentary, desc: "Doc Bluray"}
- {id: 422, cat: TV/Documentary, desc: "Doc 2160p"}
- {id: 423, cat: TV/HD, desc: "TVMusic 720p"}
- {id: 424, cat: TV/HD, desc: "TVMusic 1080i"}
- {id: 425, cat: TV/SD, desc: "TVShow SD"}
- {id: 426, cat: TV/SD, desc: "TVShow IPad"}
- {id: 427, cat: TV/HD, desc: "TVShow 720p"}
- {id: 428, cat: TV/HD, desc: "TVShow 1080i"}
- {id: 429, cat: TV/HD, desc: "TVShow 1080p"}
- {id: 430, cat: TV/HD, desc: "TVShow REMUX"}
- {id: 452, cat: TV/HD, desc: "TVShows Bluray"}
- {id: 431, cat: TV/HD, desc: "TVShow 2160p"}
- {id: 432, cat: TV/SD, desc: "TVSeries SD"}
- {id: 433, cat: TV/SD, desc: "TVSeries IPad"}
- {id: 434, cat: TV/HD, desc: "TVSeries 720p"}
- {id: 435, cat: TV/HD, desc: "TVSeries 1080i"}
- {id: 436, cat: TV/HD, desc: "TVSeries 1080p"}
- {id: 437, cat: TV/HD, desc: "TVSeries REMUX"}
- {id: 453, cat: TV/HD, desc: "TVSereis Bluray"}
- {id: 438, cat: TV/HD, desc: "TVSeries 2160p"}
- {id: 439, cat: Audio/Other, desc: "Musics APE"}
- {id: 440, cat: Audio/Lossless, desc: "Musics FLAC"}
- {id: 441, cat: Audio/Video, desc: "Musics MV"}
- {id: 442, cat: TV/Sport, desc: "Sports 720p"}
- {id: 443, cat: TV/Sport, desc: "Sports 1080i"}
- {id: 444, cat: TV/Anime, desc: "Anime SD"}
- {id: 445, cat: TV/Anime, desc: "Anime IPad"}
- {id: 446, cat: TV/Anime, desc: "Anime 720p"}
- {id: 447, cat: TV/Anime, desc: "Anime 1080p"}
- {id: 448, cat: TV/Anime, desc: "Anime REMUX"}
- {id: 454, cat: TV/Anime, desc: "Anime Bluray"}
- {id: 409, cat: Other, desc: "Misc"}
- {id: 449, cat: TV/Anime, desc: "Anime 2160p"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid]
movie-search: [q, imdbid]
login:
path: login.php
method: form
form: form[action="takelogin.php"]
captcha:
type: image
image: img[alt="CAPTCHA"]
input: imagestring
inputs:
logintype: "username"
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: td.embedded:has(h2:contains("姿势不正确"))
- selector: td.embedded:has(h2:contains("失败"))
test:
path: /torrents.php
search:
path: /torrents.php
method: post
inputs:
$raw: "{{range .Categories}}cat{{.}}=1&{{end}}"
search: "{{if .Query.IMDBID}}{{ .Query.IMDBID }}{{else}}{{ .Keywords }}{{end}}"
incldead: "1"
spstate: "0"
inclbookmarked: "0"
search_area: "{{ if .Query.IMDBID }}4{{else}}0{{end}}"
search_mode: "0"
rows:
selector: table.torrents > tbody > tr:has(table.torrentname)
fields:
title:
selector: a[title][href^="details.php?id="]
attribute: title
category:
selector: a[href^="?cat="]
attribute: href
filters:
- name: querystring
args: cat
details:
selector: a[title][href^="details.php?id="]
attribute: href
download:
selector: a[href^="download.php?id="]
attribute: href
size:
selector: td.rowfollow:nth-child(5)
grabs:
selector: td.rowfollow:nth-child(8)
seeders:
selector: td.rowfollow:nth-child(6)
leechers:
selector: td.rowfollow:nth-child(7)
date:
selector: td.rowfollow:nth-child(4) > span[title]
attribute: title
filters:
- name: append
args: " +08:00"
- name: dateparse
args: "2006-01-02 15:04:05 -07:00"
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"
description:
selector: td:nth-child(2)
---
site: hdhome
name: HDHome
language: zh-cn
type: private
encoding: UTF-8
links:
- https://hdhome.org
caps:
categorymappings:
- {id: 411, cat: Movies/SD, desc: "Movies SD"}
- {id: 412, cat: Movies/SD, desc: "Movies IPad"}
- {id: 413, cat: Movies/HD, desc: "Movies 720p"}
- {id: 414, cat: Movies/HD, desc: "Movies 1080p"}
- {id: 415, cat: Movies/HD, desc: "Movies REMUX"}
- {id: 450, cat: Movies/BluRay, desc: "Movies Bluray"}
- {id: 416, cat: Movies/HD, desc: "Movies 2160p"}
- {id: 417, cat: TV/Documentary, desc: "Doc SD"}
- {id: 418, cat: TV/Documentary, desc: "Doc IPad"}
- {id: 419, cat: TV/Documentary, desc: "Doc 720p"}
- {id: 420, cat: TV/Documentary, desc: "Doc 1080p"}
- {id: 421, cat: TV/Documentary, desc: "Doc REMUX"}
- {id: 451, cat: TV/Documentary, desc: "Doc Bluray"}
- {id: 422, cat: TV/Documentary, desc: "Doc 2160p"}
- {id: 423, cat: TV/HD, desc: "TVMusic 720p"}
- {id: 424, cat: TV/HD, desc: "TVMusic 1080i"}
- {id: 425, cat: TV/SD, desc: "TVShow SD"}
- {id: 426, cat: TV/SD, desc: "TVShow IPad"}
- {id: 427, cat: TV/HD, desc: "TVShow 720p"}
- {id: 428, cat: TV/HD, desc: "TVShow 1080i"}
- {id: 429, cat: TV/HD, desc: "TVShow 1080p"}
- {id: 430, cat: TV/HD, desc: "TVShow REMUX"}
- {id: 452, cat: TV/HD, desc: "TVShows Bluray"}
- {id: 431, cat: TV/HD, desc: "TVShow 2160p"}
- {id: 432, cat: TV/SD, desc: "TVSeries SD"}
- {id: 433, cat: TV/SD, desc: "TVSeries IPad"}
- {id: 434, cat: TV/HD, desc: "TVSeries 720p"}
- {id: 435, cat: TV/HD, desc: "TVSeries 1080i"}
- {id: 436, cat: TV/HD, desc: "TVSeries 1080p"}
- {id: 437, cat: TV/HD, desc: "TVSeries REMUX"}
- {id: 453, cat: TV/HD, desc: "TVSereis Bluray"}
- {id: 438, cat: TV/HD, desc: "TVSeries 2160p"}
- {id: 439, cat: Audio/Other, desc: "Musics APE"}
- {id: 440, cat: Audio/Lossless, desc: "Musics FLAC"}
- {id: 441, cat: Audio/Video, desc: "Musics MV"}
- {id: 442, cat: TV/Sport, desc: "Sports 720p"}
- {id: 443, cat: TV/Sport, desc: "Sports 1080i"}
- {id: 444, cat: TV/Anime, desc: "Anime SD"}
- {id: 445, cat: TV/Anime, desc: "Anime IPad"}
- {id: 446, cat: TV/Anime, desc: "Anime 720p"}
- {id: 447, cat: TV/Anime, desc: "Anime 1080p"}
- {id: 448, cat: TV/Anime, desc: "Anime REMUX"}
- {id: 454, cat: TV/Anime, desc: "Anime Bluray"}
- {id: 409, cat: Other, desc: "Misc"}
- {id: 449, cat: TV/Anime, desc: "Anime 2160p"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid]
movie-search: [q, imdbid]
login:
path: login.php
method: form
form: form[action="takelogin.php"]
captcha:
type: image
image: img[alt="CAPTCHA"]
input: imagestring
inputs:
logintype: "username"
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: td.embedded:has(h2:contains("姿势不正确"))
- selector: td.embedded:has(h2:contains("失败"))
test:
path: /torrents.php
search:
path: /torrents.php
method: post
inputs:
$raw: "{{range .Categories}}cat{{.}}=1&{{end}}"
search: "{{if .Query.IMDBID}}{{ .Query.IMDBID }}{{else}}{{ .Keywords }}{{end}}"
incldead: "1"
spstate: "0"
inclbookmarked: "0"
search_area: "{{ if .Query.IMDBID }}4{{else}}0{{end}}"
search_mode: "0"
rows:
selector: table.torrents > tbody > tr:has(table.torrentname)
fields:
title:
selector: a[title][href^="details.php?id="]
attribute: title
category:
selector: a[href^="?cat="]
attribute: href
filters:
- name: querystring
args: cat
details:
selector: a[title][href^="details.php?id="]
attribute: href
download:
selector: a[href^="download.php?id="]
attribute: href
size:
selector: td.rowfollow:nth-child(5)
grabs:
selector: td.rowfollow:nth-child(8)
seeders:
selector: td.rowfollow:nth-child(6)
leechers:
selector: td.rowfollow:nth-child(7)
date:
selector: td.rowfollow:nth-child(4) > span[title]
attribute: title
filters:
- name: append
args: " +08:00"
- name: dateparse
args: "2006-01-02 15:04:05 -07:00"
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"
description:
selector: td:nth-child(2)
remove: a, img

View File

@@ -1,119 +1,119 @@
---
site: hdsky
name: HDSky
description: "A chinese tracker"
language: zh-cn
type: private
encoding: UTF-8
links:
- https://hdsky.me
caps:
categorymappings:
- {id: 401, cat: Movies, desc: "Movies/电影"}
- {id: 404, cat: TV/Documentary, desc: "Documentaries/纪录片"}
- {id: 410, cat: Movies, desc: "iPad/iPad影视"}
- {id: 405, cat: TV/Anime, desc: "Animations/动漫"}
- {id: 402, cat: TV, desc: "TV Series/剧集"}
- {id: 403, cat: TV, desc: "TV Shows/综艺"}
- {id: 406, cat: Audio/Video, desc: "Music Videos/音乐MV"}
- {id: 407, cat: TV/Sport, desc: "Sports/体育"}
- {id: 408, cat: Audio, desc: "HQ Audio/无损音乐"}
- {id: 409, cat: Other, desc: "Misc/其他"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid]
movie-search: [q, imdbid]
login:
path: login.php
method: form
form: form[action="takelogin.php"]
captcha:
type: image
image: img[alt="CAPTCHA"]
input: imagestring
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: td.embedded:has(h2:contains("failed"))
test:
path: /torrents.php
ratio:
path: /torrents.php
selector: table#info_block
filters:
- name: regexp
args: "Ratio:\\s(.*?)\\s\\s"
download:
method: post
search:
path: /torrents.php
method: post
inputs:
$raw: "{{range .Categories}}cat{{.}}=1&{{end}}"
search: "{{if .Query.IMDBID}}{{ .Query.IMDBID }}{{else}}{{ .Keywords }}{{end}}"
incldead: "1"
spstate: "0"
inclbookmarked: "0"
search_area: "{{ if .Query.IMDBID }}4{{else}}0{{end}}"
search_mode: "0"
rows:
selector: table.torrents > tbody > tr:has(table.torrentname)
fields:
title:
selector: a[title][href^="details.php?id="]
attribute: title
category:
selector: a[href^="?cat="]
attribute: href
filters:
- name: querystring
args: cat
details:
selector: a[title][href^="details.php?id="]
attribute: href
download:
selector: form[action^="download.php?id="]
attribute: action
imdb:
selector: a[href^="http://www.imdb.com/title/tt"]
attribute: href
size:
selector: td.rowfollow:nth-child(5)
grabs:
selector: td.rowfollow:nth-child(8)
seeders:
selector: td.rowfollow:nth-child(6)
leechers:
selector: td.rowfollow:nth-child(7)
date:
selector: td.rowfollow:nth-child(4) > span[title]
attribute: title
filters:
- name: append
args: " +08:00"
- name: dateparse
args: "2006-01-02 15:04:05 -07:00"
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"
description:
selector: td:nth-child(2)
---
site: hdsky
name: HDSky
description: "A chinese tracker"
language: zh-cn
type: private
encoding: UTF-8
links:
- https://hdsky.me
caps:
categorymappings:
- {id: 401, cat: Movies, desc: "Movies/电影"}
- {id: 404, cat: TV/Documentary, desc: "Documentaries/纪录片"}
- {id: 410, cat: Movies, desc: "iPad/iPad影视"}
- {id: 405, cat: TV/Anime, desc: "Animations/动漫"}
- {id: 402, cat: TV, desc: "TV Series/剧集"}
- {id: 403, cat: TV, desc: "TV Shows/综艺"}
- {id: 406, cat: Audio/Video, desc: "Music Videos/音乐MV"}
- {id: 407, cat: TV/Sport, desc: "Sports/体育"}
- {id: 408, cat: Audio, desc: "HQ Audio/无损音乐"}
- {id: 409, cat: Other, desc: "Misc/其他"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid]
movie-search: [q, imdbid]
login:
path: login.php
method: form
form: form[action="takelogin.php"]
captcha:
type: image
image: img[alt="CAPTCHA"]
input: imagestring
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: td.embedded:has(h2:contains("failed"))
test:
path: /torrents.php
ratio:
path: /torrents.php
selector: table#info_block
filters:
- name: regexp
args: "Ratio:\\s(.*?)\\s\\s"
download:
method: post
search:
path: /torrents.php
method: post
inputs:
$raw: "{{range .Categories}}cat{{.}}=1&{{end}}"
search: "{{if .Query.IMDBID}}{{ .Query.IMDBID }}{{else}}{{ .Keywords }}{{end}}"
incldead: "1"
spstate: "0"
inclbookmarked: "0"
search_area: "{{ if .Query.IMDBID }}4{{else}}0{{end}}"
search_mode: "0"
rows:
selector: table.torrents > tbody > tr:has(table.torrentname)
fields:
title:
selector: a[title][href^="details.php?id="]
attribute: title
category:
selector: a[href^="?cat="]
attribute: href
filters:
- name: querystring
args: cat
details:
selector: a[title][href^="details.php?id="]
attribute: href
download:
selector: form[action^="download.php?id="]
attribute: action
imdb:
selector: a[href^="http://www.imdb.com/title/tt"]
attribute: href
size:
selector: td.rowfollow:nth-child(5)
grabs:
selector: td.rowfollow:nth-child(8)
seeders:
selector: td.rowfollow:nth-child(6)
leechers:
selector: td.rowfollow:nth-child(7)
date:
selector: td.rowfollow:nth-child(4) > span[title]
attribute: title
filters:
- name: append
args: " +08:00"
- name: dateparse
args: "2006-01-02 15:04:05 -07:00"
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"
description:
selector: td:nth-child(2)
remove: a, img

View File

@@ -1,4 +1,4 @@
---
---
site: hon3yhd
name: Hon3y HD
language: en-us
@@ -69,6 +69,7 @@
inputs:
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
search: "{{ .Query.Keywords }}"
searchin: "title"
incldead: "1"
rows:
selector: table > tbody > tr.tt
@@ -87,7 +88,8 @@
download:
selector: a[href^="download.php?torrent="]
attribute: href
banner|optional:
banner:
optional: true
selector: a[href^="details.php?id="]
attribute: onmouseover
filters:

View File

@@ -0,0 +1,63 @@
---
site: horriblesubs
name: Horrible Subs
description: "Anime Sub Group - \"So bad yet so good\""
language: en-us
type: public
encoding: UTF-8
links:
- http://horriblesubs.info/
caps:
categories:
1: TV/Anime # Anime
modes:
search: [q]
tv-search: [q, season, ep]
settings:
- name: prepend-horriblesubs
type: checkbox
label: Prepend [Horriblesubs] to torrent title
search:
path: "lib/{{if .Query.Keywords }}search.php{{else}}latest.php{{end}}"
inputs:
value: "{{ .Query.Keywords }}"
rows:
selector: "div.release-links"
dateheaders:
selector: table.release-info
filters:
- name: split
args: [" ", 0 ]
- name: replace
args: ["(", ""]
- name: replace
args: [")", ""]
- name: replace
args: ["/", "-"]
- name: dateparse
args: "01-02-06"
- name: dateparse
args: "01-02"
fields:
category:
text: "1"
title:
selector: table.release-table > tbody > tr > td.dl-label
filters:
- name: prepend
args: "{{if .Config.prepend-horriblesubs}}[Horriblesubs] {{else}}{{end}}"
details:
attribute: class
filters:
- name: replace
args: ["release-links", ""]
- name: re_replace
args: [" ?(\\S+?)-((?:s\\d-)?(?:\\d+v?\\d?-){0,2}\\d+p)", "http://horriblesubs.info/shows/$1#$2"]
download:
selector: table.release-table > tbody > tr > td.hs-magnet-link > span > a
attribute: href
size:
text: "500 MB"

View File

@@ -1,107 +1,107 @@
---
site: hyperay
name: Hyperay
language: zh-cn
type: private
encoding: UTF-8
links:
- https://www.hyperay.cc
caps:
categorymappings:
- {id: 410, cat: Movies/HD, desc: "Movies 1080p"}
- {id: 411, cat: Movies/HD, desc: "Movies 720p"}
- {id: 401, cat: Movies/BluRay, desc: "Movies Blu-ray"}
- {id: 415, cat: Movies, desc: "Movies REMUX"}
- {id: 416, cat: Movies/3D, desc: "Movies 3D"}
- {id: 414, cat: Movies/DVD, desc: "Movies DVD"}
- {id: 412, cat: Movies/WEBDL, desc: "Movies WEB-DL"}
- {id: 413, cat: Movies/SD, desc: "Movies HDTV"}
- {id: 417, cat: Movies/Other, desc: "Movies iPad"}
- {id: 402, cat: TV, desc: "TV Series"}
- {id: 403, cat: TV, desc: "TV Shows"}
- {id: 404, cat: TV/Documentary, desc: "Documentaries"}
- {id: 405, cat: TV/Anime, desc: "Animations"}
- {id: 406, cat: Audio/Video, desc: "Music Videos"}
- {id: 407, cat: TV/Sport, desc: "Sports"}
- {id: 408, cat: Audio, desc: "HQ Audio"}
- {id: 418, cat: Books, desc: "Book"}
- {id: 409, cat: Other, desc: "Misc"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid]
movie-search: [q, imdbid]
login:
path: takelogin.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
authcode: ""
error:
- selector: td.embedded:has(h2:contains("failed"))
test:
path: /torrents.php
search:
path: /torrents.php
method: post
inputs:
$raw: "{{range .Categories}}cat{{.}}=1&{{end}}"
search: "{{if .Query.IMDBID}}{{ .Query.IMDBID }}{{else}}{{ .Keywords }}{{end}}"
incldead: "1"
spstate: "0"
inclbookmarked: "0"
search_area: "{{ if .Query.IMDBID }}4{{else}}0{{end}}"
search_mode: "0"
rows:
selector: table.torrents > tbody > tr[class]
fields:
title:
selector: a[title][href^="details.php?id="]
attribute: title
category:
selector: a[href^="?cat="]
attribute: href
filters:
- name: querystring
args: cat
details:
selector: a[title][href^="details.php?id="]
attribute: href
download:
selector: a[href^="download.php?id="]
attribute: href
imdb:
selector: a[href^="http://www.imdb.com/title/"]
attribute: href
banner:
selector: a[title][onmouseover][href^="details.php?id="]
attribute: onmouseover
filters:
- name: regexp
args: "showmenu\\(this,'.*','(.*)'\\);"
size:
selector: td.rowfollow:nth-child(6)
grabs:
selector: td.rowfollow:nth-child(9)
seeders:
selector: td.rowfollow:nth-child(7)
leechers:
selector: td.rowfollow:nth-child(8)
date:
selector: td.rowfollow:nth-child(5) > span[title]
attribute: title
filters:
- name: append
args: " +08:00"
- name: dateparse
args: "2006-01-02 15:04:05 -07:00"
downloadvolumefactor:
case:
"*": "1"
uploadvolumefactor:
case:
"*": "1"
---
site: hyperay
name: Hyperay
language: zh-cn
type: private
encoding: UTF-8
links:
- https://www.hyperay.cc
caps:
categorymappings:
- {id: 410, cat: Movies/HD, desc: "Movies 1080p"}
- {id: 411, cat: Movies/HD, desc: "Movies 720p"}
- {id: 401, cat: Movies/BluRay, desc: "Movies Blu-ray"}
- {id: 415, cat: Movies, desc: "Movies REMUX"}
- {id: 416, cat: Movies/3D, desc: "Movies 3D"}
- {id: 414, cat: Movies/DVD, desc: "Movies DVD"}
- {id: 412, cat: Movies/WEBDL, desc: "Movies WEB-DL"}
- {id: 413, cat: Movies/SD, desc: "Movies HDTV"}
- {id: 417, cat: Movies/Other, desc: "Movies iPad"}
- {id: 402, cat: TV, desc: "TV Series"}
- {id: 403, cat: TV, desc: "TV Shows"}
- {id: 404, cat: TV/Documentary, desc: "Documentaries"}
- {id: 405, cat: TV/Anime, desc: "Animations"}
- {id: 406, cat: Audio/Video, desc: "Music Videos"}
- {id: 407, cat: TV/Sport, desc: "Sports"}
- {id: 408, cat: Audio, desc: "HQ Audio"}
- {id: 418, cat: Books, desc: "Book"}
- {id: 409, cat: Other, desc: "Misc"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid]
movie-search: [q, imdbid]
login:
path: takelogin.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
authcode: ""
error:
- selector: td.embedded:has(h2:contains("failed"))
test:
path: /torrents.php
search:
path: /torrents.php
method: post
inputs:
$raw: "{{range .Categories}}cat{{.}}=1&{{end}}"
search: "{{if .Query.IMDBID}}{{ .Query.IMDBID }}{{else}}{{ .Keywords }}{{end}}"
incldead: "1"
spstate: "0"
inclbookmarked: "0"
search_area: "{{ if .Query.IMDBID }}4{{else}}0{{end}}"
search_mode: "0"
rows:
selector: table.torrents > tbody > tr[class]
fields:
title:
selector: a[title][href^="details.php?id="]
attribute: title
category:
selector: a[href^="?cat="]
attribute: href
filters:
- name: querystring
args: cat
details:
selector: a[title][href^="details.php?id="]
attribute: href
download:
selector: a[href^="download.php?id="]
attribute: href
imdb:
selector: a[href^="http://www.imdb.com/title/"]
attribute: href
banner:
selector: a[title][onmouseover][href^="details.php?id="]
attribute: onmouseover
filters:
- name: regexp
args: "showmenu\\(this,'.*','(.*)'\\);"
size:
selector: td.rowfollow:nth-child(6)
grabs:
selector: td.rowfollow:nth-child(9)
seeders:
selector: td.rowfollow:nth-child(7)
leechers:
selector: td.rowfollow:nth-child(8)
date:
selector: td.rowfollow:nth-child(5) > span[title]
attribute: title
filters:
- name: append
args: " +08:00"
- name: dateparse
args: "2006-01-02 15:04:05 -07:00"
downloadvolumefactor:
case:
"*": "1"
uploadvolumefactor:
case:
"*": "1"

View File

@@ -1,151 +1,151 @@
---
site: icetorrent
name: ICE Torrent
language: ro-ro
type: private
encoding: UTF-8
links:
- https://www.icetorrent.org
caps:
categorymappings:
- {id: 1, cat: PC/0day , desc: "Appz"}
- {id: 85, cat: Audio/Audiobook, desc: "AudioBooks"}
- {id: 68, cat: Books, desc: "Carti/Reviste"}
- {id: 23, cat: Books, desc: "Cartoons"}
- {id: 73, cat: Audio/Video, desc: "Concert/Videoclip"}
- {id: 75, cat: Other, desc: "Diverse"}
- {id: 69, cat: Books, desc: "Documentare"}
- {id: 51, cat: TV/Documentary, desc: "Documentaries"}
- {id: 43, cat: Books, desc: "eBooks"}
- {id: 63, cat: Movies/DVD, desc: "Filme DVD"}
- {id: 65, cat: Movies/HD, desc: "Filme HD"}
- {id: 64, cat: Movies/SD, desc: "Filme Xvid"}
- {id: 40, cat: Console, desc: "Games/Console"}
- {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: 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"}
- {id: 91, cat: Movies/HD, desc: "Movies/HEVC-x265"}
- {id: 79, cat: Movies/HD, desc: "Movies/microHD"}
- {id: 29, cat: Movies/SD, desc: "Movies/SD"}
- {id: 72, cat: Audio/Lossless, desc: "Music/FLAC"}
- {id: 6, cat: Audio/MP3, desc: "Music/MP3"}
- {id: 37, cat: Audio/Video, desc: "Music/Video"}
- {id: 70, cat: Audio/Lossless, desc: "Muzica FLAC"}
- {id: 71, cat: Audio/MP3, desc: "Muzica MP3"}
- {id: 74, cat: Other, desc: "Other"}
- {id: 41, cat: Other, desc: "Pictures"}
- {id: 67, cat: TV, desc: "Seriale TV"}
- {id: 48, cat: TV/Sport, desc: "Sports"}
- {id: 87, cat: Other, desc: "TUTS"}
- {id: 33, cat: TV/SD, desc: "TV Episodes"}
- {id: 34, cat: TV/HD, desc: "TVHD Episodes"}
- {id: 9, cat: XXX, desc: "XXX"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid]
movie-search: [q, imdbid]
login:
path: /login.php
method: form
form: form
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: font:contains("failed") + table
test:
path: /browse.php
ratio:
text: -1
search:
paths:
- path: browse.php
categorymappings: ["!", 9]
- path: browseadult.php
categorymappings: [9]
inputs:
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
search: "{{if .Query.IMDBID}}{{ .Query.IMDBIDShort }}{{else}}{{ .Keywords }}{{end}}"
incldead: 1
search_by: "{{ if .Query.IMDBID }}imdb{{else}}name{{end}}"
rows:
selector: table.torrenttable > tbody > tr:has(a[title][href^="details.php?id="])
fields:
title:
selector: a[title][href^="details.php?id="]
attribute: title
details:
selector: a[title][href^="details.php?id="]
attribute: href
category:
selector: a[href*=".php?cat="]
attribute: href
filters:
- name: querystring
args: cat
imdb:
selector: a[title="IMDB"]
attribute: href
banner:
attribute: rel
imdb:
selector: a[href^="http://www.imdb.com/title/"]
optional: true
attribute: href
download:
selector: a[href^="download.php"]
attribute: href
files:
selector: td:nth-child(5) > a
filters:
- name: regexp
args: (\d+)
size:
selector: td:nth-child(5)
remove: a
date:
selector: td:nth-child(2) > div
remove: b
filters:
- name: replace
args: ["\xA0", " "]
- name: replace
args: ["Added on ", ""]
- name: replace
args: ["st ", " "]
- name: replace
args: ["nd ", " "]
- name: replace
args: ["rd ", " "]
- name: replace
args: ["th ", " "]
- name: replace
args: [" by", ""]
- name: append
args: " +02:00"
- name: dateparse
args: "2 Jan 2006 15:04:05 -07:00"
grabs:
selector: td:nth-child(6)
downloadvolumefactor:
case:
"*": "0"
uploadvolumefactor:
case:
"*": "1"
description:
selector: td:nth-child(2)
remove: a[title][href^="details.php?id="], div
seeders:
text: "9999"
leechers:
text: "9999"
---
site: icetorrent
name: ICE Torrent
language: ro-ro
type: private
encoding: UTF-8
links:
- https://www.icetorrent.org
caps:
categorymappings:
- {id: 1, cat: PC/0day , desc: "Appz"}
- {id: 85, cat: Audio/Audiobook, desc: "AudioBooks"}
- {id: 68, cat: Books, desc: "Carti/Reviste"}
- {id: 23, cat: Books, desc: "Cartoons"}
- {id: 73, cat: Audio/Video, desc: "Concert/Videoclip"}
- {id: 75, cat: Other, desc: "Diverse"}
- {id: 69, cat: Books, desc: "Documentare"}
- {id: 51, cat: TV/Documentary, desc: "Documentaries"}
- {id: 43, cat: Books, desc: "eBooks"}
- {id: 63, cat: Movies/DVD, desc: "Filme DVD"}
- {id: 65, cat: Movies/HD, desc: "Filme HD"}
- {id: 64, cat: Movies/SD, desc: "Filme Xvid"}
- {id: 40, cat: Console, desc: "Games/Console"}
- {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: 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"}
- {id: 91, cat: Movies/HD, desc: "Movies/HEVC-x265"}
- {id: 79, cat: Movies/HD, desc: "Movies/microHD"}
- {id: 29, cat: Movies/SD, desc: "Movies/SD"}
- {id: 72, cat: Audio/Lossless, desc: "Music/FLAC"}
- {id: 6, cat: Audio/MP3, desc: "Music/MP3"}
- {id: 37, cat: Audio/Video, desc: "Music/Video"}
- {id: 70, cat: Audio/Lossless, desc: "Muzica FLAC"}
- {id: 71, cat: Audio/MP3, desc: "Muzica MP3"}
- {id: 74, cat: Other, desc: "Other"}
- {id: 41, cat: Other, desc: "Pictures"}
- {id: 67, cat: TV, desc: "Seriale TV"}
- {id: 48, cat: TV/Sport, desc: "Sports"}
- {id: 87, cat: Other, desc: "TUTS"}
- {id: 33, cat: TV/SD, desc: "TV Episodes"}
- {id: 34, cat: TV/HD, desc: "TVHD Episodes"}
- {id: 9, cat: XXX, desc: "XXX"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid]
movie-search: [q, imdbid]
login:
path: /login.php
method: form
form: form
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: font:contains("failed") + table
test:
path: /browse.php
ratio:
text: -1
search:
paths:
- path: browse.php
categorymappings: ["!", 9]
- path: browseadult.php
categorymappings: [9]
inputs:
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
search: "{{if .Query.IMDBID}}{{ .Query.IMDBIDShort }}{{else}}{{ .Keywords }}{{end}}"
incldead: 1
search_by: "{{ if .Query.IMDBID }}imdb{{else}}name{{end}}"
rows:
selector: table.torrenttable > tbody > tr:has(a[title][href^="details.php?id="])
fields:
title:
selector: a[title][href^="details.php?id="]
attribute: title
details:
selector: a[title][href^="details.php?id="]
attribute: href
category:
selector: a[href*=".php?cat="]
attribute: href
filters:
- name: querystring
args: cat
imdb:
selector: a[title="IMDB"]
attribute: href
banner:
attribute: rel
imdb:
selector: a[href^="http://www.imdb.com/title/"]
optional: true
attribute: href
download:
selector: a[href^="download.php"]
attribute: href
files:
selector: td:nth-child(5) > a
filters:
- name: regexp
args: (\d+)
size:
selector: td:nth-child(5)
remove: a
date:
selector: td:nth-child(2) > div
remove: b
filters:
- name: replace
args: ["\xA0", " "]
- name: replace
args: ["Added on ", ""]
- name: replace
args: ["st ", " "]
- name: replace
args: ["nd ", " "]
- name: replace
args: ["rd ", " "]
- name: replace
args: ["th ", " "]
- name: replace
args: [" by", ""]
- name: append
args: " +02:00"
- name: dateparse
args: "2 Jan 2006 15:04:05 -07:00"
grabs:
selector: td:nth-child(6)
downloadvolumefactor:
case:
"*": "0"
uploadvolumefactor:
case:
"*": "1"
description:
selector: td:nth-child(2)
remove: a[title][href^="details.php?id="], div
seeders:
text: "9999"
leechers:
text: "9999"

View File

@@ -6,6 +6,8 @@
encoding: UTF-8
links:
- https://ilcorsaronero.info/
certificates:
- FFB230323B987B07C24DCC13BC892CF30536F015 # incomplete CA chain
caps:
categorymappings:

View File

@@ -1,106 +1,106 @@
---
site: iloveclassics
name: I Love Classics
description: "Classics movie tracker"
language: en-us
type: private
encoding: UTF-8
links:
- http://www.iloveclassics.com/
caps:
categorymappings:
- {id: 1, cat: Movies, desc: "Action/Adventure"}
- {id: 22, cat: Movies, desc: "Animation"}
- {id: 18, cat: Movies, desc: "Audio"}
- {id: 2, cat: Movies, desc: "Comedy"}
- {id: 12, cat: Movies, desc: "Crime/Mystery"}
- {id: 4, cat: Movies, desc: "Documentary"}
- {id: 3, cat: Movies, desc: "Drama"}
- {id: 24, cat: Movies, desc: "E-Book"}
- {id: 9, cat: Movies, desc: "Family"}
- {id: 23, cat: Movies, desc: "Fantasy"}
- {id: 6, cat: Movies, desc: "Film Noir"}
- {id: 7, cat: Movies, desc: "Film Short"}
- {id: 8, cat: Movies, desc: "Horror"}
- {id: 10, cat: Movies, desc: "Martial Arts"}
- {id: 11, cat: Movies, desc: "Musical"}
- {id: 20, cat: Movies, desc: "Other"}
- {id: 13, cat: Movies, desc: "Romance"}
- {id: 5, cat: Movies, desc: "Sci-Fi"}
- {id: 14, cat: Movies, desc: "Silent"}
- {id: 15, cat: Movies, desc: "Thriller"}
- {id: 19, cat: Movies, desc: "TV Shows"}
- {id: 16, cat: Movies, desc: "War"}
- {id: 17, cat: Movies, desc: "Western"}
modes:
search: [q]
login:
path: takelogin.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: table:contains("Login failed!")
test:
path: index.php
download:
selector: a[href^="download.php?id="]
search:
path: browse.php
inputs:
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
search: "{{ .Query.Keywords }}"
rows:
selector: table#hover-over > tbody > tr.table_col1
filters:
- name: andmatch
fields:
category:
selector: a[href^="browse.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
title:
selector: td:nth-child(2) a
download:
selector: a[href^="details.php?id="]
attribute: href
filters:
- name: replace
args: ["details.php?id=", "download.php?id="]
details:
selector: a[href^="details.php?id="]
attribute: href
grabs:
selector: td:nth-child(9)
filters:
- name: regexp
args: (\d+\s+)(?=x)
files:
selector: td:nth-child(4)
size:
selector: td:nth-child(9)
filters:
- name: regexp
args: (\d+.*(MB|GB)+)
seeders:
selector: td:nth-child(6)
leechers:
selector: td:nth-child(7)
date:
selector: td:nth-child(2) div
downloadvolumefactor:
case:
"img[title=\"This Torrent is on Free Leech. Download amounts do not count to your ratio\"]": "0"
"img[title=\"This Torrent is Free Leech because it has 5 or more seeders. Download amounts do not count to your ratio while 5 seeders remain\"]": "0"
"*": "1"
uploadvolumefactor:
case:
---
site: iloveclassics
name: I Love Classics
description: "Classics movie tracker"
language: en-us
type: private
encoding: UTF-8
links:
- http://www.iloveclassics.com/
caps:
categorymappings:
- {id: 1, cat: Movies, desc: "Action/Adventure"}
- {id: 22, cat: Movies, desc: "Animation"}
- {id: 18, cat: Movies, desc: "Audio"}
- {id: 2, cat: Movies, desc: "Comedy"}
- {id: 12, cat: Movies, desc: "Crime/Mystery"}
- {id: 4, cat: Movies, desc: "Documentary"}
- {id: 3, cat: Movies, desc: "Drama"}
- {id: 24, cat: Movies, desc: "E-Book"}
- {id: 9, cat: Movies, desc: "Family"}
- {id: 23, cat: Movies, desc: "Fantasy"}
- {id: 6, cat: Movies, desc: "Film Noir"}
- {id: 7, cat: Movies, desc: "Film Short"}
- {id: 8, cat: Movies, desc: "Horror"}
- {id: 10, cat: Movies, desc: "Martial Arts"}
- {id: 11, cat: Movies, desc: "Musical"}
- {id: 20, cat: Movies, desc: "Other"}
- {id: 13, cat: Movies, desc: "Romance"}
- {id: 5, cat: Movies, desc: "Sci-Fi"}
- {id: 14, cat: Movies, desc: "Silent"}
- {id: 15, cat: Movies, desc: "Thriller"}
- {id: 19, cat: Movies, desc: "TV Shows"}
- {id: 16, cat: Movies, desc: "War"}
- {id: 17, cat: Movies, desc: "Western"}
modes:
search: [q]
login:
path: takelogin.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: table:contains("Login failed!")
test:
path: index.php
download:
selector: a[href^="download.php?id="]
search:
path: browse.php
inputs:
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
search: "{{ .Query.Keywords }}"
rows:
selector: table#hover-over > tbody > tr.table_col1
filters:
- name: andmatch
fields:
category:
selector: a[href^="browse.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
title:
selector: td:nth-child(2) a
download:
selector: a[href^="details.php?id="]
attribute: href
filters:
- name: replace
args: ["details.php?id=", "download.php?id="]
details:
selector: a[href^="details.php?id="]
attribute: href
grabs:
selector: td:nth-child(9)
filters:
- name: regexp
args: (\d+\s+)(?=x)
files:
selector: td:nth-child(4)
size:
selector: td:nth-child(9)
filters:
- name: regexp
args: (\d+.*(MB|GB)+)
seeders:
selector: td:nth-child(6)
leechers:
selector: td:nth-child(7)
date:
selector: td:nth-child(2)
downloadvolumefactor:
case:
"img[title=\"This Torrent is on Free Leech. Download amounts do not count to your ratio\"]": "0"
"img[title=\"This Torrent is Free Leech because it has 5 or more seeders. Download amounts do not count to your ratio while 5 seeders remain\"]": "0"
"*": "1"
uploadvolumefactor:
case:
"*": "1"

View File

@@ -1,106 +1,106 @@
---
site: infinityt
name: Infinity-T
language: da-dk
type: private
encoding: UTF-8
links:
- https://infinity-t.org/
caps:
categorymappings:
- {id: 22, cat: Audio/Audiobook, desc: "aBook"}
- {id: 13, cat: PC/Phone-Android, desc: "Appz/Android"}
- {id: 14, cat: PC/Phone-IOS, desc: "Appz/iPhone"}
- {id: 12, cat: PC/Mac, desc: "Appz/Mac"}
- {id: 11, cat: PC/0day, desc: "Appz/Win"}
- {id: 19, cat: Movies, desc: "AU/NEED"}
- {id: 20, cat: Books, desc: "eBook"}
- {id: 17, cat: Console, desc: "Games/Console"}
- {id: 16, cat: PC/Mac, desc: "Games/Mac"}
- {id: 15, cat: PC/Games, desc: "Games/PC"}
- {id: 8, cat: Movies, desc: "Movie/Boxset"}
- {id: 7, cat: Movies/DVD, desc: "Movie/DVD"}
- {id: 5, cat: Movies/HD, desc: "Movie/HD"}
- {id: 6, cat: Movies/SD, desc: "Movie/SD"}
- {id: 10, cat: Audio/Lossless, desc: "Music/FLAC"}
- {id: 9, cat: Audio/MP3, desc: "Music/MP3"}
- {id: 21, cat: Movies/Bluray, desc: "REMUX/Bluray"}
- {id: 4, cat: TV, desc: "TV/Boxset"}
- {id: 3, cat: TV, desc: "TV/DVD"}
- {id: 1, cat: TV/HD, desc: "TV/HD"}
- {id: 2, cat: TV/SD, desc: "TV/SD"}
- {id: 18, cat: XXX, desc: "XXX"}
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: login.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: td.embedded:has(h2:contains("failed"))
test:
path: /browse.php
search:
path: /browse.php
inputs:
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
search: "{{ .Query.Keywords }}"
incldead: 1
rows:
selector: td.outer > table > tbody > tr[id]
fields:
imdb:
selector: a[href^="https://www.nullrefer.com/?http://imdb.com/title/"]
attribute: href
banner:
selector: a[rel]
attribute: rel
filters:
- name: replace
args: ["pic/noposter.jpg", ""]
title:
selector: a[href^="details.php?id="]
category:
selector: a[href^="browse.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
details:
selector: a[href^="details.php?id="]
attribute: href
download:
selector: a[href^="download.php"]
attribute: href
files:
selector: td:nth-child(3)
size:
selector: td:nth-child(6)
seeders:
selector: td:nth-child(9)
leechers:
selector: td:nth-child(10)
date:
selector: td:nth-child(5)
filters:
- name: replace
args: ["I Dag", "Today"]
- name: replace
args: ["I Går", "Yesterday"]
grabs:
selector: td:nth-child(8)
downloadvolumefactor:
case:
td[style*="/pic/free.png"]: "0"
"*": "1"
uploadvolumefactor:
case:
---
site: infinityt
name: Infinity-T
language: da-dk
type: private
encoding: UTF-8
links:
- https://infinity-t.org/
caps:
categorymappings:
- {id: 22, cat: Audio/Audiobook, desc: "aBook"}
- {id: 13, cat: PC/Phone-Android, desc: "Appz/Android"}
- {id: 14, cat: PC/Phone-IOS, desc: "Appz/iPhone"}
- {id: 12, cat: PC/Mac, desc: "Appz/Mac"}
- {id: 11, cat: PC/0day, desc: "Appz/Win"}
- {id: 19, cat: Movies, desc: "AU/NEED"}
- {id: 20, cat: Books, desc: "eBook"}
- {id: 17, cat: Console, desc: "Games/Console"}
- {id: 16, cat: PC/Mac, desc: "Games/Mac"}
- {id: 15, cat: PC/Games, desc: "Games/PC"}
- {id: 8, cat: Movies, desc: "Movie/Boxset"}
- {id: 7, cat: Movies/DVD, desc: "Movie/DVD"}
- {id: 5, cat: Movies/HD, desc: "Movie/HD"}
- {id: 6, cat: Movies/SD, desc: "Movie/SD"}
- {id: 10, cat: Audio/Lossless, desc: "Music/FLAC"}
- {id: 9, cat: Audio/MP3, desc: "Music/MP3"}
- {id: 21, cat: Movies/Bluray, desc: "REMUX/Bluray"}
- {id: 4, cat: TV, desc: "TV/Boxset"}
- {id: 3, cat: TV, desc: "TV/DVD"}
- {id: 1, cat: TV/HD, desc: "TV/HD"}
- {id: 2, cat: TV/SD, desc: "TV/SD"}
- {id: 18, cat: XXX, desc: "XXX"}
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: login.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: td.embedded:has(h2:contains("failed"))
test:
path: /browse.php
search:
path: /browse.php
inputs:
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
search: "{{ .Query.Keywords }}"
incldead: 1
rows:
selector: td.outer > table > tbody > tr[id]
fields:
imdb:
selector: a[href^="https://www.nullrefer.com/?http://imdb.com/title/"]
attribute: href
banner:
selector: a[rel]
attribute: rel
filters:
- name: replace
args: ["pic/noposter.jpg", ""]
title:
selector: a[href^="details.php?id="]
category:
selector: a[href^="browse.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
details:
selector: a[href^="details.php?id="]
attribute: href
download:
selector: a[href^="download.php"]
attribute: href
files:
selector: td:nth-child(3)
size:
selector: td:nth-child(6)
seeders:
selector: td:nth-child(9)
leechers:
selector: td:nth-child(10)
date:
selector: td:nth-child(5)
filters:
- name: replace
args: ["I Dag", "Today"]
- name: replace
args: ["I Går", "Yesterday"]
grabs:
selector: td:nth-child(8)
downloadvolumefactor:
case:
td[style*="/pic/free.png"]: "0"
"*": "1"
uploadvolumefactor:
case:
"*": "1"

View File

@@ -1,104 +1,104 @@
---
site: inperil
name: inPeril
type: private
language: lv-lv
type: private
encoding: UTF-8
links:
- http://www.inperil.net/
caps:
categorymappings:
- {id: 34, cat: TV/Anime, desc: "Animation"}
- {id: 22, cat: PC/0day, desc: "Appz"}
- {id: 25, cat: PC/Games, desc: "Games/Console"}
- {id: 4, cat: PC/Games, desc: "Games/PC"}
- {id: 27, cat: Other/Misc, desc: "Misc"}
- {id: 35, cat: Movies/HD, desc: "Movies/HD"}
- {id: 37, cat: Movies/Foreign, desc: "Movies/LAT"}
- {id: 42, cat: Movies, desc: "Movies/Pack"}
- {id: 38, cat: Movies, desc: "Movies/Retro"}
- {id: 36, cat: Movies/Foreign, desc: "Movies/RUS"}
- {id: 19, cat: Movies/SD, desc: "Movies/SD"}
- {id: 6, cat: Audio, desc: "Music"}
- {id: 26, cat: Audio/Video, desc: "Music Videos"}
- {id: 31, cat: Audio/Lossless, desc: "Music/FLAC"}
- {id: 39, cat: TV/HD, desc: "TV/HD"}
- {id: 43, cat: TV, desc: "TV/Pack"}
- {id: 7, cat: TV/SD, desc: "TV/SD"}
- {id: 40, cat: XXX, desc: "XXX/HD"}
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: /takelogin.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: font.logintext
test:
path: /browse.php
search:
path: /browse.php
inputs:
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
search: "{{ .Query.Keywords }}"
incldead: 1
rows:
selector: table > tbody > tr:has(a[href^="details.php?id="])
fields:
title:
selector: a[href^="details.php?id="][title]
attribute: title
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^="download.php/"]
attribute: href
files:
selector: td:nth-child(3)
size:
selector: td:nth-child(6)
date:
selector: td:nth-child(5)
filters:
- name: append
args: " +02:00"
- name: dateparse
args: "2006-01-0215:04:05 -07:00"
grabs:
selector: td:nth-child(7)
filters:
- name: regexp
args: ([,\d]+)
seeders:
selector: td:nth-child(8)
leechers:
selector: td:nth-child(9)
banner:
selector: a[onmouseover][href^="details.php?id="]
attribute: onmouseover
filters:
- name: regexp
args: src=([^\s]+)
downloadvolumefactor:
case:
"img[alt=\"Zelta Torrents\"]": "0"
"img[alt=\"Sudraba Torrents\"]": "0.5"
"*": "1"
uploadvolumefactor:
case:
"*": "1"
---
site: inperil
name: inPeril
type: private
language: lv-lv
type: private
encoding: UTF-8
links:
- http://www.inperil.net/
caps:
categorymappings:
- {id: 34, cat: TV/Anime, desc: "Animation"}
- {id: 22, cat: PC/0day, desc: "Appz"}
- {id: 25, cat: PC/Games, desc: "Games/Console"}
- {id: 4, cat: PC/Games, desc: "Games/PC"}
- {id: 27, cat: Other/Misc, desc: "Misc"}
- {id: 35, cat: Movies/HD, desc: "Movies/HD"}
- {id: 37, cat: Movies/Foreign, desc: "Movies/LAT"}
- {id: 42, cat: Movies, desc: "Movies/Pack"}
- {id: 38, cat: Movies, desc: "Movies/Retro"}
- {id: 36, cat: Movies/Foreign, desc: "Movies/RUS"}
- {id: 19, cat: Movies/SD, desc: "Movies/SD"}
- {id: 6, cat: Audio, desc: "Music"}
- {id: 26, cat: Audio/Video, desc: "Music Videos"}
- {id: 31, cat: Audio/Lossless, desc: "Music/FLAC"}
- {id: 39, cat: TV/HD, desc: "TV/HD"}
- {id: 43, cat: TV, desc: "TV/Pack"}
- {id: 7, cat: TV/SD, desc: "TV/SD"}
- {id: 40, cat: XXX, desc: "XXX/HD"}
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: /takelogin.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: font.logintext
test:
path: /browse.php
search:
path: /browse.php
inputs:
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
search: "{{ .Query.Keywords }}"
incldead: 1
rows:
selector: table > tbody > tr:has(a[href^="details.php?id="])
fields:
title:
selector: a[href^="details.php?id="][title]
attribute: title
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^="download.php/"]
attribute: href
files:
selector: td:nth-child(3)
size:
selector: td:nth-child(6)
date:
selector: td:nth-child(5)
filters:
- name: append
args: " +02:00"
- name: dateparse
args: "2006-01-0215:04:05 -07:00"
grabs:
selector: td:nth-child(7)
filters:
- name: regexp
args: ([,\d]+)
seeders:
selector: td:nth-child(8)
leechers:
selector: td:nth-child(9)
banner:
selector: a[onmouseover][href^="details.php?id="]
attribute: onmouseover
filters:
- name: regexp
args: src=([^\s]+)
downloadvolumefactor:
case:
"img[alt=\"Zelta Torrents\"]": "0"
"img[alt=\"Sudraba Torrents\"]": "0.5"
"*": "1"
uploadvolumefactor:
case:
"*": "1"

View File

@@ -1,140 +1,143 @@
---
site: insanetracker
name: Insane Tracker
language: hu-hu
type: private
encoding: UTF-8
links:
- https://newinsane.info/
caps:
categorymappings:
- {id: 8, cat: TV/SD, desc: "Sorozat/Hun"}
- {id: 40, cat: TV/HD, desc: "Sorozat/Hun/HD"}
- {id: 41, cat: Movies/SD, desc: "Film/Hun/SD"}
- {id: 15, cat: Movies/DVD, desc: "Film/Hun/DVD-R"}
- {id: 27, cat: Movies/HD, desc: "Film/Hun/HD"}
- {id: 44, cat: Movies/HD, desc: "Film/Hun/UHD"}
- {id: 2, cat: Books, desc: "eBook/Hun"}
- {id: 7, cat: TV/SD, desc: "Sorozat/Eng"}
- {id: 39, cat: TV/HD, desc: "Sorozat/Eng/HD"}
- {id: 42, cat: Movies/SD, desc: "Film/Eng/SD"}
- {id: 14, cat: Movies/DVD, desc: "Film/Eng/DVD-R"}
- {id: 25, cat: Movies/HD, desc: "Film/Eng/HD"}
- {id: 45, cat: Movies/HD, desc: "Film/Eng/UHD"}
- {id: 1, cat: Books, desc: "eBook/Eng"}
- {id: 38, cat: Audio/Audiobook, desc: "Hangoskönyv"}
- {id: 21, cat: XXX, desc: "XXX"}
- {id: 4, cat: PC/ISO, desc: "Program/ISO"}
- {id: 19, cat: Audio/Other, desc: "Zene/Hun"}
- {id: 37, cat: Audio/Lossless, desc: "Lossless/Hun"}
- {id: 9, cat: PC/Games, desc: "Játék/ISO"}
- {id: 43, cat: Console, desc: "Játék/Konzol"}
- {id: 29, cat: Other, desc: "Képek"}
- {id: 28, cat: XXX/Imageset, desc: "XXX Képek"}
- {id: 3, cat: PC/0day, desc: "Program/Egyéb"}
- {id: 18, cat: Audio/Other, desc: "Zene/Eng"}
- {id: 26, cat: Audio/Lossless, desc: "Lossless/Eng"}
- {id: 11, cat: PC/Games, desc: "Játék/Rip"}
- {id: 13, cat: PC/Phone-Other, desc: "Mobil"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q, imdbid]
login:
path: takelogin.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
notsecure: "1"
error:
- selector: div.login_error_content
test:
path: /browse.php
search:
path: /browse.php
inputs:
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
search: "{{if .Query.IMDBID}}{{ .Query.IMDBID }}{{else}}{{ .Query.Keywords }}{{end}}"
t: "all"
rows:
selector: table.torrentable > tbody > tr:has(td.maintd)
fields:
title:
selector: div.tortitle > a
attribute: title
category:
selector: a[href^="browse.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
details:
selector: div.tortitle > a
attribute: href
download:
selector: a[href^="download.php/"]
attribute: href
imdb|optional:
selector: a[title="IMDb link"]
attribute: href
banner|optional|1:
selector: img[alt="offer"]
attribute: src
banner|optional|2:
selector: a.cover
attribute: href
files:
selector: td:nth-child(6)
filters:
- name: replace
args: [".", ""]
size:
selector: td:nth-child(8)
filters:
- name: replace
args: [".", ""]
- name: replace
args: [",", "."]
grabs:
selector: td:nth-child(9) > div:first-child
filters:
- name: replace
args: [".", ""]
- name: regexp
args: "^([\\d]+)"
seeders:
selector: td:nth-child(9) > div:first-child
filters:
- name: replace
args: [".", ""]
- name: regexp
args: "\\|\\s*([\\d]+)\\s*\\|"
leechers:
selector: td:nth-child(9) > div:first-child
filters:
- name: replace
args: [".", ""]
- name: regexp
args: "([\\d]+)$"
date:
selector: td.date
filters:
- name: dateparse
args: "2006.01.02 15:04:05"
downloadvolumefactor:
text: "0"
uploadvolumefactor:
case:
img[src^="pic/4x.gif"]: "4"
img[src^="pic/3x.gif"]: "3"
img[src^="pic/2x.gif"]: "2"
"*": "1"
description:
selector: td.maintd
remove: div.tortitle, div.markcont, div.tablebuttons, div.tablebigbuttons
---
site: insanetracker
name: Insane Tracker
language: hu-hu
type: private
encoding: UTF-8
links:
- https://newinsane.info/
caps:
categorymappings:
- {id: 8, cat: TV/SD, desc: "Sorozat/Hun"}
- {id: 40, cat: TV/HD, desc: "Sorozat/Hun/HD"}
- {id: 41, cat: Movies/SD, desc: "Film/Hun/SD"}
- {id: 15, cat: Movies/DVD, desc: "Film/Hun/DVD-R"}
- {id: 27, cat: Movies/HD, desc: "Film/Hun/HD"}
- {id: 44, cat: Movies/HD, desc: "Film/Hun/UHD"}
- {id: 2, cat: Books, desc: "eBook/Hun"}
- {id: 7, cat: TV/SD, desc: "Sorozat/Eng"}
- {id: 39, cat: TV/HD, desc: "Sorozat/Eng/HD"}
- {id: 42, cat: Movies/SD, desc: "Film/Eng/SD"}
- {id: 14, cat: Movies/DVD, desc: "Film/Eng/DVD-R"}
- {id: 25, cat: Movies/HD, desc: "Film/Eng/HD"}
- {id: 45, cat: Movies/HD, desc: "Film/Eng/UHD"}
- {id: 1, cat: Books, desc: "eBook/Eng"}
- {id: 38, cat: Audio/Audiobook, desc: "Hangoskönyv"}
- {id: 21, cat: XXX, desc: "XXX"}
- {id: 4, cat: PC/ISO, desc: "Program/ISO"}
- {id: 19, cat: Audio/Other, desc: "Zene/Hun"}
- {id: 37, cat: Audio/Lossless, desc: "Lossless/Hun"}
- {id: 9, cat: PC/Games, desc: "Játék/ISO"}
- {id: 43, cat: Console, desc: "Játék/Konzol"}
- {id: 29, cat: Other, desc: "Képek"}
- {id: 28, cat: XXX/Imageset, desc: "XXX Képek"}
- {id: 3, cat: PC/0day, desc: "Program/Egyéb"}
- {id: 18, cat: Audio/Other, desc: "Zene/Eng"}
- {id: 26, cat: Audio/Lossless, desc: "Lossless/Eng"}
- {id: 11, cat: PC/Games, desc: "Játék/Rip"}
- {id: 13, cat: PC/Phone-Other, desc: "Mobil"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q, imdbid]
login:
path: takelogin.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
notsecure: "1"
error:
- selector: div.login_error_content
test:
path: /browse.php
search:
path: /browse.php
inputs:
$raw: "{{range .Categories}}c{{.}}=1&{{end}}"
search: "{{if .Query.IMDBID}}{{ .Query.IMDBID }}{{else}}{{ .Query.Keywords }}{{end}}"
t: "all"
rows:
selector: table.torrentable > tbody > tr:has(td.maintd)
fields:
title:
selector: div.tortitle > a
attribute: title
category:
selector: a[href^="browse.php?cat="]
attribute: href
filters:
- name: querystring
args: cat
details:
selector: div.tortitle > a
attribute: href
download:
selector: a[href^="download.php/"]
attribute: href
imdb:
optional: true
selector: a[title="IMDb link"]
attribute: href
banner:
optional: true
selector: img[alt="offer"]
attribute: src
banner:
optional: true
selector: a.cover
attribute: href
files:
selector: td:nth-child(6)
filters:
- name: replace
args: [".", ""]
size:
selector: td:nth-child(8)
filters:
- name: replace
args: [".", ""]
- name: replace
args: [",", "."]
grabs:
selector: td:nth-child(9) > div:first-child
filters:
- name: replace
args: [".", ""]
- name: regexp
args: "^([\\d]+)"
seeders:
selector: td:nth-child(9) > div:first-child
filters:
- name: replace
args: [".", ""]
- name: regexp
args: "\\|\\s*([\\d]+)\\s*\\|"
leechers:
selector: td:nth-child(9) > div:first-child
filters:
- name: replace
args: [".", ""]
- name: regexp
args: "([\\d]+)$"
date:
selector: td.date
filters:
- name: dateparse
args: "2006.01.02 15:04:05"
downloadvolumefactor:
text: "0"
uploadvolumefactor:
case:
img[src^="pic/4x.gif"]: "4"
img[src^="pic/3x.gif"]: "3"
img[src^="pic/2x.gif"]: "2"
"*": "1"
description:
selector: td.maintd
remove: div.tortitle, div.markcont, div.tablebuttons, div.tablebigbuttons

View File

@@ -1,105 +1,105 @@
---
site: jpopsuki
name: JPopsuki
language: en-us
type: private
encoding: UTF-8
links:
- https://jpopsuki.eu/
caps:
categorymappings:
- {id: 1, cat: Audio, desc: "Album"}
- {id: 2, cat: Audio, desc: "Single"}
- {id: 3, cat: Movies, desc: "PV"}
- {id: 4, cat: Movies/DVD, desc: "DVD"}
- {id: 5, cat: TV, desc: "TV-Music"}
- {id: 6, cat: TV, desc: "TV-Variety"}
- {id: 7, cat: TV, desc: "TV-Drama"}
- {id: 8, cat: Other, desc: "Fansubs"}
- {id: 9, cat: Other, desc: "Pictures"}
- {id: 10, cat: Other/Misc, desc: "Misc"}
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: login.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
keeplogged: 1
login: "Log in"
error:
- selector: form#loginform > span.warning
test:
path: torrents.php
ratio:
path: torrents.php
selector: li#stats_ratio > span
search:
path: torrents.php
inputs:
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
searchstr: "{{ .Query.Keywords }}"
order_by: time
order_way: desc
action: basic
searchsubmit: 1
rows:
selector: table#torrent_table > tbody > tr[class^="torrent"]
fields:
download:
selector: a[href^="torrents.php?action=download&id="]
attribute: href
description:
selector: div.tags
title:
selector: td:nth-child(4)
remove: span, div.tags, a[title="View Comments"]
filters:
- name: replace
args: [" ()", ""]
- name: replace
args: [" / Freeleech!", ""]
category:
selector: a[href*="filter_cat"]
attribute: href
filters:
- name: regexp
args: "%5B(\\d+?)%5D"
details:
selector: a[href^="torrents.php?id="]
attribute: href
banner:
selector: td:nth-child(3) img
attribute: src
files:
selector: td:nth-child(5)
date:
selector: td:nth-child(6)
attribute: title
filters:
- name: append
args: " +00:00"
- name: dateparse
args: "Jan 02 2006, 15:04 -07:00"
size:
selector: td:nth-child(7)
grabs:
selector: td:nth-child(8)
seeders:
selector: td:nth-child(9)
leechers:
selector: td:nth-child(10)
downloadvolumefactor:
case:
"strong:contains(\"Freeleech!\")": "0"
"*": "1"
uploadvolumefactor:
case:
---
site: jpopsuki
name: JPopsuki
language: en-us
type: private
encoding: UTF-8
links:
- https://jpopsuki.eu/
caps:
categorymappings:
- {id: 1, cat: Audio, desc: "Album"}
- {id: 2, cat: Audio, desc: "Single"}
- {id: 3, cat: Movies, desc: "PV"}
- {id: 4, cat: Movies/DVD, desc: "DVD"}
- {id: 5, cat: TV, desc: "TV-Music"}
- {id: 6, cat: TV, desc: "TV-Variety"}
- {id: 7, cat: TV, desc: "TV-Drama"}
- {id: 8, cat: Other, desc: "Fansubs"}
- {id: 9, cat: Other, desc: "Pictures"}
- {id: 10, cat: Other/Misc, desc: "Misc"}
modes:
search: [q]
tv-search: [q, season, ep]
login:
path: login.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
keeplogged: 1
login: "Log in"
error:
- selector: form#loginform > span.warning
test:
path: torrents.php
ratio:
path: torrents.php
selector: li#stats_ratio > span
search:
path: torrents.php
inputs:
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
searchstr: "{{ .Query.Keywords }}"
order_by: time
order_way: desc
action: basic
searchsubmit: 1
rows:
selector: table#torrent_table > tbody > tr[class^="torrent"]
fields:
download:
selector: a[href^="torrents.php?action=download&id="]
attribute: href
description:
selector: div.tags
title:
selector: td:nth-child(4)
remove: span, div.tags, a[title="View Comments"]
filters:
- name: replace
args: [" ()", ""]
- name: replace
args: [" / Freeleech!", ""]
category:
selector: a[href*="filter_cat"]
attribute: href
filters:
- name: regexp
args: "%5B(\\d+?)%5D"
details:
selector: a[href^="torrents.php?id="]
attribute: href
banner:
selector: td:nth-child(3) img
attribute: src
files:
selector: td:nth-child(5)
date:
selector: td:nth-child(6)
attribute: title
filters:
- name: append
args: " +00:00"
- name: dateparse
args: "Jan 02 2006, 15:04 -07:00"
size:
selector: td:nth-child(7)
grabs:
selector: td:nth-child(8)
seeders:
selector: td:nth-child(9)
leechers:
selector: td:nth-child(10)
downloadvolumefactor:
case:
"strong:contains(\"Freeleech!\")": "0"
"*": "1"
uploadvolumefactor:
case:
"*": "1"

View File

@@ -1,4 +1,4 @@
---
---
site: kapaki
name: Kapaki
language: el-gr
@@ -76,7 +76,8 @@
keywords: "{{ .Keywords }}"
search_type: "name"
searchin: "title"
error:
- selector: div#show_error:not(:contains("Ουπς! Λάθος!Δεν βρέθηκαν αποτελέσματα."))
rows:
selector: div#content > div.torrent-box[id^="torrent_"]
filters:
@@ -107,7 +108,8 @@
selector: a[rel="torrent_leechers"]
grabs:
selector: a[rel="times_completed"]
banner|optional:
banner:
optional: true
selector: a[rel="fancybox"]
attribute: href
description:
@@ -119,10 +121,12 @@
uploadvolumefactor:
case:
"*": "1"
date|optional|1:
date:
optional: true
selector: div.torrentOwner > abbr.timeago
attribute: data-time
date|optional|2:
date:
optional: true
selector: div.torrentOwner:not(:has(abbr.timeago))
remove: span
filters:
@@ -155,4 +159,4 @@
- name: dateparse
args: "02-01-2006 15:04"

View File

@@ -1,83 +1,80 @@
---
site: karagarga
name: Karagarga
description: "Rare and obscure movie tracker"
language: en-us
type: private
encoding: UTF-8
links:
- https://karagarga.in/
caps:
categorymappings:
- {id: 1, cat: Movies, desc: "Movies"}
modes:
search: [q]
login:
path: takelogin.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
captcha:
type: image
image: img#captcha_img
input: imagestring
error:
- selector: table:contains("Login failed!")
test:
path: index.php
download:
selector: a[href^="download.php?id="]
search:
path: browse.php
inputs:
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
search: "\"{{ .Query.Keywords }}\""
search_type: "title"
rows:
selector: table#browse > tbody > tr:has(a[href^="browse.php?genre="])
fields:
category:
text: 1
title:
selector: td:nth-child(2) span
download:
selector: a[href^="details.php?id="]
attribute: href
filters:
- name: replace
args: ["details.php?id=", "download.php?id="]
details:
selector: a[href^="details.php?id="]
attribute: href
grabs:
selector: td:nth-child(12)
filters:
- name: regexp
args: ([\d,]+)
files:
selector: td:nth-child(10)
size:
selector: td:nth-child(11)
seeders:
selector: td:nth-child(13)
leechers:
selector: td:nth-child(14)
date:
selector: td:nth-child(9)
filters:
- name: replace
args: ["'", ""]
- name: dateparse
args: "Jan 02 06"
downloadvolumefactor:
case:
"*": "1"
uploadvolumefactor:
case:
"*": "1"
---
site: karagarga
name: Karagarga
description: "Rare and obscure movie tracker"
language: en-us
type: private
encoding: UTF-8
links:
- https://karagarga.in/
caps:
categorymappings:
- {id: 1, cat: Movies, desc: "Movies"}
modes:
search: [q]
login:
path: takelogin.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
captcha:
type: image
image: img#captcha_img
input: imagestring
error:
- selector: table:contains("Login failed!")
test:
path: index.php
search:
path: browse.php
inputs:
$raw: "{{range .Categories}}filter_cat[{{.}}]=1&{{end}}"
search: "\"{{ .Query.Keywords }}\""
search_type: "title"
rows:
selector: table#browse > tbody > tr:has(a[href^="browse.php?genre="])
fields:
category:
text: 1
title:
selector: td:nth-child(2) span
download:
selector: a[href^="details.php?id="]
attribute: href
filters:
- name: replace
args: ["details.php?id=", "download.php?id="]
details:
selector: a[href^="details.php?id="]
attribute: href
grabs:
selector: td:nth-child(12)
filters:
- name: regexp
args: ([\d,]+)
files:
selector: td:nth-child(10)
size:
selector: td:nth-child(11)
seeders:
selector: td:nth-child(13)
leechers:
selector: td:nth-child(14)
date:
selector: td:nth-child(9)
filters:
- name: replace
args: ["'", ""]
- name: dateparse
args: "Jan 02 06"
downloadvolumefactor:
case:
"*": "1"
uploadvolumefactor:
case:
"*": "1"

4
src/Jackett/Definitions/kickasstorrent-kathow.yml Normal file → Executable file
View File

@@ -1,11 +1,11 @@
---
site: kickasstorrent-kathow
name: KickAssTorrent (kat.how)
name: KickAssTorrent (thekat.se)
language: en-us
type: public
encoding: UTF-8
links:
- https://kat.how
- https://thekat.se
caps:
categories:

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