mirror of
https://github.com/Jackett/Jackett.git
synced 2025-09-11 14:19:17 +02:00
Compare commits
82 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
422eff86f4 | ||
![]() |
e66d88bbcf | ||
![]() |
669ddae0b0 | ||
![]() |
0b0d08dd7c | ||
![]() |
bf5b24a5a7 | ||
![]() |
228089b35b | ||
![]() |
f334cc89d6 | ||
![]() |
3a9360add9 | ||
![]() |
207dd1d51a | ||
![]() |
47e78fc70c | ||
![]() |
36d3f67fdc | ||
![]() |
41a5d3165e | ||
![]() |
2b9d950f39 | ||
![]() |
7be7d6770f | ||
![]() |
ff36eecfae | ||
![]() |
0438ffdfc0 | ||
![]() |
b614a8dc42 | ||
![]() |
1eae091ab8 | ||
![]() |
17d08d3f8c | ||
![]() |
d70bdbb26d | ||
![]() |
8d0edcdfb8 | ||
![]() |
34193e11df | ||
![]() |
57b8cbd407 | ||
![]() |
c2dbf6a80d | ||
![]() |
ff5586c4fa | ||
![]() |
48ff6821e6 | ||
![]() |
e282ff76a5 | ||
![]() |
8affee4b2d | ||
![]() |
dc352744c7 | ||
![]() |
ef5276da64 | ||
![]() |
32360070ad | ||
![]() |
633d1631c2 | ||
![]() |
d4fc8ab071 | ||
![]() |
08713ae7b8 | ||
![]() |
836f5372b3 | ||
![]() |
7e7ace05be | ||
![]() |
12da8b6131 | ||
![]() |
abc2f43f9c | ||
![]() |
1a49430b45 | ||
![]() |
147549cbf8 | ||
![]() |
fd884a8597 | ||
![]() |
fff9f0730b | ||
![]() |
951e510c1a | ||
![]() |
bfa2757c98 | ||
![]() |
623f48d83c | ||
![]() |
efc1602936 | ||
![]() |
906b8e1ff8 | ||
![]() |
bf4228b0dc | ||
![]() |
0a00e4edcd | ||
![]() |
abbf37060d | ||
![]() |
f6108ee852 | ||
![]() |
a6bde9f001 | ||
![]() |
2594fdba13 | ||
![]() |
97873506e3 | ||
![]() |
4944aef039 | ||
![]() |
a63fd138a8 | ||
![]() |
e4af5f1db2 | ||
![]() |
25e45daa20 | ||
![]() |
468ea2472b | ||
![]() |
49f57a9833 | ||
![]() |
63c7bf6aed | ||
![]() |
f5b787562f | ||
![]() |
182de9c60a | ||
![]() |
497e02e80c | ||
![]() |
fba5201ccd | ||
![]() |
8c2baf3bd2 | ||
![]() |
5b69bdfef4 | ||
![]() |
844855e3ba | ||
![]() |
ddb5e95785 | ||
![]() |
ef714804ee | ||
![]() |
3aab5de496 | ||
![]() |
fbe225bbf6 | ||
![]() |
897156176a | ||
![]() |
2db0ca6d52 | ||
![]() |
63faed4687 | ||
![]() |
0806e4182b | ||
![]() |
91307ff044 | ||
![]() |
0f5e919f33 | ||
![]() |
051cbabbcf | ||
![]() |
bd3ec7533d | ||
![]() |
78fecaced2 | ||
![]() |
4142a9d037 |
8
.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal file
8
.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
#### Description
|
||||
A few sentences describing the overall goals of the pull request's commits.
|
||||
|
||||
#### Screenshot (if UI related)
|
||||
|
||||
#### Issues Fixed or Closed by this PR
|
||||
|
||||
* Fixes #XXXX
|
29
README.md
29
README.md
@@ -14,7 +14,7 @@ Please see our [troubleshooting and contributing guidelines](CONTRIBUTING.md) be
|
||||
|
||||
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/), [Mylar3](https://github.com/mylar3/mylar3), [Lidarr](https://github.com/lidarr/lidarr), [DuckieTV](https://github.com/SchizoDuckie/DuckieTV), [qBittorrent](https://www.qbittorrent.org/), [Nefarious](https://github.com/lardbit/nefarious) etc.) into tracker-site-specific http queries, parses the html or json response, and 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://web.archive.org/web/20220517013745/https://github.com/Sonarr/Sonarr/wiki/Implementing-a-Torznab-indexer) (with hybrid [nZEDb](https://github.com/nZEDb/nZEDb/blob/b485fa326a0ff1f47ce144164eb1f070e406b555/resources/db/schema/data/10-categories.tsv)/[Newznab](https://newznab.readthedocs.io/en/latest/misc/api/#predefined-categories) [category numbering](https://github.com/Jackett/Jackett/wiki/Jackett-Categories)) and [TorrentPotato](https://github.com/RuudBurger/CouchPotatoServer/wiki/Couchpotato-torrent-provider) APIs.
|
||||
Developer note: The software implements the [Torznab](https://torznab.github.io/spec-1.3-draft/index.html) (with hybrid [nZEDb](https://github.com/nZEDb/nZEDb/blob/b485fa326a0ff1f47ce144164eb1f070e406b555/resources/db/schema/data/10-categories.tsv)/[Newznab](https://newznab.readthedocs.io/en/latest/misc/api/#predefined-categories) [category numbering](https://github.com/Jackett/Jackett/wiki/Jackett-Categories)) and [TorrentPotato](https://github.com/RuudBurger/CouchPotatoServer/wiki/Couchpotato-torrent-provider) APIs.
|
||||
|
||||
A third-party Golang SDK for Jackett is available from [webtor-io/go-jackett](https://github.com/webtor-io/go-jackett)
|
||||
|
||||
@@ -106,7 +106,6 @@ A third-party Golang SDK for Jackett is available from [webtor-io/go-jackett](ht
|
||||
* PornoTorrent
|
||||
* ProPorn
|
||||
* Rapidzona
|
||||
* RARBG
|
||||
* RinTorNeT
|
||||
* RuTor
|
||||
* RuTracker.RU
|
||||
@@ -144,7 +143,8 @@ A third-party Golang SDK for Jackett is available from [webtor-io/go-jackett](ht
|
||||
* truPornolabs
|
||||
* UnionDHT
|
||||
* VSTHouse
|
||||
* VST Torrents
|
||||
* VST Torrentz
|
||||
* VSTorrent
|
||||
* xxxAdultTorrent
|
||||
* XXXClub
|
||||
* xxxtor
|
||||
@@ -188,7 +188,6 @@ A third-party Golang SDK for Jackett is available from [webtor-io/go-jackett](ht
|
||||
* Il CorSaRo Blu
|
||||
* Kinorun
|
||||
* Kinozal
|
||||
* Lightning-Tor
|
||||
* LostFilm.tv
|
||||
* Magnetico (Local DHT) [[site](https://github.com/boramalper/magnetico)]
|
||||
* Marine Tracker
|
||||
@@ -237,14 +236,13 @@ A third-party Golang SDK for Jackett is available from [webtor-io/go-jackett](ht
|
||||
* 1ptbar
|
||||
* 2 Fast 4 You [![(invite needed)][inviteneeded]](#)
|
||||
* 2xFree
|
||||
* 3ChangTrai (3CT) [![(invite needed)][inviteneeded]](#)
|
||||
* 3ChangTrai (3CT)
|
||||
* 3D Torrents (3DT)
|
||||
* 4thD (4th Dimension)
|
||||
* 52PT
|
||||
* 720pier
|
||||
* Abnormal
|
||||
* ABtorrents (ABT + RNS)
|
||||
* Acervos [![(invite needed)][inviteneeded]](#)
|
||||
* Acid Lounge (A-L)
|
||||
* AcrossTheTasman [![(invite needed)][inviteneeded]](#)
|
||||
* Aftershock
|
||||
@@ -267,7 +265,7 @@ A third-party Golang SDK for Jackett is available from [webtor-io/go-jackett](ht
|
||||
* AudioNews (AN)
|
||||
* Aussierul.es [![(invite needed)][inviteneeded]](#)
|
||||
* AvistaZ (AsiaTorrents)
|
||||
* Back-ups [![(invite needed)][inviteneeded]](#)
|
||||
* Back-ups
|
||||
* BakaBT
|
||||
* BeiTai
|
||||
* Best-Core
|
||||
@@ -302,7 +300,6 @@ A third-party Golang SDK for Jackett is available from [webtor-io/go-jackett](ht
|
||||
* CarPT
|
||||
* CartoonChaos (CC)
|
||||
* Cathode-Ray.Tube (CRT)
|
||||
* CCFBits [![(invite needed)][inviteneeded]](#)
|
||||
* Central Torrent
|
||||
* CeskeForum
|
||||
* CGPeers [![(invite needed)][inviteneeded]](#)
|
||||
@@ -353,7 +350,7 @@ A third-party Golang SDK for Jackett is available from [webtor-io/go-jackett](ht
|
||||
* GainBound [![(invite needed)][inviteneeded]](#)
|
||||
* Gay-Torrents.org
|
||||
* GAYtorrent.ru
|
||||
* GazelleGames (GGn) [![(invite needed)][inviteneeded]](#)
|
||||
* GazelleGames (GGn)
|
||||
* Generation-Free
|
||||
* GigaTorrents
|
||||
* GimmePeers (formerly ILT)
|
||||
@@ -385,7 +382,6 @@ A third-party Golang SDK for Jackett is available from [webtor-io/go-jackett](ht
|
||||
* HDRoute [![(invite needed)][inviteneeded]](#)
|
||||
* HDSky [![(invite needed)][inviteneeded]](#)
|
||||
* HDTime
|
||||
* HDTorrents.it [![(invite needed)][inviteneeded]](#)
|
||||
* HDTurk
|
||||
* HDU
|
||||
* HDVIDEO
|
||||
@@ -428,7 +424,7 @@ A third-party Golang SDK for Jackett is available from [webtor-io/go-jackett](ht
|
||||
* Locadora
|
||||
* LosslessClub [![(invite needed)][inviteneeded]](#)
|
||||
* LST
|
||||
* M-Team TP (MTTP) [![(invite needed)][inviteneeded]](#)
|
||||
* M-Team TP (MTTP)
|
||||
* MaDs Revolution
|
||||
* magic-heaven
|
||||
* Magico (Trellas) [![(invite needed)][inviteneeded]](#)
|
||||
@@ -503,15 +499,14 @@ A third-party Golang SDK for Jackett is available from [webtor-io/go-jackett](ht
|
||||
* RevolutionTT
|
||||
* Romanian Metal Torrents (RMT) [![(invite needed)][inviteneeded]](#)
|
||||
* RPTorrents
|
||||
* SceneHD [![(invite needed)][inviteneeded]](#)
|
||||
* SceneHD [![(invite needed)][inviteneeded]](#)
|
||||
* SceneRush
|
||||
* SceneTime
|
||||
* SDBits [![(invite needed)][inviteneeded]](#)
|
||||
* Secret Cinema
|
||||
* SeedFile
|
||||
* Shareisland
|
||||
* SharkPT
|
||||
* Shazbat [![(invite needed)][inviteneeded]](#)
|
||||
* Shazbat
|
||||
* SiamBIT
|
||||
* SkipTheCommercials
|
||||
* SkipTheTrailers
|
||||
@@ -568,6 +563,7 @@ A third-party Golang SDK for Jackett is available from [webtor-io/go-jackett](ht
|
||||
* TorrentBytes (TBy)
|
||||
* TorrentCCF (TCCF)
|
||||
* TorrentDay (TD)
|
||||
* Torrenteros (TTR)
|
||||
* TorrentHeaven [![(invite needed)][inviteneeded]](#)
|
||||
* TorrentHR [![(invite needed)][inviteneeded]](#)
|
||||
* Torrenting (TT)
|
||||
@@ -578,8 +574,8 @@ A third-party Golang SDK for Jackett is available from [webtor-io/go-jackett](ht
|
||||
* TorrentSeeds (TS)
|
||||
* TotallyKids (TK)
|
||||
* ToTheGlory (TTG) [![(invite needed)][inviteneeded]](#)
|
||||
* TranceTraffic [![(invite needed)][inviteneeded]](#)
|
||||
* Trezzor [![(invite needed)][inviteneeded]](#)
|
||||
* TranceTraffic
|
||||
* TreZzoR [![(invite needed)][inviteneeded]](#)
|
||||
* TurkSeed
|
||||
* TurkTorrent (TT)
|
||||
* TV Chaos UK (TVCUK)
|
||||
@@ -593,6 +589,7 @@ A third-party Golang SDK for Jackett is available from [webtor-io/go-jackett](ht
|
||||
* UnleashTheCartoons
|
||||
* UnlimitZ
|
||||
* Uploads
|
||||
* UTOPIA
|
||||
* White Angel
|
||||
* World-In-HD [![(invite needed)][inviteneeded]](#)
|
||||
* World-of-Tomorrow
|
||||
|
@@ -461,7 +461,7 @@ function displayUnconfiguredIndexersList() {
|
||||
$('#indexers div.dataTables_filter input').focusWithoutScrolling();
|
||||
});
|
||||
|
||||
$("#modals").append(UnconfiguredIndexersDialog);
|
||||
$("#modals").html(UnconfiguredIndexersDialog);
|
||||
|
||||
$('#add-selected-indexers').click(function () {
|
||||
var selectedIndexers = $('#unconfigured-indexer-datatable').DataTable().$('input[type="checkbox"]');
|
||||
@@ -799,7 +799,7 @@ function newConfigModal(title, config, caps, link, alternativesitelinks, descrip
|
||||
link: link,
|
||||
description: description
|
||||
}));
|
||||
$("#modals").append(configForm);
|
||||
$("#modals").html(configForm);
|
||||
populateConfigItems(configForm, config);
|
||||
|
||||
if (alternativesitelinks.length >= 1) {
|
||||
@@ -1043,14 +1043,13 @@ function showSearch(selectedFilter, selectedIndexer, query, category) {
|
||||
var selectedIndexers = [];
|
||||
if (selectedIndexer)
|
||||
selectedIndexers = selectedIndexer.split(",");
|
||||
$('#select-indexer-modal').remove();
|
||||
var releaseTemplate = Handlebars.compile($("#jackett-search").html());
|
||||
var releaseDialog = $(releaseTemplate({
|
||||
filters: availableFilters,
|
||||
active: selectedFilter
|
||||
}));
|
||||
|
||||
$("#modals").append(releaseDialog);
|
||||
$("#modals").html(releaseDialog);
|
||||
|
||||
releaseDialog.on('shown.bs.modal', function () {
|
||||
releaseDialog.find('#searchquery').focusWithoutScrolling();
|
||||
@@ -1581,7 +1580,7 @@ function bindUIButtons() {
|
||||
});
|
||||
}
|
||||
});
|
||||
$("#modals").append(releaseDialog);
|
||||
$("#modals").html(releaseDialog);
|
||||
releaseDialog.modal("show");
|
||||
}).fail(function () {
|
||||
doNotify("Request to Jackett server failed", "danger", "glyphicon glyphicon-alert");
|
||||
@@ -1600,7 +1599,7 @@ function bindUIButtons() {
|
||||
logs: data
|
||||
};
|
||||
var releaseDialog = $(releaseTemplate(item));
|
||||
$("#modals").append(releaseDialog);
|
||||
$("#modals").html(releaseDialog);
|
||||
releaseDialog.modal("show");
|
||||
}).fail(function () {
|
||||
doNotify("Request to Jackett server failed", "danger", "glyphicon glyphicon-alert");
|
||||
|
@@ -529,10 +529,10 @@
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<p>You can search all configured indexers from this screen.</p>
|
||||
<label for="text">Query</label>
|
||||
<label for="searchquery">Query</label>
|
||||
<input class="form-control" type="text" name="query" id="searchquery" />
|
||||
{{#if filters}}
|
||||
<label for="filter">Filter</label>
|
||||
<label for="searchFilter">Filter</label>
|
||||
<select name="filter" id="searchFilter">
|
||||
<option value="all">all</option>
|
||||
{{#each filters}}
|
||||
@@ -540,9 +540,9 @@
|
||||
{{/each}}
|
||||
</select>
|
||||
{{/if}}
|
||||
<label for="tracker">Tracker</label>
|
||||
<label for="searchTracker">Tracker</label>
|
||||
<select name="tracker" id="searchTracker" multiple="multiple"></select>
|
||||
<label for="category">Category</label>
|
||||
<label for="searchCategory">Category</label>
|
||||
<select name="category" id="searchCategory" multiple="multiple"></select>
|
||||
<button id="jackett-search-perform" class="btn btn-success btn-sm"><span class="fa fa-search"></span></button>
|
||||
<div id="searchResults"></div>
|
||||
@@ -756,6 +756,6 @@
|
||||
</script>
|
||||
|
||||
<script type="text/javascript" src="../libs/api.js?changed=2017083001"></script>
|
||||
<script type="text/javascript" src="../custom.js?changed=2023041901"></script>
|
||||
<script type="text/javascript" src="../custom.js?changed=2023052701"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
@@ -30,13 +30,13 @@ caps:
|
||||
- {id: 423, cat: XXX, desc: "IV(写真影片)", default: true}
|
||||
- {id: 424, cat: XXX, desc: "IV(写真图集)", default: true}
|
||||
# special
|
||||
- {id: 526, cat: Movies, desc: "VRMovies(3D/VR电影)", default: true}
|
||||
- {id: 527, cat: TV, desc: "VRSeries(3D/VR剧集)", default: true}
|
||||
- {id: 528, cat: Audio/Video, desc: "AV(VR无码)", default: true}
|
||||
- {id: 529, cat: Audio/Video, desc: "AV(VR有码)", default: true}
|
||||
- {id: 530, cat: Console, desc: "VRGame(VR一体机游戏)", default: true}
|
||||
- {id: 531, cat: PC/Games, desc: "PCVRGame(PCVR游戏)", default: true}
|
||||
- {id: 532, cat: Other, desc: "VRTools(VR工具软件)", default: true}
|
||||
- {id: 526, cat: Movies, desc: "VRMovies(3D/VR电影)", default: false}
|
||||
- {id: 527, cat: TV, desc: "VRSeries(3D/VR剧集)", default: false}
|
||||
- {id: 528, cat: Audio/Video, desc: "AV(VR无码)", default: false}
|
||||
- {id: 529, cat: Audio/Video, desc: "AV(VR有码)", default: false}
|
||||
- {id: 530, cat: Console, desc: "VRGame(VR一体机游戏)", default: false}
|
||||
- {id: 531, cat: PC/Games, desc: "PCVRGame(PCVR游戏)", default: false}
|
||||
- {id: 532, cat: Other, desc: "VRTools(VR工具软件)", default: false}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
@@ -110,7 +110,7 @@ login:
|
||||
search:
|
||||
paths:
|
||||
- path: torrents.php
|
||||
categories: [401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 413, 420, 421, 422, 423, 424]
|
||||
categories: ["!", 526, 527, 528, 529, 530, 531, 532]
|
||||
- path: special.php
|
||||
categories: [526, 527, 528, 529, 530, 531, 532]
|
||||
inputs:
|
||||
|
@@ -89,7 +89,6 @@ search:
|
||||
sortField: "{{ .Config.sort }}"
|
||||
sortDirection: "{{ .Config.type }}"
|
||||
perPage: 100
|
||||
page: 1
|
||||
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
@@ -98,8 +97,6 @@ search:
|
||||
rows:
|
||||
selector: data
|
||||
attribute: attributes
|
||||
count:
|
||||
selector: meta.total
|
||||
|
||||
fields:
|
||||
category:
|
||||
|
@@ -31,7 +31,7 @@ settings:
|
||||
search:
|
||||
paths:
|
||||
# https://github.com/anilibria/docs/blob/master/api_v3.md
|
||||
- path: "https://api.anilibria.tv/v3/{{ if .Keywords }}searchTitles{{ else }}getUpdates{{ end }}"
|
||||
- path: "https://api.anilibria.tv/v3/title/{{ if .Keywords }}search{{ else }}updates{{ end }}"
|
||||
response:
|
||||
type: json
|
||||
|
||||
|
@@ -91,7 +91,6 @@ search:
|
||||
sortField: "{{ .Config.sort }}"
|
||||
sortDirection: "{{ .Config.type }}"
|
||||
perPage: 100
|
||||
page: 1
|
||||
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
@@ -100,8 +99,6 @@ search:
|
||||
rows:
|
||||
selector: data
|
||||
attribute: attributes
|
||||
count:
|
||||
selector: meta.total
|
||||
|
||||
fields:
|
||||
category:
|
||||
|
@@ -94,13 +94,10 @@ search:
|
||||
sortField: "{{ .Config.sort }}"
|
||||
sortDirection: "{{ .Config.type }}"
|
||||
perPage: 100
|
||||
page: 1
|
||||
|
||||
rows:
|
||||
selector: data
|
||||
attribute: attributes
|
||||
count:
|
||||
selector: meta.total
|
||||
|
||||
fields:
|
||||
categorydesc:
|
||||
|
@@ -6,8 +6,6 @@ language: en-US
|
||||
type: public
|
||||
encoding: UTF-8
|
||||
requestDelay: 2
|
||||
certificates:
|
||||
- 7b36f0dc75d3340727b6f74bbdbde46ec59b7037 # expired 12 Feb 2023
|
||||
links:
|
||||
- https://asnet.pw/
|
||||
|
||||
|
@@ -2,7 +2,7 @@
|
||||
id: arabp2p
|
||||
name: ArabP2P
|
||||
description: "ArabP2P is an ARABIC Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
language: ar-AR
|
||||
language: ar-AE
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
|
@@ -2,7 +2,7 @@
|
||||
id: arabtorrents
|
||||
name: ArabTorrents
|
||||
description: "ArabTorrents is an ARABIC Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
language: ar-AR
|
||||
language: ar-AE
|
||||
type: private
|
||||
encoding: windows-1256
|
||||
requestDelay: 2
|
||||
|
@@ -23,10 +23,16 @@ caps:
|
||||
- {id: 95, cat: Movies/HD, desc: "Film/FHD/Eng", default: true}
|
||||
- {id: 92, cat: Movies/UHD, desc: "Film/UHD/Hun", default: true}
|
||||
- {id: 93, cat: Movies/UHD, desc: "Film/UHD/Eng", default: true}
|
||||
- {id: 64, cat: Movies, desc: "Film/Pack", default: true}
|
||||
- {id: 24, cat: Audio/Video, desc: "Videóklip", default: true}
|
||||
- {id: 22, cat: TV, desc: "Sorozat/Hun", default: true}
|
||||
- {id: 58, cat: TV, desc: "Sorozat/Eng", default: true}
|
||||
- {id: 64, cat: Movies, desc: "Film/Pack", default: true}
|
||||
- {id: 66, cat: XXX/ImageSet, desc: "Képek/XXX", default: false}
|
||||
- {id: 33, cat: XXX/SD, desc: "SD/XXX", default: false}
|
||||
- {id: 89, cat: XXX/x264, desc: "HD/XXX", default: false}
|
||||
- {id: 24, cat: Audio/Video, desc: "Videóklip", default: true}
|
||||
- {id: 70, cat: Audio/Audiobook, desc: "Hangoskönyv", default: true}
|
||||
- {id: 27, cat: Books/EBook, desc: "Könyv/Hun", default: true}
|
||||
- {id: 50, cat: Books/EBook, desc: "Könyv/Eng", default: true}
|
||||
- {id: 69, cat: TV/Anime, desc: "Mese/SD", default: true}
|
||||
- {id: 68, cat: TV/Anime, desc: "Mese/DVD", default: true}
|
||||
- {id: 91, cat: TV/Anime, desc: "Mese/HD", default: true}
|
||||
@@ -35,19 +41,13 @@ caps:
|
||||
- {id: 84, cat: Audio/Lossless, desc: "Lossless/Hun", default: true}
|
||||
- {id: 71, cat: Audio/Lossless, desc: "Lossless/Eng", default: true}
|
||||
- {id: 31, cat: PC/Games, desc: "Játék/PC", default: true}
|
||||
- {id: 54, cat: Console, desc: "Játék/Konzol", default: true}
|
||||
- {id: 81, cat: PC/0day, desc: "Program/PC", default: true}
|
||||
- {id: 67, cat: PC/Mobile-Android, desc: "Program/Mobil", default: true}
|
||||
- {id: 49, cat: PC/0day, desc: "Program/Rip", default: true}
|
||||
- {id: 27, cat: Books/EBook, desc: "Könyv/Hun", default: true}
|
||||
- {id: 50, cat: Books/EBook, desc: "Könyv/Eng", default: true}
|
||||
- {id: 14, cat: PC, desc: "Program/Egyéb", default: true}
|
||||
- {id: 65, cat: Other, desc: "Egyéb", default: true}
|
||||
- {id: 33, cat: XXX/SD, desc: "SD/XXX", default: false}
|
||||
- {id: 89, cat: XXX/x264, desc: "HD/XXX", default: false}
|
||||
- {id: 66, cat: XXX/ImageSet, desc: "Képek/XXX", default: false}
|
||||
# the following are no longer in the cat list in the search page, but are still in the profile cat list
|
||||
- {id: 54, cat: Console, desc: "Játék/Konzol", default: true}
|
||||
- {id: 67, cat: PC/Mobile-Android, desc: "Program/Mobil", default: true}
|
||||
- {id: 70, cat: Audio/Audiobook, desc: "Hangoskönyv", default: true}
|
||||
- {id: 97, cat: TV/Anime, desc: "Sorozat/Mese", default: true}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
@@ -99,7 +99,7 @@ login:
|
||||
search:
|
||||
paths:
|
||||
- path: browse.php
|
||||
categories: [85, 86, 15, 16, 17, 19, 83, 82, 94, 95, 92, 93, 64, 24, 22, 58, 69, 68, 91, 25, 26, 84, 71, 31, 81, 49, 27, 50, 14, 65, 54, 67, 70]
|
||||
categories: ["!", 33, 66, 89]
|
||||
inputs:
|
||||
# 0 all, 1 active, 2 deadonly, 3 myuploads, 4 zeroseed, 6 re-seeded
|
||||
incldead: 0
|
||||
@@ -117,22 +117,26 @@ search:
|
||||
# can support genre searching but you need to know the id, eg &genre23=1 for Comedy (id is 23)
|
||||
|
||||
rows:
|
||||
selector: "tr[class^=\"toriadatok_\"]{{ if .Config.freeleech }}:has(i:contains(\"(Free)\")){{ else }}{{ end }}"
|
||||
selector: "tr[class^=\"toriadatok\"]{{ if .Config.freeleech }}:has(i:contains(\"(Free)\")){{ else }}{{ end }}"
|
||||
|
||||
fields:
|
||||
categorydesc:
|
||||
selector: img[src^="pic/kategoria/"]
|
||||
attribute: title
|
||||
title:
|
||||
selector: a.preview
|
||||
selector: font[class="tori"], a.preview
|
||||
_id:
|
||||
selector: td.tori_infok
|
||||
attribute: id
|
||||
optional: true
|
||||
filters:
|
||||
- name: regexp
|
||||
args: (\d+)
|
||||
details:
|
||||
text: "details.php?id={{ .Result._id }}#adatlap"
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
optional: true
|
||||
default: "details.php?id={{ .Result._id }}#adatlap"
|
||||
download:
|
||||
text: "download.php?torrent={{ .Result._id }}"
|
||||
poster:
|
||||
@@ -142,14 +146,14 @@ search:
|
||||
selector: a[href*="imdb.com/title/tt"]
|
||||
attribute: href
|
||||
size:
|
||||
selector: td[id^="tsize_"]
|
||||
selector: td[id^="tsize"]
|
||||
date:
|
||||
# 36 perce
|
||||
# 13 órája és 59 perce
|
||||
# 2 napja és 10 órája
|
||||
# 1 hete és 1 napja
|
||||
# 1 éve és 30 hete
|
||||
selector: td[id^="t_added_"] > span
|
||||
selector: td[id^="t_added"] > span
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["és ", " "]
|
||||
|
@@ -78,7 +78,6 @@ search:
|
||||
sortField: "{{ .Config.sort }}"
|
||||
sortDirection: "{{ .Config.type }}"
|
||||
perPage: 100
|
||||
page: 1
|
||||
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
@@ -87,8 +86,6 @@ search:
|
||||
rows:
|
||||
selector: data
|
||||
attribute: attributes
|
||||
count:
|
||||
selector: meta.total
|
||||
|
||||
fields:
|
||||
category:
|
||||
|
@@ -7,11 +7,8 @@ type: public
|
||||
encoding: UTF-8
|
||||
# use https://tellme.pw/btsow to find the new domain
|
||||
links:
|
||||
- https://btsow.hair/
|
||||
- https://btsow.bond/
|
||||
legacylinks:
|
||||
- https://btsow.surf/
|
||||
- https://btsow.com/
|
||||
- https://btsow.cam/
|
||||
- https://btsow.digital/
|
||||
- https://btsow.shop/
|
||||
- https://btsow.us/
|
||||
@@ -26,6 +23,7 @@ legacylinks:
|
||||
- https://btsow.beauty/
|
||||
- https://btsow.mom/
|
||||
- https://btsow.boats/
|
||||
- https://btsow.hair/
|
||||
|
||||
caps:
|
||||
categories:
|
||||
|
@@ -123,6 +123,7 @@ caps:
|
||||
- {id: 217, cat: Movies, desc: "Tamil-Movies | Remuxes BluRay"}
|
||||
- {id: 218, cat: TV, desc: "TV-Ishara TV"}
|
||||
- {id: 219, cat: TV, desc: "TV-Bengali Tv"}
|
||||
- {id: 220, cat: TV, desc: "TV-Shemaroo Umang"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
|
@@ -89,7 +89,7 @@ login:
|
||||
search:
|
||||
paths:
|
||||
- path: browse.php
|
||||
categories: [1, 2, 8, 7, 16, 15, 14, 13, 4, 3, 18, 17, 23, 19, 20, 24, 21, 22, 35, 36, 25, 30, 31, 33, 32, 29, 28, 27, 26]
|
||||
categories: ["!", 34, 39]
|
||||
- path: browse.php
|
||||
categories: [34, 39]
|
||||
inputs:
|
||||
|
@@ -1,152 +0,0 @@
|
||||
---
|
||||
id: ccfbits
|
||||
name: CCFBits
|
||||
description: "CCFBits is a CHINESE Private Torrent Tracker for HD MOVIES / TV"
|
||||
language: zh-CN
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://ccfbits.org/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
# 高清电影
|
||||
- {id: 39, cat: Movies/HD, desc: "HD-DVD原盘"}
|
||||
- {id: 40, cat: Movies/BluRay, desc: "Blu-ray原盘"}
|
||||
- {id: 30, cat: Movies/HD, desc: "高清电影1080p"}
|
||||
- {id: 2, cat: Movies/HD, desc: "高清电影720p"}
|
||||
# 高清电视剧
|
||||
- {id: 7, cat: TV/HD, desc: "高清欧美剧"}
|
||||
- {id: 32, cat: TV/HD, desc: "高清国产剧"}
|
||||
- {id: 34, cat: TV/HD, desc: "高清港台剧"}
|
||||
- {id: 36, cat: TV/HD, desc: "高清日韩剧"}
|
||||
# 其他高清视频
|
||||
- {id: 12, cat: TV/Documentary, desc: "高清纪录片"}
|
||||
- {id: 11, cat: TV/Sport, desc: "高清体育"}
|
||||
- {id: 23, cat: TV/Anime, desc: "高清动漫"}
|
||||
- {id: 4, cat: Audio/Video, desc: "高清MV/综艺"}
|
||||
# 电视剧集包
|
||||
- {id: 38, cat: TV/HD, desc: "欧美剧包"}
|
||||
- {id: 33, cat: TV/HD, desc: "国产剧包"}
|
||||
- {id: 35, cat: TV/HD, desc: "港台剧包"}
|
||||
- {id: 37, cat: TV/HD, desc: "日韩剧包"}
|
||||
# 非高清和其他
|
||||
- {id: 43, cat: TV/SD, desc: "HR_HDTV"}
|
||||
- {id: 20, cat: Movies/DVD, desc: "DVD"}
|
||||
- {id: 42, cat: Movies/SD, desc: "XviD"}
|
||||
- {id: 3, cat: Audio, desc: "无损音乐"}
|
||||
- {id: 22, cat: Other, desc: "杂项"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid]
|
||||
movie-search: [q, imdbid]
|
||||
music-search: [q]
|
||||
|
||||
settings:
|
||||
- name: username
|
||||
type: text
|
||||
label: Username
|
||||
- name: password
|
||||
type: password
|
||||
label: Password
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
default: added
|
||||
options:
|
||||
added: created
|
||||
seeders: seeders
|
||||
size: size
|
||||
name: title
|
||||
- name: type
|
||||
type: select
|
||||
label: Order requested from site
|
||||
default: DESC
|
||||
options:
|
||||
DESC: desc
|
||||
ASC: asc
|
||||
|
||||
login:
|
||||
path: takelogin.php
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
error:
|
||||
- selector: td.embedded:has(h2:contains("登录失败"))
|
||||
test:
|
||||
path: browse.php
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: browse.php
|
||||
inputs:
|
||||
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
|
||||
search: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{ else }}{{ .Keywords }}{{ end }}"
|
||||
# 0 active 1 incldead 2 deadonly
|
||||
incldead: 1
|
||||
fullsearch: "{{ if .Query.IMDBID }}1{{ else }}{{ end }}"
|
||||
sort: "{{ .Config.sort }}"
|
||||
d: "{{ .Config.sort }}"
|
||||
|
||||
rows:
|
||||
selector: table[border="1"][cellpadding="5"] > tbody > tr:has(a[href^="details.php?id="])
|
||||
|
||||
fields:
|
||||
title:
|
||||
selector: a[title][href^="details.php?id="]
|
||||
attribute: title
|
||||
filters:
|
||||
- name: split
|
||||
args: ["\n", 0]
|
||||
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
|
||||
imdbid:
|
||||
selector: a[href*="imdb.com/title/tt"]
|
||||
attribute: href
|
||||
files:
|
||||
selector: a[href$="&filelist=1"]
|
||||
grabs:
|
||||
selector: a[href^="snatches.php?id"]
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["次", ""]
|
||||
size:
|
||||
selector: td:nth-child(7)
|
||||
remove: a
|
||||
seeders:
|
||||
selector: td:nth-child(8)
|
||||
leechers:
|
||||
selector: td:nth-child(9)
|
||||
date:
|
||||
selector: td:nth-child(5)
|
||||
filters:
|
||||
- name: append
|
||||
args: " +08:00" # CST
|
||||
- name: dateparse
|
||||
args: "yyyy-MM-ddHH:mm:ss zzz"
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"font[color=\"#C20603\"]:contains(\"免费\")": 0
|
||||
"font:has([src=\"/pic/arrowdown1.gif\"]):contains(\"0.5x\")": 0.5
|
||||
"*": 1
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"font:has([src=\"/pic/arrowup1.gif\"]):contains(\"1.5x\")": 1.5
|
||||
"font:has([src=\"/pic/arrowup1.gif\"]):contains(\"2x\")": 2
|
||||
"*": 1
|
||||
description:
|
||||
selector: td:nth-child(2) > table > tbody > tr:nth-child(2)
|
||||
remove: a, img
|
||||
# Discuz! 7.2
|
@@ -2,7 +2,7 @@
|
||||
id: chilebt
|
||||
name: ChileBT
|
||||
description: "ChileBT is a CHILEAN Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
language: es-419
|
||||
language: es-CL
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
|
@@ -6,6 +6,7 @@ language: en-US
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- http://cinefilhd.xyz/
|
||||
- http://cinefilhd.sytes.net/
|
||||
legacylinks:
|
||||
- http://www.cinefilhd.org/
|
||||
|
@@ -10,8 +10,6 @@ links:
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 62, cat: Books/EBook, desc: "EBook"}
|
||||
- {id: 69, cat: Books/Mags, desc: "Zeitung"}
|
||||
- {id: 30, cat: TV/Anime, desc: "Filme - Animie"}
|
||||
- {id: 28, cat: Movies/BluRay, desc: "Filme - Bluray"}
|
||||
- {id: 31, cat: Movies/Other, desc: "Filme - Bollywood"}
|
||||
@@ -22,14 +20,17 @@ caps:
|
||||
- {id: 36, cat: Movies/SD, desc: "Filme - SD"}
|
||||
- {id: 37, cat: Movies/UHD, desc: "Filme - UHD"}
|
||||
- {id: 38, cat: Movies/HD, desc: "Filme - x264"}
|
||||
- {id: 63, cat: Movies, desc: "Fuer Unsere Kleinsten"}
|
||||
- {id: 64, cat: PC/Mobile-Other, desc: "Handy-Stuff"}
|
||||
- {id: 39, cat: Audio, desc: "Musik - Alben"}
|
||||
- {id: 72, cat: Audio, desc: "Musik - Charts"}
|
||||
- {id: 40, cat: Audio, desc: "Musik - Diskografie"}
|
||||
- {id: 75, cat: Audio/Lossless, desc: "Musik - Flac"}
|
||||
- {id: 41, cat: Audio/Audiobook, desc: "Musik - Hoerbuch"}
|
||||
- {id: 74, cat: Audio/Other, desc: "Musik - Kids"}
|
||||
- {id: 42, cat: Audio, desc: "Musik - Mixe"}
|
||||
- {id: 43, cat: Audio/MP3, desc: "Musik - MP3"}
|
||||
- {id: 66, cat: Audio, desc: "Musik - Pack"}
|
||||
- {id: 70, cat: Audio, desc: "Musik - Sampler Deu."}
|
||||
- {id: 71, cat: Audio, desc: "Musik - Sampler Int."}
|
||||
- {id: 76, cat: Audio/Other, desc: "Musik - Soundtrack"}
|
||||
- {id: 44, cat: Audio/Video, desc: "Musik - Video"}
|
||||
- {id: 45, cat: PC, desc: "Programme - Linux"}
|
||||
- {id: 48, cat: PC/Mac, desc: "Programme - Mac"}
|
||||
@@ -39,7 +40,11 @@ caps:
|
||||
- {id: 51, cat: TV, desc: "Serien - Klassiker"}
|
||||
- {id: 52, cat: TV, desc: "Serien - Pack"}
|
||||
- {id: 53, cat: TV/Sport, desc: "Serien - Sport"}
|
||||
- {id: 62, cat: Books/EBook, desc: "EBook"}
|
||||
- {id: 63, cat: Movies, desc: "Fuer Unsere Kleinsten"}
|
||||
- {id: 64, cat: PC/Mobile-Other, desc: "Handy-Stuff"}
|
||||
- {id: 60, cat: Other, desc: "Sonstiges"}
|
||||
- {id: 69, cat: Books/Mags, desc: "Zeitung"}
|
||||
- {id: 54, cat: PC/Mobile-Other, desc: "Spiele - Handy"}
|
||||
- {id: 55, cat: Console, desc: "Spiele - Konsolen"}
|
||||
- {id: 57, cat: PC/Games, desc: "Spiele - Mac / Linux / PC"}
|
||||
|
@@ -90,7 +90,6 @@ search:
|
||||
sortField: "{{ .Config.sort }}"
|
||||
sortDirection: "{{ .Config.type }}"
|
||||
perPage: 100
|
||||
page: 1
|
||||
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
@@ -99,8 +98,6 @@ search:
|
||||
rows:
|
||||
selector: data
|
||||
attribute: attributes
|
||||
count:
|
||||
selector: meta.total
|
||||
|
||||
fields:
|
||||
category:
|
||||
|
@@ -83,7 +83,6 @@ search:
|
||||
sortField: "{{ .Config.sort }}"
|
||||
sortDirection: "{{ .Config.type }}"
|
||||
perPage: 100
|
||||
page: 1
|
||||
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
@@ -92,8 +91,6 @@ search:
|
||||
rows:
|
||||
selector: data
|
||||
attribute: attributes
|
||||
count:
|
||||
selector: meta.total
|
||||
|
||||
fields:
|
||||
category:
|
||||
|
@@ -77,7 +77,10 @@ settings:
|
||||
options:
|
||||
desc: desc
|
||||
asc: asc
|
||||
|
||||
- name: info_news
|
||||
type: info
|
||||
label: Reminder from GF-Free Admin
|
||||
default: "Attention users of third-party software like Jackett or Radarr, Sonarr or similar:<br>Despite your seed downloads you must physically connect to the web site with your browser or risk being <b>Banned for non-participation</b>...<br><ol>We ask :<li>Remain in seed at least 48 hours on the media to avoid H$R</li><li>And much more depending on your storage means</li><li>Participate in the life of the site shout forum...</li><li>Connect regularly to possibly read your private messages.</li></ol>"
|
||||
login:
|
||||
path: /api/torrents
|
||||
method: get
|
||||
@@ -106,11 +109,10 @@ search:
|
||||
imdbId: "{{ .Query.IMDBIDShort }}"
|
||||
tmdbId: "{{ .Query.TMDBID }}"
|
||||
tvdbId: "{{ .Query.TVDBID }}"
|
||||
free: "{{ if .Config.freeleech }}1{{ else }}{{ end }}"
|
||||
free[]: "{{ if .Config.freeleech }}100{{ else }}{{ end }}"
|
||||
sortField: "{{ .Config.sort }}"
|
||||
sortDirection: "{{ .Config.type }}"
|
||||
perPage: 100
|
||||
page: 1
|
||||
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
@@ -119,8 +121,6 @@ search:
|
||||
rows:
|
||||
selector: data
|
||||
attribute: attributes
|
||||
count:
|
||||
selector: meta.total
|
||||
|
||||
fields:
|
||||
category:
|
||||
|
@@ -77,7 +77,7 @@ login:
|
||||
search:
|
||||
paths:
|
||||
- path: torrents.php
|
||||
categories: [1, 4091, 4097, 4098, 4099, 4101, 4104, 4105]
|
||||
categories: ["!", 4103]
|
||||
- path: live.php
|
||||
categories: [4103]
|
||||
inputs:
|
||||
|
@@ -76,7 +76,6 @@ search:
|
||||
sortField: "{{ .Config.sort }}"
|
||||
sortDirection: "{{ .Config.type }}"
|
||||
perPage: 100
|
||||
page: 1
|
||||
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
@@ -85,8 +84,6 @@ search:
|
||||
rows:
|
||||
selector: data
|
||||
attribute: attributes
|
||||
count:
|
||||
selector: meta.total
|
||||
|
||||
fields:
|
||||
categorydesc:
|
||||
|
@@ -82,7 +82,6 @@ search:
|
||||
sortField: "{{ .Config.sort }}"
|
||||
sortDirection: "{{ .Config.type }}"
|
||||
perPage: 100
|
||||
page: 1
|
||||
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
@@ -91,8 +90,6 @@ search:
|
||||
rows:
|
||||
selector: data
|
||||
attribute: attributes
|
||||
count:
|
||||
selector: meta.total
|
||||
|
||||
fields:
|
||||
category:
|
||||
@@ -151,4 +148,4 @@ search:
|
||||
minimumseedtime:
|
||||
# 3 days (as seconds = 3 x 24 x 60 x 60)
|
||||
text: 259200
|
||||
# json UNIT3D 6.3.0
|
||||
# json UNIT3D 6.4.1
|
||||
|
@@ -103,7 +103,7 @@ search:
|
||||
# 1 active, 2 dead, 3 gold, 4 sticky, lots of others
|
||||
incldead: "{{ if .Config.freeleech }}3{{ else }}1{{ end }}"
|
||||
sort: "{{ .Config.sort }}"
|
||||
ascdesc: "{{ .Config.type }}"
|
||||
type: "{{ .Config.type }}"
|
||||
|
||||
keywordsfilters:
|
||||
- name: re_replace # S01 to сезон 1
|
||||
@@ -225,6 +225,23 @@ search:
|
||||
# 1 day ago
|
||||
selector: a[href^="browse.php?date="]
|
||||
filters:
|
||||
# translations for Russian|Romanian|Ukrainian
|
||||
- name: re_replace
|
||||
args: ["(?i)\\b(назад|În urmă)\\b", "ago"]
|
||||
- name: re_replace
|
||||
args: ["(?i)\\b(секунд(а|и|ы)?|secund(a|ă|e))\\b", "seconds"]
|
||||
- name: re_replace
|
||||
args: ["(?i)\\b(минуты?|minute?|хвилини?)\\b", "minutes"]
|
||||
- name: re_replace
|
||||
args: ["(?i)\\b(час(а|ов)?|or(e|ă)|години?)\\b", "hours"]
|
||||
- name: re_replace
|
||||
args: ["(?i)\\b(де?не?(ь|я|й|ів)|zi(le)?)\\b", "days"]
|
||||
- name: re_replace
|
||||
args: ["(?i)\\b(недел(ю|и)|săptămân(ă|i)|тиж(день|ні))\\b", "weeks"]
|
||||
- name: re_replace
|
||||
args: ["(?i)\\b(месяц(а|ев)?|lun(ă|i)|місяц(ь|я|ів))\\b", "months"]
|
||||
- name: re_replace
|
||||
args: ["(?i)\\b(года?|an|р(ік|оки))\\b", "years"]
|
||||
- name: timeago
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
|
@@ -85,13 +85,10 @@ search:
|
||||
sortField: "{{ .Config.sort }}"
|
||||
sortDirection: "{{ .Config.type }}"
|
||||
perPage: 100
|
||||
page: 1
|
||||
|
||||
rows:
|
||||
selector: data
|
||||
attribute: attributes
|
||||
count:
|
||||
selector: meta.total
|
||||
|
||||
fields:
|
||||
categorydesc:
|
||||
|
@@ -1,161 +0,0 @@
|
||||
---
|
||||
id: hdtorrentsit
|
||||
name: HDTorrents.it
|
||||
description: "HDTorrents.it is an ITALIAN Private site for TV / MOVIES"
|
||||
language: it-IT
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://hdtorrents.xyz/ # Italian IP address filtering
|
||||
legacylinks:
|
||||
- http://hdtorrents.it/
|
||||
- http://hdtorrents.xyz/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 2040, cat: Movies/HD}
|
||||
- {id: 5040, cat: TV/HD}
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
|
||||
settings:
|
||||
- name: username
|
||||
type: text
|
||||
label: Username
|
||||
- name: password
|
||||
type: password
|
||||
label: Password
|
||||
- name: ip_filtering
|
||||
type: info
|
||||
label: "IP Filtering"
|
||||
default: "The <b>404 Not Found</b> error means your IP was not accepted. Check the <a href=\"https://check-host.net/check-report/e5b649bkfa\" target=\"_blank\">Locations report</a>, only those with a Status of <b>OK</b> will be accepted."
|
||||
|
||||
login:
|
||||
path: takelogin.php
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
error:
|
||||
- selector: div.error
|
||||
- selector: h1:contains("404 Not Found")
|
||||
test:
|
||||
path: browse.php
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: browse.php
|
||||
method: post
|
||||
allowEmptyInputs: true
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
args: ["[^a-zA-Z0-9]+", "%"]
|
||||
- name: diacritics
|
||||
args: replace
|
||||
- name: re_replace # remove SXXEYY from research
|
||||
args: ["(?i)(S\\d{1,2}E\\d{1,2})", ""]
|
||||
- name: re_replace # remove SXX from research
|
||||
args: ["(?i)(S\\d{1,2})", ""]
|
||||
inputs:
|
||||
ajax: false
|
||||
search: "{{ .Keywords }}"
|
||||
# 0 active 1 incldead 2 onlydead 3 gold 4 no seeders
|
||||
incldead: 0
|
||||
|
||||
rows:
|
||||
selector: tbody#highlighted tr
|
||||
|
||||
fields:
|
||||
year:
|
||||
selector: td:nth-child(2) a:nth-child(1)
|
||||
filters:
|
||||
- name: regexp # find torrent year
|
||||
args: (\d{4})
|
||||
_quality: # (BDRip 1080, BDRip 720p etc)
|
||||
selector: td:nth-child(1) a:nth-child(1) img
|
||||
attribute: alt
|
||||
_audio: # ita audio TAG
|
||||
selector: a[href^="download.php?id="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: name
|
||||
- name: regexp
|
||||
args: (DTS AC3 ITA|DTS ITA|AC3 ITA)
|
||||
- name: re_replace
|
||||
args: ["ITA", ""]
|
||||
title:
|
||||
selector: td:nth-child(2) a:nth-child(1)
|
||||
filters:
|
||||
- name: re_replace # separate title
|
||||
args: ["(\\s+\\/\\s+|\\/\\s+|\\s+\\/|\\/)(.*)\\s\\(", " ("]
|
||||
- name: re_replace # remove (yyyy) from the title
|
||||
args: ["(\\(\\d{4}\\)?\\s?)", ""]
|
||||
- name: re_replace # remove |
|
||||
args: ["(\\s\\||\\s\\/)", ""]
|
||||
- name: re_replace # Stagione X --> S0X
|
||||
args: ["(?i)\\bStagion[ei]\\s?(\\d{1})\\b|\\bSeason'?s?\\s?(\\d{1})\\b", "S0$1$2"]
|
||||
- name: re_replace # Stagione XX --> SXX
|
||||
args: ["(?i)\\bStagion[ei]\\s?(\\d{2,})\\b|\\bSeason'?s?\\s?(\\d{2,})\\b", "S$1$2"]
|
||||
- name: re_replace # / Episodio [YY-YY --> EYY-YY
|
||||
args: ["(?i)(\\s\\/?\\s?Episodi[o]?)\\s\\[", "E"]
|
||||
- name: re_replace # Episodio 4 to E4
|
||||
args: ["(?i)\\b(?:[\\s\\/\\|]?Episodi[o]?\\s?(\\d+)|Puntata\\s?(\\d+))", "E$1$2"]
|
||||
- name: re_replace # / Completa [episodi YY-YY --> EYY-YY
|
||||
args: ["(?i)(\\s\\/\\sCompleta\\s\\[episodi\\s)", "E"]
|
||||
- name: re_replace # remove di YY] | remove /YY]
|
||||
args: ["(?i)(\\sdi\\s\\d{1,2}|\\/\\d{1,2})\\]", " "]
|
||||
- name: re_replace # remove various
|
||||
args: ["(?i)(Serie completa|Completa|\\[in pausa\\])", ""]
|
||||
- name: append
|
||||
args: " ({{ .Result.year }}) [{{ .Result._quality }} - {{ .Result._audio }} ITA]"
|
||||
- name: re_replace # replace multiple spaces
|
||||
args: ["[ ]{2,}", " "]
|
||||
details:
|
||||
selector: td:nth-child(2) a:nth-child(1)
|
||||
attribute: href
|
||||
poster:
|
||||
selector: td:nth-child(2)[onmousemove]
|
||||
attribute: onmousemove
|
||||
filters:
|
||||
- name: regexp
|
||||
args: ".*\\(.*,.*,.*,'(.*?)'\\)"
|
||||
download:
|
||||
selector: a[href^="download.php?id="]
|
||||
attribute: href
|
||||
size:
|
||||
selector: td:nth-child(3)
|
||||
seeders:
|
||||
selector: td:nth-child(4)
|
||||
optional: true
|
||||
default: 1
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["(\\d*) \\(\\+\\d*\\)\n? \\| (\\d*) \\(\\+\\d*\\)", "$1"]
|
||||
leechers:
|
||||
selector: td:nth-child(4)
|
||||
optional: true
|
||||
default: 1
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["(\\d*) \\(\\+\\d*\\)\n? \\| (\\d*) \\(\\+\\d*\\)", "$2"]
|
||||
date:
|
||||
selector: td:nth-child(2) i
|
||||
filters:
|
||||
- name: append
|
||||
args: " +02:00" # EET
|
||||
- name: dateparse
|
||||
args: "yyyy-MM-dd HH:mm:ss zzz"
|
||||
category:
|
||||
case:
|
||||
"a[href^=\"details.php\"]:contains(\"Stagione\")": 5040 # TV/HD
|
||||
"*": 2040 # default to Movies/HD
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img[src="pic/freedownload.gif"]: 0
|
||||
"*": 1
|
||||
uploadvolumefactor:
|
||||
text: 1
|
||||
# engine tbd
|
@@ -21,9 +21,9 @@ caps:
|
||||
- {id: 409, cat: Other, desc: "Misc/其他", default: true}
|
||||
- {id: 408, cat: Audio, desc: "Music/音乐", default: true}
|
||||
# special
|
||||
- {id: 410, cat: Movies, desc: "Video/视频资料", default: true}
|
||||
- {id: 411, cat: Audio, desc: "Audio/音频资料", default: true}
|
||||
- {id: 412, cat: Other, desc: "Other/其他资料", default: true}
|
||||
- {id: 410, cat: Movies, desc: "Video/视频资料", default: false}
|
||||
- {id: 411, cat: Audio, desc: "Audio/音频资料", default: false}
|
||||
- {id: 412, cat: Other, desc: "Other/其他资料", default: false}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
@@ -96,7 +96,7 @@ login:
|
||||
search:
|
||||
paths:
|
||||
- path: torrents.php
|
||||
categories: [401, 402, 403, 404, 405, 406, 407, 408, 409]
|
||||
categories: ["!", 410, 411, 412]
|
||||
- path: special.php
|
||||
categories: [410, 411, 412]
|
||||
inputs:
|
||||
|
@@ -88,7 +88,6 @@ search:
|
||||
sortField: "{{ .Config.sort }}"
|
||||
sortDirection: "{{ .Config.type }}"
|
||||
perPage: 100
|
||||
page: 1
|
||||
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
@@ -99,8 +98,6 @@ search:
|
||||
rows:
|
||||
selector: data
|
||||
attribute: attributes
|
||||
count:
|
||||
selector: meta.total
|
||||
|
||||
fields:
|
||||
category:
|
||||
|
@@ -90,7 +90,6 @@ search:
|
||||
sortField: "{{ .Config.sort }}"
|
||||
sortDirection: "{{ .Config.type }}"
|
||||
perPage: 100
|
||||
page: 1
|
||||
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
@@ -99,8 +98,6 @@ search:
|
||||
rows:
|
||||
selector: data
|
||||
attribute: attributes
|
||||
count:
|
||||
selector: meta.total
|
||||
|
||||
fields:
|
||||
categorydesc:
|
||||
|
@@ -2,7 +2,7 @@
|
||||
id: korsar
|
||||
name: Korsar
|
||||
description: "Korsar is a RUSSIAN Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
language: ru-ru
|
||||
language: ru-RU
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
|
@@ -136,6 +136,8 @@ search:
|
||||
category:
|
||||
selector: a[href^="torrents.php?cat="]
|
||||
attribute: href
|
||||
optional: true
|
||||
default: 95
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
|
@@ -121,7 +121,7 @@ search:
|
||||
# https://www.last-torrents.org/externalid?searchex=tt5834760&search_by=imdbid
|
||||
# cannot support imdbid or tmdbid searches while using path category filters
|
||||
- path: browse.php
|
||||
categories: [1, 2, 5, 6, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 24, 25, 26, 27, 28, 30, 31, 32, 33, 42, 43, 44, 49, 51, 54, 55, 56, 57, 58, 59, 60, 61, 62, 81, 82]
|
||||
categories: ["!", 27, 60]
|
||||
- path: browseadult.php
|
||||
categories: [27, 60]
|
||||
|
||||
|
@@ -94,7 +94,6 @@ search:
|
||||
sortField: "{{ .Config.sort }}"
|
||||
sortDirection: "{{ .Config.type }}"
|
||||
perPage: 100
|
||||
page: 1
|
||||
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
@@ -103,8 +102,6 @@ search:
|
||||
rows:
|
||||
selector: data
|
||||
attribute: attributes
|
||||
count:
|
||||
selector: meta.total
|
||||
|
||||
fields:
|
||||
category:
|
||||
|
@@ -1,172 +0,0 @@
|
||||
---
|
||||
id: lightning-tor
|
||||
name: Lightning-Tor
|
||||
description: "Lightning-Tor is a DUTCH Semi-Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
language: nl-NL
|
||||
type: semi-private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://lightning-tor.org/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
# the search pull down cats disagrees with the prior category count links, so merged the two lists, with count overriding pull
|
||||
- {id: 2, cat: Movies/DVD, desc: "DVD Retail"}
|
||||
- {id: 17, cat: Movies/Other, desc: "DVD Promo/R5"}
|
||||
- {id: 3, cat: Audio/Video, desc: "DVD Muziek"}
|
||||
- {id: 4, cat: Movies/SD, desc: " DVD Cam"}
|
||||
- {id: 18, cat: Movies/Other, desc: "DVD Kinderen"}
|
||||
- {id: 6, cat: TV, desc: "Tv Serie"}
|
||||
- {id: 19, cat: XXX/DVD, desc: "DVD XXX"}
|
||||
- {id: 20, cat: TV/Documentary, desc: "Docomentaire"}
|
||||
- {id: 45, cat: Audio/Video, desc: "Cabaret Div."}
|
||||
- {id: 9, cat: PC/Games, desc: "Spelletjes Pc"}
|
||||
- {id: 10, cat: Console/NDS, desc: "Ps2/NDS"}
|
||||
- {id: 11, cat: Console/XBox, desc: "XBoX"}
|
||||
- {id: 22, cat: Console/Wii, desc: "Wii"}
|
||||
- {id: 8, cat: Audio, desc: "Muziek Album"}
|
||||
- {id: 23, cat: Audio/Other, desc: "Muziek Diversen"}
|
||||
- {id: 1, cat: Other, desc: "Kinderen Diversen"}
|
||||
- {id: 13, cat: Other, desc: "Afbeeldingen"}
|
||||
- {id: 14, cat: PC/Mobile-Other, desc: "GSM/Navigatie"}
|
||||
- {id: 7, cat: PC, desc: "Software PC"}
|
||||
- {id: 12, cat: PC/0day, desc: "Microsoft"}
|
||||
- {id: 21, cat: PC/Mobile-Other, desc: "Software PDA"}
|
||||
- {id: 5, cat: Movies/SD, desc: "Xvid Film"}
|
||||
- {id: 15, cat: XXX/SD, desc: "Xvid XXX"}
|
||||
- {id: 24, cat: Other, desc: "Xvid Diversen"}
|
||||
- {id: 16, cat: Other/Misc, desc: "Overigen"}
|
||||
- {id: 50, cat: Books, desc: "E-books"}
|
||||
- {id: 48, cat: Movies/HD, desc: "movies 264"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
music-search: [q]
|
||||
book-search: [q]
|
||||
|
||||
settings:
|
||||
- name: username
|
||||
type: text
|
||||
label: Username
|
||||
- name: password
|
||||
type: password
|
||||
label: Password
|
||||
- name: thankyou
|
||||
type: text
|
||||
label: Thank You Comment
|
||||
- name: info
|
||||
type: info
|
||||
label: Thank you comment
|
||||
default: This site requires you to leave a Thank You comment before you can download. Enter your personalised comment above.
|
||||
|
||||
login:
|
||||
path: takelogin.php
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
error:
|
||||
- selector: table.main:contains("Aanmelden mislukt")
|
||||
test:
|
||||
path: index.php
|
||||
selector: a[href="logout.php"]
|
||||
|
||||
download:
|
||||
before:
|
||||
# https://lightning-tor.org/comment.php?action=add&tid=166386
|
||||
path: comment.php
|
||||
method: post
|
||||
inputs:
|
||||
action: add
|
||||
tid: "{{ .DownloadUri.Query.id }}"
|
||||
text: "{{ .Config.thankyou }}"
|
||||
selectors:
|
||||
- selector: a[href^="download.php?id="]
|
||||
attribute: href
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: browse.php
|
||||
inputs:
|
||||
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
|
||||
search: "{{ .Keywords }}"
|
||||
incldead: 1
|
||||
# does not support imdbid search and does not return imdb link in results
|
||||
keywordsfilters:
|
||||
- name: re_replace # S01E02 to 1 2
|
||||
args: ["(?i)\\bS0*(\\d{1,2})\\s*E0*(\\d{1,2})\\b", "$1 $2"]
|
||||
- name: re_replace # S01 to 1
|
||||
args: ["(?i)\\bS0*(\\d{1,2})\\b", "$1"]
|
||||
|
||||
rows:
|
||||
selector: table.embedded[width="99%"][border="1"][cellspacing="0"][cellpadding="0"]
|
||||
filters:
|
||||
- name: andmatch
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: a[href^="browse.php?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
title:
|
||||
selector: a[href^="details.php?id="]
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["(?i)(seizoen\\s*)(\\d{1,2})\\s*(tot|t\/m|&|\\+)\\s*(\\d{1,2})", "S$2-$4"]
|
||||
- name: re_replace
|
||||
args: ["(?i)(seizoen\\s*)(\\d{1,2})", "S$2"]
|
||||
- name: re_replace
|
||||
args: ["(?i)(afl.\\s*|aflevering\\s*|ep.\\s*)(\\d{1,2})\\s*(tot|t\/m|&|\\+)\\s*(\\d{1,2})", "E$2-$4"]
|
||||
- name: re_replace
|
||||
args: ["(?i)(afl.\\s*|aflevering\\s*|ep.\\s*)(\\d{1,2})", "E$2"]
|
||||
- name: re_replace
|
||||
args: ["(?i)compleet", "Complete"]
|
||||
details:
|
||||
# using the download link because the details link has an error
|
||||
selector: a[href^="download.php?id="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["download", "details"]
|
||||
download:
|
||||
# need to say thanks first
|
||||
text: "{{ .Result.details }}"
|
||||
size:
|
||||
selector: a[href^="details_bestanden.php?torrent_id="]
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "(.+?) in"
|
||||
files:
|
||||
selector: a[href^="details_bestanden.php?torrent_id="]
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "in (\\d+) bestan"
|
||||
grabs:
|
||||
selector: table table tr:nth-child(2) td:nth-child(1)
|
||||
date:
|
||||
selector: table tr:nth-child(3) td:nth-child(7)
|
||||
filters:
|
||||
- name: regexp
|
||||
args: (\d+)
|
||||
- name: append
|
||||
args: " hours ago"
|
||||
- name: timeago
|
||||
seeders:
|
||||
selector: table tr:nth-child(3) td:nth-child(5) font b
|
||||
optional: true
|
||||
default: 0
|
||||
leechers:
|
||||
selector: table tr:nth-child(3) td:nth-child(5) font b:nth-child(2)
|
||||
optional: true
|
||||
default: 0
|
||||
downloadvolumefactor:
|
||||
text: 0
|
||||
uploadvolumefactor:
|
||||
text: 1
|
||||
minimumratio:
|
||||
text: 1.0
|
||||
# engine n/a
|
@@ -1,7 +1,7 @@
|
||||
---
|
||||
id: locadora
|
||||
name: Locadora
|
||||
description: "Locadora is a Brazilian tracker for Movies and TV Shows"
|
||||
description: "Locadora is a BRAZILIAN Private Tracker for MOVIES and TV"
|
||||
language: pt-BR
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
@@ -12,15 +12,16 @@ legacylinks:
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: Movies}
|
||||
- {id: 2, cat: TV}
|
||||
- {id: 6, cat: TV/Anime}
|
||||
- {id: 7, cat: Movies, desc: "Concerts"}
|
||||
- {id: 1, cat: Movies, desc: "Filmes"}
|
||||
- {id: 2, cat: TV, desc: "Series"}
|
||||
- {id: 6, cat: TV/Anime, desc: "Animes"}
|
||||
- {id: 7, cat: Audio/Video, desc: "Shows"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid, tvdbid, tmdbid]
|
||||
movie-search: [q, imdbid, tmdbid]
|
||||
music-search: [q]
|
||||
|
||||
settings:
|
||||
- name: apikey
|
||||
@@ -83,7 +84,6 @@ search:
|
||||
sortField: "{{ .Config.sort }}"
|
||||
sortDirection: "{{ .Config.type }}"
|
||||
perPage: 100
|
||||
page: 1
|
||||
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
@@ -92,8 +92,6 @@ search:
|
||||
rows:
|
||||
selector: data
|
||||
attribute: attributes
|
||||
count:
|
||||
selector: meta.total
|
||||
|
||||
fields:
|
||||
category:
|
||||
|
@@ -88,7 +88,6 @@ search:
|
||||
sortField: "{{ .Config.sort }}"
|
||||
sortDirection: "{{ .Config.type }}"
|
||||
perPage: 100
|
||||
page: 1
|
||||
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
@@ -97,8 +96,6 @@ search:
|
||||
rows:
|
||||
selector: data
|
||||
attribute: attributes
|
||||
count:
|
||||
selector: meta.total
|
||||
|
||||
fields:
|
||||
category:
|
||||
|
@@ -82,11 +82,11 @@ login:
|
||||
search:
|
||||
paths:
|
||||
- path: letoltes.php
|
||||
categories: [4, 5, 48, 50, 75, 76, 26, 25, 58, 59, 42, 51, 38, 24, 85, 87, 47, 36, 6, 7, 56, 33, 44, 28, 32, 30, 53, 74, 40, 41, 34, 35, 46]
|
||||
categories: ["!", 70, 39, 57]
|
||||
inputs:
|
||||
tipus: 1
|
||||
- path: letoltes.php
|
||||
categories: [4, 5, 48, 50, 75, 76, 26, 25, 58, 59, 42, 51, 38, 24, 85, 87, 47, 36, 6, 7, 56, 33, 44, 28, 32, 30, 53, 74, 40, 41, 34, 35, 46]
|
||||
categories: ["!", 70, 39, 57]
|
||||
inputs:
|
||||
tipus: 2
|
||||
- path: xxx.php
|
||||
|
@@ -16,6 +16,8 @@ caps:
|
||||
- {id: 1, cat: PC, desc: "Applications"}
|
||||
- {id: 2, cat: Books, desc: "Books Ebooks & mags"}
|
||||
- {id: 59, cat: Movies/SD, desc: "Cams"}
|
||||
- {id: 52, cat: Audio, desc: "DJ"}
|
||||
- {id: 53, cat: Audio, desc: "DJ PACKS"}
|
||||
- {id: 46, cat: Books, desc: "Documents"}
|
||||
- {id: 47, cat: Audio/Lossless, desc: "Flac/HD Audio"}
|
||||
- {id: 61, cat: Console, desc: "Games"}
|
||||
|
@@ -87,7 +87,6 @@ search:
|
||||
sortField: "{{ .Config.sort }}"
|
||||
sortDirection: "{{ .Config.type }}"
|
||||
perPage: 100
|
||||
page: 1
|
||||
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
@@ -96,8 +95,6 @@ search:
|
||||
rows:
|
||||
selector: data
|
||||
attribute: attributes
|
||||
count:
|
||||
selector: meta.total
|
||||
|
||||
fields:
|
||||
category:
|
||||
|
@@ -5,7 +5,7 @@ description: "M-Team TP (MTTP) is a CHINESE Private Torrent Tracker for HD MOVIE
|
||||
language: zh-CN
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
requestDelay: 3
|
||||
requestDelay: 4
|
||||
links:
|
||||
- https://kp.m-team.cc/
|
||||
legacylinks:
|
||||
|
@@ -5,7 +5,7 @@ description: "This indexer uses a cookie login for M-Team TP (MTTP) for those th
|
||||
language: zh-CN
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
requestDelay: 3
|
||||
requestDelay: 4
|
||||
links:
|
||||
- https://kp.m-team.cc/
|
||||
legacylinks:
|
||||
|
@@ -89,7 +89,6 @@ search:
|
||||
sortField: "{{ .Config.sort }}"
|
||||
sortDirection: "{{ .Config.type }}"
|
||||
perPage: 100
|
||||
page: 1
|
||||
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
@@ -98,8 +97,6 @@ search:
|
||||
rows:
|
||||
selector: data
|
||||
attribute: attributes
|
||||
count:
|
||||
selector: meta.total
|
||||
|
||||
fields:
|
||||
category:
|
||||
|
@@ -21,10 +21,10 @@ caps:
|
||||
- {id: 409, cat: Other, desc: "Misc/其他", default: true}
|
||||
- {id: 408, cat: Audio, desc: "Music/音乐", default: true}
|
||||
# kids zone
|
||||
- {id: 908, cat: TV, desc: "TV Series/剧集", default: true}
|
||||
- {id: 909, cat: Movies, desc: "Movies/电影", default: true}
|
||||
- {id: 905, cat: Audio/Video, desc: "MusicVideo/MV", default: true}
|
||||
- {id: 907, cat: Audio, desc: "Music/音乐", default: true}
|
||||
- {id: 908, cat: TV, desc: "TV Series/剧集", default: false}
|
||||
- {id: 909, cat: Movies, desc: "Movies/电影", default: false}
|
||||
- {id: 905, cat: Audio/Video, desc: "MusicVideo/MV", default: false}
|
||||
- {id: 907, cat: Audio, desc: "Music/音乐", default: false}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
@@ -79,7 +79,7 @@ login:
|
||||
search:
|
||||
paths:
|
||||
- path: torrents.php
|
||||
categories: [401, 402, 403, 404, 405, 406, 407, 408, 409]
|
||||
categories: ["!", 905, 907, 908, 909]
|
||||
- path: special.php
|
||||
categories: [905, 907, 908, 909]
|
||||
inputs:
|
||||
|
@@ -88,7 +88,6 @@ search:
|
||||
sortField: "{{ .Config.sort }}"
|
||||
sortDirection: "{{ .Config.type }}"
|
||||
perPage: 100
|
||||
page: 1
|
||||
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
@@ -97,8 +96,6 @@ search:
|
||||
rows:
|
||||
selector: data
|
||||
attribute: attributes
|
||||
count:
|
||||
selector: meta.total
|
||||
|
||||
fields:
|
||||
category:
|
||||
|
@@ -5,6 +5,8 @@ description: "PTFiles (PTF) is a Private site for TV / MOVIES / GENERAL"
|
||||
language: en-US
|
||||
type: private
|
||||
encoding: windows-1252
|
||||
certificates:
|
||||
- 69901C31636B4D413903F4B32573ED6E8F5961FE # expired 26 May 2023
|
||||
links:
|
||||
- https://ptfiles.net/
|
||||
|
||||
@@ -42,13 +44,12 @@ caps:
|
||||
book-search: [q]
|
||||
|
||||
settings:
|
||||
- name: cookie
|
||||
- name: username
|
||||
type: text
|
||||
label: Cookie
|
||||
- name: info
|
||||
type: info
|
||||
label: How to get the Cookie
|
||||
default: "<ol><li>Login to this tracker with your browser</li><li>Open the <b>DevTools</b> panel by pressing <b>F12</b></li><li>Select the <b>Network</b> tab</li><li>Click on the <b>Doc</b> button (Chrome Browser) or <b>HTML</b> button (FireFox)</li><li>Refresh the page by pressing <b>F5</b></li><li>Click on the first row entry</li><li>Select the <b>Headers</b> tab on the Right panel</li><li>Find <b>'cookie:'</b> in the <b>Request Headers</b> section</li><li><b>Select</b> and <b>Copy</b> the whole cookie string <i>(everything after 'cookie: ')</i> and <b>Paste</b> here.</li></ol>"
|
||||
label: Username
|
||||
- name: password
|
||||
type: password
|
||||
label: Password
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
@@ -71,9 +72,20 @@ settings:
|
||||
asc: asc
|
||||
|
||||
login:
|
||||
method: cookie
|
||||
path: loginproc/
|
||||
method: form
|
||||
form: form#login
|
||||
inputs:
|
||||
cookie: "{{ .Config.cookie }}"
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
force_ssl: on
|
||||
ssl: ""
|
||||
selectorinputs:
|
||||
hash:
|
||||
selector: input[name="hash"]
|
||||
attribute: value
|
||||
error:
|
||||
- selector: p.error:contains(strong)
|
||||
test:
|
||||
path: browse.php
|
||||
|
||||
|
@@ -95,7 +95,7 @@ login:
|
||||
search:
|
||||
paths:
|
||||
- path: torrents.php
|
||||
categories: [401, 402, 403, 404, 405, 406, 408, 409, 411, 412, 413, 420, 430, 431, 432, 450, 451, 490]
|
||||
categories: ["!", 440, 441, 442, 443, 444, 445, 446, 447]
|
||||
- path: adults.php
|
||||
categories: [440, 441, 442, 443, 444, 445, 446, 447]
|
||||
inputs:
|
||||
|
@@ -112,7 +112,6 @@ search:
|
||||
sortField: "{{ .Config.sort }}"
|
||||
sortDirection: "{{ .Config.type }}"
|
||||
perPage: 100
|
||||
page: 1
|
||||
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
@@ -121,8 +120,6 @@ search:
|
||||
rows:
|
||||
selector: data
|
||||
attribute: attributes
|
||||
count:
|
||||
selector: meta.total
|
||||
|
||||
fields:
|
||||
categorydesc:
|
||||
|
@@ -98,7 +98,6 @@ search:
|
||||
sortField: "{{ .Config.sort }}"
|
||||
sortDirection: "{{ .Config.type }}"
|
||||
perPage: 100
|
||||
page: 1
|
||||
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
@@ -107,8 +106,6 @@ search:
|
||||
rows:
|
||||
selector: data
|
||||
attribute: attributes
|
||||
count:
|
||||
selector: meta.total
|
||||
|
||||
fields:
|
||||
category:
|
||||
|
@@ -86,7 +86,6 @@ search:
|
||||
sortField: "{{ .Config.sort }}"
|
||||
sortDirection: "{{ .Config.type }}"
|
||||
perPage: 100
|
||||
page: 1
|
||||
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
@@ -95,8 +94,6 @@ search:
|
||||
rows:
|
||||
selector: data
|
||||
attribute: attributes
|
||||
count:
|
||||
selector: meta.total
|
||||
|
||||
fields:
|
||||
category:
|
||||
|
@@ -82,7 +82,6 @@ search:
|
||||
sortField: "{{ .Config.sort }}"
|
||||
sortDirection: "{{ .Config.type }}"
|
||||
perPage: 100
|
||||
page: 1
|
||||
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
@@ -91,8 +90,6 @@ search:
|
||||
rows:
|
||||
selector: data
|
||||
attribute: attributes
|
||||
count:
|
||||
selector: meta.total
|
||||
|
||||
fields:
|
||||
category:
|
||||
|
@@ -5,8 +5,6 @@ description: "RPTorrents is a Private tracker for MOVIES / TV / GENERAL"
|
||||
language: en-US
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
certificates:
|
||||
- e674aa17bf38af08a119626025298e1bb4d2d5cb # Expired 29 April 2023
|
||||
links:
|
||||
- https://rptorrents.com/
|
||||
|
||||
|
@@ -16,7 +16,8 @@
|
||||
"type": "string"
|
||||
},
|
||||
"language": {
|
||||
"type": "string"
|
||||
"type": "string",
|
||||
"enum": ["af", "af-ZA", "ar", "ar-AE", "ar-BH", "ar-DZ", "ar-EG", "ar-IQ", "ar-JO", "ar-KW", "ar-LB", "ar-LY", "ar-MA", "ar-OM", "ar-QA", "ar-SA", "ar-SY", "ar-TN", "ar-YE", "az", "az-AZ", "be", "be-BY", "bg", "bg-BG", "bs-BA", "ca", "ca-ES", "cs", "cs-CZ", "cy", "cy-GB", "da", "da-DK", "de", "de-AT", "de-CH", "de-DE", "de-LI", "de-LU", "dv", "dv-MV", "el", "el-GR", "en", "en-AU", "en-BZ", "en-CA", "en-CB", "en-GB", "en-IE", "en-JM", "en-NZ", "en-PH", "en-TT", "en-US", "en-ZA", "en-ZW", "eo", "es", "es-AR", "es-BO", "es-CL", "es-CO", "es-CR", "es-DO", "es-EC", "es-ES", "es-GT", "es-HN", "es-MX", "es-NI", "es-PA", "es-PE", "es-PR", "es-PY", "es-SV", "es-UY", "es-VE", "et", "et-EE", "eu", "eu-ES", "fa", "fa-IR", "fi", "fi-FI", "fo", "fo-FO", "fr", "fr-BE", "fr-CA", "fr-CH", "fr-FR", "fr-LU", "fr-MC", "gl", "gl-ES", "gu", "gu-IN", "he", "he-IL", "hi", "hi-IN", "hr", "hr-BA", "hr-HR", "hu", "hu-HU", "hy", "hy-AM", "id", "id-ID", "is", "is-IS", "it", "it-CH", "it-IT", "ja", "ja-JP", "ka", "ka-GE", "kk", "kk-KZ", "kn", "kn-IN", "ko", "ko-KR", "kok", "kok-IN", "ky", "ky-KG", "lt", "lt-LT", "lv", "lv-LV", "mi", "mi-NZ", "mk", "mk-MK", "mn", "mn-MN", "mr", "mr-IN", "ms", "ms-BN", "ms-MY", "mt", "mt-MT", "nb", "nb-NO", "nl", "nl-BE", "nl-NL", "nn-NO", "ns", "ns-ZA", "pa", "pa-IN", "pl", "pl-PL", "ps", "ps-AR", "pt", "pt-BR", "pt-PT", "qu", "qu-BO", "qu-EC", "qu-PE", "ro", "ro-RO", "ru", "ru-RU", "sa", "sa-IN", "se", "se-FI", "se-NO", "se-SE", "sk", "sk-SK", "sl", "sl-SI", "sq", "sq-AL", "sr-BA", "sr-SP", "sv", "sv-FI", "sv-SE", "sw", "sw-KE", "syr", "syr-SY", "ta", "ta-IN", "te", "te-IN", "th", "th-TH", "tl", "tl-PH", "tn", "tn-ZA", "tr", "tr-TR", "tt", "tt-RU", "ts", "uk", "uk-UA", "ur", "ur-PK", "uz", "uz-UZ", "vi", "vi-VN", "xh", "xh-ZA", "zh", "zh-CN", "zh-HK", "zh-MO", "zh-SG", "zh-TW", "zu", "zu-ZA", "af", "af-ZA", "ar", "ar-AE", "ar-BH", "ar-DZ", "ar-EG", "ar-IQ", "ar-JO", "ar-KW", "ar-LB", "ar-LY", "ar-MA", "ar-OM", "ar-QA", "ar-SA", "ar-SY", "ar-TN", "ar-YE", "az", "az-AZ", "be", "be-BY", "bg", "bg-BG", "bs-BA", "ca", "ca-ES", "cs", "cs-CZ", "cy", "cy-GB", "da", "da-DK", "de", "de-AT", "de-CH", "de-DE", "de-LI", "de-LU", "dv", "dv-MV", "el", "el-GR", "en", "en-AU", "en-BZ", "en-CA", "en-CB", "en-GB", "en-IE", "en-JM", "en-NZ", "en-PH", "en-TT", "en-US", "en-ZA", "en-ZW", "eo", "es", "es-AR", "es-BO", "es-CL", "es-CO", "es-CR", "es-DO", "es-EC", "es-ES", "es-GT", "es-HN", "es-MX", "es-NI", "es-PA", "es-PE", "es-PR", "es-PY", "es-SV", "es-UY", "es-VE", "et", "et-EE", "eu", "eu-ES", "fa", "fa-IR", "fi", "fi-FI", "fo", "fo-FO", "fr", "fr-BE", "fr-CA", "fr-CH", "fr-FR", "fr-LU", "fr-MC", "gl", "gl-ES", "gu", "gu-IN", "he", "he-IL", "hi", "hi-IN", "hr", "hr-BA", "hr-HR", "hu", "hu-HU", "hy", "hy-AM", "id", "id-ID", "is", "is-IS", "it", "it-CH", "it-IT", "ja", "ja-JP", "ka", "ka-GE", "kk", "kk-KZ", "kn", "kn-IN", "ko", "ko-KR", "kok", "kok-IN", "ky", "ky-KG", "lt", "lt-LT", "lv", "lv-LV", "mi", "mi-NZ", "mk", "mk-MK", "mn", "mn-MN", "mr", "mr-IN", "ms", "ms-BN", "ms-MY", "mt", "mt-MT", "nb", "nb-NO", "nl", "nl-BE", "nl-NL", "nn-NO", "ns", "ns-ZA", "pa", "pa-IN", "pl", "pl-PL", "ps", "ps-AR", "pt", "pt-BR", "pt-PT", "qu", "qu-BO", "qu-EC", "qu-PE", "ro", "ro-RO", "ru", "ru-RU", "sa", "sa-IN", "se", "se-FI", "se-NO", "se-SE", "sk", "sk-SK", "sl", "sl-SI", "sq", "sq-AL", "sr-BA", "sr-SP", "sv", "sv-FI", "sv-SE", "sw", "sw-KE", "syr", "syr-SY", "ta", "ta-IN", "te", "te-IN", "th", "th-TH", "tl", "tl-PH", "tn", "tn-ZA", "tr", "tr-TR", "tt", "tt-RU", "ts", "uk", "uk-UA", "ur", "ur-PK", "uz", "uz-UZ", "vi", "vi-VN", "xh", "xh-ZA", "zh", "zh-CN", "zh-HK", "zh-MO", "zh-SG", "zh-TW", "zu", "zu-ZA"]
|
||||
},
|
||||
"type": {
|
||||
"type": "string",
|
||||
|
@@ -90,7 +90,6 @@ search:
|
||||
sortField: "{{ .Config.sort }}"
|
||||
sortDirection: "{{ .Config.type }}"
|
||||
perPage: 100
|
||||
page: 1
|
||||
|
||||
keywordsfilters:
|
||||
- name: diacritics
|
||||
@@ -105,8 +104,6 @@ search:
|
||||
rows:
|
||||
selector: data
|
||||
attribute: attributes
|
||||
count:
|
||||
selector: meta.total
|
||||
|
||||
fields:
|
||||
category:
|
||||
|
@@ -1,153 +0,0 @@
|
||||
---
|
||||
id: sharkpt
|
||||
name: SharkPT
|
||||
description: "SharkPT is a CHINESE Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
language: zh-CN
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://sharkpt.net/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 401, cat: Movies, desc: "Movies/电影"}
|
||||
- {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: "MusicVideo/音乐视频"}
|
||||
- {id: 407, cat: TV/Sport, desc: "Sports/体育"}
|
||||
- {id: 408, cat: Audio, desc: "Music/HQ Audio"}
|
||||
- {id: 409, cat: Other, desc: "Misc/其他"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid, doubanid]
|
||||
movie-search: [q, imdbid, doubanid]
|
||||
music-search: [q]
|
||||
|
||||
settings:
|
||||
- name: cookie
|
||||
type: text
|
||||
label: Cookie
|
||||
- name: info
|
||||
type: info
|
||||
label: How to get the Cookie
|
||||
default: "<ol><li>Login to this tracker with your browser</li><li>Open the <b>DevTools</b> panel by pressing <b>F12</b></li><li>Select the <b>Network</b> tab</li><li>Click on the <b>Doc</b> button (Chrome Browser) or <b>HTML</b> button (FireFox)</li><li>Refresh the page by pressing <b>F5</b></li><li>Click on the first row entry</li><li>Select the <b>Headers</b> tab on the Right panel</li><li>Find <b>'cookie:'</b> in the <b>Request Headers</b> section</li><li><b>Select</b> and <b>Copy</b> the whole cookie string <i>(everything after 'cookie: ')</i> and <b>Paste</b> here.</li></ol>"
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
default: 4
|
||||
options:
|
||||
4: created
|
||||
7: seeders
|
||||
5: size
|
||||
1: title
|
||||
- name: type
|
||||
type: select
|
||||
label: Order requested from site
|
||||
default: desc
|
||||
options:
|
||||
desc: desc
|
||||
asc: asc
|
||||
- name: info_tpp
|
||||
type: info
|
||||
label: Results Per Page
|
||||
default: For best results, change the <b>Torrents per page:</b> setting to <b>100</b> on your account profile.
|
||||
|
||||
login:
|
||||
method: cookie
|
||||
inputs:
|
||||
cookie: "{{ .Config.cookie }}"
|
||||
test:
|
||||
path: index.php
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: torrents.php
|
||||
inputs:
|
||||
$raw: "{{ range .Categories }}cat{{.}}=1&{{end}}"
|
||||
search: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{ else }}{{ end }}{{ if or .Query.IMDBID .Query.DoubanID }} {{ else }}{{ .Keywords }}{{ end }}{{ if .Query.DoubanID }}{{ .Query.DoubanID }}{{ else }}{{ end }}"
|
||||
# 0 incldead, 1 active, 2 dead
|
||||
incldead: 0
|
||||
# 0 all, 1 normal, 2 free, 3 2x, 4 2xfree, 5 50%, 6 2x50%, 7 30%
|
||||
spstate: "{{ if .Config.freeleech }}2{{ else }}0{{ end }}"
|
||||
# 0 title, 1 descr, 3 uploader, 4 imdburl (4 does not appear to work)
|
||||
search_area: "{{ if or .Query.IMDBID .Query.DoubanID }}1{{ else }}0{{ end }}"
|
||||
# 0 AND, 1 OR, 2 exact
|
||||
search_mode: 0
|
||||
sort: "{{ .Config.sort }}"
|
||||
type: "{{ .Config.type }}"
|
||||
notnewword: 1
|
||||
|
||||
rows:
|
||||
selector: div.torrent-item
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: div.torrent-category
|
||||
case:
|
||||
img[src$="movies64.png"]: 401
|
||||
img[src$="tvseries64.png"]: 402
|
||||
img[src$="tvshows64.png"]: 403
|
||||
img[src$="doc64.png"]: 404
|
||||
img[src$="anime64.png"]: 405
|
||||
img[src$="mv64.png"]: 406
|
||||
img[src$="sports64.png"]: 407
|
||||
img[src$="hqaudio64.png"]: 408
|
||||
img[src$="misc64.png"]: 409
|
||||
title:
|
||||
selector: a[href^="details.php?id="]
|
||||
details:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
_id:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: id
|
||||
download:
|
||||
text: "download.php?id={{ .Result._id }}"
|
||||
imdbid:
|
||||
selector: shark-tag-group[onClick*="imdb.com/title/tt"]
|
||||
attribute: onClick
|
||||
doubanid:
|
||||
selector: shark-tag-group[onClick*="movie.douban.com/subject/"]
|
||||
attribute: onClick
|
||||
description:
|
||||
selector: div.torrent-subtitle
|
||||
date:
|
||||
selector: div.torrent-when > span
|
||||
attribute: title
|
||||
filters:
|
||||
- name: append
|
||||
args: " +08:00" # CST
|
||||
- name: dateparse
|
||||
args: "yyyy-MM-dd HH:mm:ss zzz"
|
||||
size:
|
||||
selector: div.torrent-size
|
||||
seeders:
|
||||
selector: div.torrent-seeders
|
||||
leechers:
|
||||
selector: div.torrent-leechers
|
||||
grabs:
|
||||
selector: div.torrent-snatches
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"span.s-tag:contains(\"FREE\")": 0
|
||||
"span.s-tag:contains(\"50%\")": 0.5
|
||||
"span.s-tag:contains(\"30%\")": 0.3
|
||||
"*": 1
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"span.s-tag:contains(\"2X\")": 2
|
||||
"*": 1
|
||||
minimumseedtime:
|
||||
# 7 day (as seconds = 7 x 24 x 60 x 60)
|
||||
text: 604800
|
||||
# NexusPHP Standard v1.5 Beta 4 2010-09-19
|
@@ -120,7 +120,7 @@ download:
|
||||
search:
|
||||
paths:
|
||||
- path: viewno18sb.php
|
||||
categories: [1, 75, 10, 9, 110, 7, 40, 16, 3, 70, 100, 85, 105, 8, 56, 19, 20, 55, 21, 2, 130, 60, 90, 91, 92, 89, 93, 4, 50, 18, 17, 11, 5, 54, 51, 52, 57, 53]
|
||||
categories: ["!", 901, 902, 903, 904, 905, 906, 907, 908, 910, 911, 912]
|
||||
- path: viewbrsb.php
|
||||
categories: [901, 902, 903, 904, 905, 906, 907, 908, 910, 911, 912]
|
||||
inputs:
|
||||
|
@@ -78,7 +78,6 @@ search:
|
||||
sortField: "{{ .Config.sort }}"
|
||||
sortDirection: "{{ .Config.type }}"
|
||||
perPage: 100
|
||||
page: 1
|
||||
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
@@ -87,8 +86,6 @@ search:
|
||||
rows:
|
||||
selector: data
|
||||
attribute: attributes
|
||||
count:
|
||||
selector: meta.total
|
||||
|
||||
fields:
|
||||
category:
|
||||
|
@@ -78,7 +78,6 @@ search:
|
||||
sortField: "{{ .Config.sort }}"
|
||||
sortDirection: "{{ .Config.type }}"
|
||||
perPage: 100
|
||||
page: 1
|
||||
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
@@ -87,8 +86,6 @@ search:
|
||||
rows:
|
||||
selector: data
|
||||
attribute: attributes
|
||||
count:
|
||||
selector: meta.total
|
||||
|
||||
fields:
|
||||
category:
|
||||
|
@@ -16,8 +16,8 @@ caps:
|
||||
- {id: 9, cat: XXX, desc: "xXx"}
|
||||
- {id: 23, cat: Books, desc: "Knihy a Časopisy"}
|
||||
- {id: 25, cat: Other, desc: "Ostatní"}
|
||||
- {id: 5, cat: Movies, desc: "Filmy Kreslené"}
|
||||
- {id: 1, cat: Movies, desc: "Filmy CZ/SK dabing"}
|
||||
- {id: 5, cat: Movies, desc: "Filmy Kreslené"}
|
||||
- {id: 14, cat: Movies/Other, desc: "Filmy Kamera"}
|
||||
- {id: 15, cat: Movies, desc: "Filmy s titulkama"}
|
||||
- {id: 20, cat: Movies/DVD, desc: "Filmy DVD"}
|
||||
@@ -32,6 +32,7 @@ caps:
|
||||
- {id: 37, cat: PC/Games, desc: "Hry na Linux"}
|
||||
- {id: 59, cat: PC/Games, desc: "Hry na Mac"}
|
||||
- {id: 60, cat: PC/Games, desc: "xXx hry (18+)"}
|
||||
- {id: 63, cat: PC/Games, desc: "VR Hry"}
|
||||
- {id: 16, cat: TV, desc: "TV Seriál"}
|
||||
- {id: 17, cat: TV/Documentary, desc: "TV Dokument"}
|
||||
- {id: 42, cat: TV, desc: "TV Pořad"}
|
||||
|
@@ -2,7 +2,7 @@
|
||||
id: superbits
|
||||
name: Superbits
|
||||
description: "Superbits is a SWEDISH Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
language: sv-SW
|
||||
language: sv-SE
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
|
@@ -144,7 +144,7 @@ login:
|
||||
search:
|
||||
paths:
|
||||
- path: torrents.php
|
||||
categories: [409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453]
|
||||
categories: ["!", 435]
|
||||
- path: special.php
|
||||
categories: [435]
|
||||
inputs:
|
||||
|
@@ -90,7 +90,6 @@ search:
|
||||
sortField: "{{ .Config.sort }}"
|
||||
sortDirection: "{{ .Config.type }}"
|
||||
perPage: 100
|
||||
page: 1
|
||||
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
@@ -99,8 +98,6 @@ search:
|
||||
rows:
|
||||
selector: data
|
||||
attribute: attributes
|
||||
count:
|
||||
selector: meta.total
|
||||
|
||||
fields:
|
||||
category:
|
||||
|
@@ -79,7 +79,6 @@ search:
|
||||
sortField: "{{ .Config.sort }}"
|
||||
sortDirection: "{{ .Config.type }}"
|
||||
perPage: 100
|
||||
page: 1
|
||||
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
@@ -88,8 +87,6 @@ search:
|
||||
rows:
|
||||
selector: data
|
||||
attribute: attributes
|
||||
count:
|
||||
selector: meta.total
|
||||
|
||||
fields:
|
||||
category:
|
||||
|
@@ -89,6 +89,7 @@ caps:
|
||||
- {id: 208, cat: Other, desc: "Business : Marketing"}
|
||||
- {id: 25, cat: Other, desc: "Exam Prep / Education"}
|
||||
- {id: 204, cat: Other, desc: "Parapsychology"}
|
||||
- {id: 215, cat: Other, desc: "Sexuality/Seductn/Body Img"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
|
@@ -112,7 +112,6 @@ search:
|
||||
sortField: "{{ .Config.sort }}"
|
||||
sortDirection: "{{ .Config.type }}"
|
||||
perPage: 100
|
||||
page: 1
|
||||
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
@@ -211,4 +210,4 @@ search:
|
||||
minimumseedtime:
|
||||
# 2 days (as seconds = 2 x 24 x 60 x 60)
|
||||
text: 172800
|
||||
# json UNIT3D custom edition 1.0.2 (based on 6.5.0)
|
||||
# json UNIT3D custom edition 1.0.1 (based on 6.5.0)
|
||||
|
@@ -92,7 +92,6 @@ search:
|
||||
sortField: "{{ .Config.sort }}"
|
||||
sortDirection: "{{ .Config.type }}"
|
||||
perPage: 100
|
||||
page: 1
|
||||
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
@@ -101,8 +100,6 @@ search:
|
||||
rows:
|
||||
selector: data
|
||||
attribute: attributes
|
||||
count:
|
||||
selector: meta.total
|
||||
|
||||
fields:
|
||||
category:
|
||||
|
@@ -56,6 +56,7 @@ caps:
|
||||
movie-search: [q]
|
||||
music-search: [q]
|
||||
book-search: [q]
|
||||
allowrawsearch: true
|
||||
|
||||
settings:
|
||||
- name: downloadlink
|
||||
@@ -92,6 +93,11 @@ search:
|
||||
$raw: "{{ range .Categories }}s_cat={{.}}&{{end}}"
|
||||
search: "{{ .Keywords }}"
|
||||
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
args: ["\\W+", " "]
|
||||
- name: trim
|
||||
|
||||
rows:
|
||||
selector: div.inner_container > div:has(p:has(a[href^="/torrent/"])):not(:has(span.__cf_email__))
|
||||
|
||||
|
@@ -1,32 +1,28 @@
|
||||
---
|
||||
id: acervos
|
||||
name: Acervos (API)
|
||||
description: "Acervos is a Brazilian tracker for movies, tv shows, and others."
|
||||
language: pt-BR
|
||||
id: torrenteros-api
|
||||
name: Torrenteros (API)
|
||||
description: "Torrenteros (TTR) is a SPANISH site for MOVIES / TV / GENERAL"
|
||||
language: es-ES
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://acervos.cc/
|
||||
- https://torrenteros.org/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: Movies, desc: "Filmes"}
|
||||
- {id: 2, cat: TV, desc: "Séries"}
|
||||
- {id: 6, cat: TV/Anime, desc: "Animes"}
|
||||
- {id: 3, cat: TV/Documentary, desc: "Documentários"}
|
||||
- {id: 7, cat: Audio/Video, desc: "Shows"}
|
||||
- {id: 4, cat: Console, desc: "Games"}
|
||||
- {id: 8, cat: Other, desc: "Cursos"}
|
||||
- {id: 9, cat: Books, desc: "eBooks / Revistas / Apostilas"}
|
||||
- {id: 5, cat: PC, desc: "Programas"}
|
||||
- {id: 10, cat: Other, desc: "Materiais de Apoio"}
|
||||
- {id: 1, cat: Movies, desc: "Movies"}
|
||||
- {id: 2, cat: TV, desc: "TV"}
|
||||
- {id: 3, cat: Audio, desc: "Music"}
|
||||
- {id: 4, cat: Console, desc: "Game"}
|
||||
- {id: 5, cat: PC, desc: "Application"}
|
||||
- {id: 6, cat: Books, desc: "Libros"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid, tvdbid, tmdbid]
|
||||
movie-search: [q, imdbid, tmdbid]
|
||||
book-search: [q]
|
||||
music-search: [q]
|
||||
book-search: [q]
|
||||
|
||||
settings:
|
||||
- name: apikey
|
||||
@@ -35,7 +31,7 @@ settings:
|
||||
- name: info_key
|
||||
type: info
|
||||
label: About your API key
|
||||
default: "Find or Generate a new API Token by accessing your <a href=\"https://acervos.cc/\" target=\"_blank\">Acervos</a> account <i>My Security</i> page and clicking on the <b>API Token</b> tab."
|
||||
default: "Find or Generate a new API Token by accessing your <a href=\"https://torrenteros.org/\" target=\"_blank\">TTR</a> account <i>My Security</i> page and clicking on the <b>API Token</b> tab."
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
@@ -85,46 +81,26 @@ search:
|
||||
imdbId: "{{ .Query.IMDBIDShort }}"
|
||||
tmdbId: "{{ .Query.TMDBID }}"
|
||||
tvdbId: "{{ .Query.TVDBID }}"
|
||||
free: "{{ if .Config.freeleech }}1{{ else }}{{ end }}"
|
||||
"free[]": "{{ if .Config.freeleech }}100{{ else }}{{ end }}"
|
||||
sortField: "{{ .Config.sort }}"
|
||||
sortDirection: "{{ .Config.type }}"
|
||||
perPage: 100
|
||||
page: 1
|
||||
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
args: ["\\.", " "]
|
||||
- name: re_replace
|
||||
args: ["(?i)\\bS(\\d+)", "T$1"]
|
||||
|
||||
rows:
|
||||
selector: data
|
||||
attribute: attributes
|
||||
count:
|
||||
selector: meta.total
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: category_id
|
||||
title:
|
||||
selector: name
|
||||
filters:
|
||||
- name: re_replace
|
||||
args:
|
||||
- "\\bDUAL\\b"
|
||||
- "Portuguese (Brazil) English"
|
||||
details:
|
||||
selector: details_link
|
||||
_cat:
|
||||
selector: category
|
||||
_type:
|
||||
selector: type
|
||||
_res:
|
||||
selector: resolution
|
||||
optional: true
|
||||
_reg:
|
||||
selector: region
|
||||
optional: true
|
||||
download:
|
||||
selector: download_link
|
||||
infohash:
|
||||
@@ -144,11 +120,11 @@ search:
|
||||
selector: meta.genres
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["(?i)(Ficção científica)", "Ficção_científica"]
|
||||
args: ["(?i)(Ciencia ficción)", "Ciencia_ficción"]
|
||||
- name: replace
|
||||
args: [" & ", "_&_"]
|
||||
description:
|
||||
text: "{{ .Result._cat }} {{ .Result._type }} {{ .Result._res }} {{ .Result._reg }} {{ .Result.genre }}"
|
||||
text: "{{ .Result.genre }}"
|
||||
files:
|
||||
selector: num_file
|
||||
seeders:
|
||||
@@ -183,10 +159,10 @@ search:
|
||||
case:
|
||||
0: 1 # normal
|
||||
1: 2 # double
|
||||
# global MR is 0.4 but torrents must be seeded for 5 days regardless of ratio
|
||||
# global MR is 0.4 but torrents must be seeded for 7 days regardless of ratio
|
||||
# minimumratio:
|
||||
# text: 0.4
|
||||
minimumseedtime:
|
||||
# 7 days (as seconds = 7 x 24 x 60 x 60)
|
||||
text: 604800
|
||||
# json UNIT3D 6.4.1 (custom)
|
||||
# json UNIT3D 6.5.0
|
@@ -132,6 +132,9 @@ login:
|
||||
- selector: .login-container h2:contains("One Time Password")
|
||||
message:
|
||||
text: "Your TorrentLeech account has 2FA enabled. Please recheck your indexer settings."
|
||||
- selector: form[name="login-form"]
|
||||
message:
|
||||
text: "Login page detected at {{ .Config.sitelink }}."
|
||||
test:
|
||||
path: /
|
||||
selector: a[href="/user/account/logout"]
|
||||
|
@@ -84,6 +84,17 @@ search:
|
||||
download:
|
||||
selector: span > a
|
||||
attribute: href
|
||||
date_day:
|
||||
# 10am May. 24th
|
||||
selector: div > span:nth-child(4):contains("."):not(:contains(":"))
|
||||
optional: true
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["(?i)(st|nd|rd|th)", ""]
|
||||
- name: append
|
||||
args: " -07:00" # PDT
|
||||
- name: dateparse
|
||||
args: "htt MMM. d zzz"
|
||||
date_year:
|
||||
# Sep. 7th '10
|
||||
selector: div > span:nth-child(4):not(:contains(":"))
|
||||
@@ -107,7 +118,7 @@ search:
|
||||
- name: dateparse
|
||||
args: "yyyy-MM-dd HH:mm:ss zzz"
|
||||
date:
|
||||
text: "{{ if or .Result.date_year .Result.date_time }}{{ or .Result.date_year .Result.date_time }}{{ else }}now{{ end }}"
|
||||
text: "{{ if or .Result.date_day .Result.date_year .Result.date_time }}{{ or .Result.date_day .Result.date_year .Result.date_time }}{{ else }}now{{ end }}"
|
||||
size:
|
||||
selector: div > span:nth-child(5)
|
||||
seeders:
|
||||
|
@@ -7,10 +7,8 @@ type: public
|
||||
encoding: UTF-8
|
||||
followredirect: true
|
||||
links:
|
||||
- https://torrentqq257.com/
|
||||
- https://torrentqq259.com/
|
||||
legacylinks:
|
||||
- https://torrentqq242.com/
|
||||
- https://torrentqq243.com/
|
||||
- https://torrentqq244.com/
|
||||
- https://torrentqq245.com/. # typo
|
||||
- https://torrentqq245.com/
|
||||
@@ -25,6 +23,8 @@ legacylinks:
|
||||
- https://torrentqq254.com/
|
||||
- https://torrentqq255.com/
|
||||
- https://torrentqq256.com/
|
||||
- https://torrentqq257.com/
|
||||
- https://torrentqq258.com/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
|
@@ -89,7 +89,6 @@ search:
|
||||
sortField: "{{ .Config.sort }}"
|
||||
sortDirection: "{{ .Config.type }}"
|
||||
perPage: 100
|
||||
page: 1
|
||||
|
||||
keywordsfilters:
|
||||
- name: replace # avoid conflict when prepending + to words
|
||||
@@ -102,8 +101,6 @@ search:
|
||||
rows:
|
||||
selector: data
|
||||
attribute: attributes
|
||||
count:
|
||||
selector: meta.total
|
||||
|
||||
fields:
|
||||
categorydesc:
|
||||
|
@@ -7,11 +7,8 @@ type: public
|
||||
encoding: UTF-8
|
||||
followredirect: true
|
||||
links:
|
||||
- https://torrentsir105.com/
|
||||
- https://torrentsir106.com/
|
||||
legacylinks:
|
||||
- https://torrentsir90.com/
|
||||
- http://torrentsir91.com/
|
||||
- https://torrentsir91.com/
|
||||
- http://torrentsir92.com/
|
||||
- https://torrentsir92.com/
|
||||
- http://torrentsir93.com/
|
||||
@@ -33,6 +30,8 @@ legacylinks:
|
||||
- http://torrentsir104.com/
|
||||
- https://torrentsir104.com/
|
||||
- http://torrentsir105.com/
|
||||
- https://torrentsir105.com/
|
||||
- http://torrentsir106.com/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
|
@@ -5,6 +5,7 @@ description: "Torrentz2eu is a Public torrent meta-search engine"
|
||||
language: en-US
|
||||
type: public
|
||||
encoding: UTF-8
|
||||
requestDelay: 2
|
||||
followredirect: true
|
||||
links:
|
||||
- https://2torrentz2eu.in/
|
||||
@@ -44,16 +45,24 @@ search:
|
||||
paths:
|
||||
# https://2torrentz2eu.in/beta2/search.php?torrent-query=2023
|
||||
- path: beta2/search.php
|
||||
- path: beta2/search.php
|
||||
inputs:
|
||||
page: 2
|
||||
inputs:
|
||||
torrent-query: "{{ if .Keywords }}{{ .Keywords }}{{ else }}{{ .Today.Year }}{{ end }}"
|
||||
|
||||
rows:
|
||||
selector: table#torrent-table > tbody > tr
|
||||
fields:
|
||||
category:
|
||||
text: 3
|
||||
title:
|
||||
selector: td:nth-child(1)
|
||||
category_is_tv_show:
|
||||
text: "{{ .Result.title }}"
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "\\b(S\\d+(?:E\\d+)?)\\b"
|
||||
category:
|
||||
text: "{{ if .Result.category_is_tv_show }}2{{ else }}3{{ end }}"
|
||||
details:
|
||||
# https://torrentz2.pics/beta2/page.php?url=9999999%2FThe-Torrent-file-name-goes-here%2F
|
||||
selector: td:nth-child(6) button
|
||||
@@ -77,7 +86,7 @@ search:
|
||||
- name: re_replace
|
||||
args: ["(?i)(st|nd|rd|th|'|\\.)", ""]
|
||||
- name: dateparse
|
||||
args: "MMM. dd yy"
|
||||
args: "MMM dd yy"
|
||||
downloadvolumefactor:
|
||||
text: 0
|
||||
uploadvolumefactor:
|
||||
|
@@ -1,7 +1,7 @@
|
||||
---
|
||||
id: trezzor
|
||||
name: Trezzor
|
||||
description: "Trezzor is a CZECH Private site for TV / MOVIES / GENERAL"
|
||||
name: TreZzoR
|
||||
description: "TreZzoR is a CZECH Private site for TV / MOVIES / GENERAL"
|
||||
language: cs-CZ
|
||||
type: private
|
||||
encoding: windows-1250
|
||||
@@ -10,74 +10,103 @@ links:
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: Movies/DVD, desc: "DVD CZ/SK dabing"}
|
||||
- {id: 2, cat: Movies/DVD, desc: "DVD CZ/SK titulky"}
|
||||
- {id: 3, cat: Audio/Video, desc: "DVD Hudební video"}
|
||||
- {id: 4, cat: Movies/SD, desc: "XviD, DivX CZ/SK dabing"}
|
||||
- {id: 13, cat: Audio, desc: "Hudba CZ/SK scéna"}
|
||||
- {id: 24, cat: Audio, desc: "Mluv. slovo CZ/SK dabing"}
|
||||
- {id: 10, cat: Audio/Other, desc: "DTS audio"}
|
||||
- {id: 14, cat: PC/Games, desc: "Hry"}
|
||||
- {id: 17, cat: PC, desc: "Programy"}
|
||||
- {id: 14, cat: PC, desc: "Cestiny,patche,upgrady"}
|
||||
- {id: 18, cat: Books, desc: "Knihy CZ/SK lokalizace"}
|
||||
- {id: 18, cat: Books/Comics, desc: "Komiks CZ/SK lokalizace"}
|
||||
- {id: 16, cat: Other, desc: "Foto,obrázky"}
|
||||
- {id: 20, cat: Console, desc: "Konzole"}
|
||||
- {id: 21, cat: PC/Mobile-Other, desc: "Mobilmánia"}
|
||||
- {id: 22, cat: Other, desc: "Ostatní CZ/SK scéna"}
|
||||
- {id: 23, cat: Other, desc: "Na prani non CZ/SK"}
|
||||
- {id: 27, cat: Other, desc: "TreZzoR rls"}
|
||||
- {id: 35, cat: Audio/Video, desc: "HDTV Hudební video"}
|
||||
- {id: 36, cat: Movies/SD, desc: "XviD, DivX CZ/SK titulky"}
|
||||
- {id: 31, cat: Movies/HD, desc: "HDTV CZ/SK Dabing"}
|
||||
- {id: 33, cat: Movies/HD, desc: "HDTV CZ/SK Titulky"}
|
||||
- {id: 39, cat: Movies/3D, desc: "3D HDTV CZ/SK Dabing"}
|
||||
- {id: 40, cat: Movies/3D, desc: "3D HDTV CZ/SK Titulky"}
|
||||
- {id: 5, cat: Movies/SD, desc: "TV-rip CZ/SK dabing"}
|
||||
- {id: 31, cat: Movies/HD, desc: "HD CZ/SK Dabing"}
|
||||
- {id: 33, cat: Movies/HD, desc: "HD CZ/SK Titulky"}
|
||||
- {id: 41, cat: TV/HD, desc: "HD Seriály CZ/SK dabing"}
|
||||
- {id: 42, cat: TV/HD, desc: "HD Seriály CZ/SK titulky"}
|
||||
- {id: 1, cat: Movies/BluRay, desc: "Full disc CZ/SK dabing"}
|
||||
- {id: 2, cat: Movies/BluRay, desc: "Full disc CZ/SK titulky"}
|
||||
- {id: 4, cat: Movies/SD, desc: "SD CZ/SK dabing"}
|
||||
- {id: 36, cat: Movies/SD, desc: "SD CZ/SK titulky"}
|
||||
- {id: 7, cat: TV/SD, desc: "Seriály CZ/SK dabing"}
|
||||
- {id: 37, cat: TV/SD, desc: "Seriály CZ/SK titulky"}
|
||||
- {id: 9, cat: XXX/XviD, desc: "XXX CZ/SK dabing"}
|
||||
- {id: 32, cat: XXX/x264, desc: "XXX HD CZ/SK dabing"}
|
||||
- {id: 35, cat: Audio/Video, desc: "Hudebni video"}
|
||||
- {id: 32, cat: XXX, desc: "XXX CZ/SK"}
|
||||
- {id: 13, cat: Audio, desc: "Hudba"}
|
||||
- {id: 24, cat: Audio/Audiobook, desc: "Mluv. slovo CZ/SK dabing"}
|
||||
- {id: 14, cat: PC/Games, desc: "Hry"}
|
||||
- {id: 17, cat: PC/0day, desc: "Programy"}
|
||||
- {id: 15, cat: PC/Games, desc: "Cestiny,patche,upgrady"}
|
||||
- {id: 18, cat: Books, desc: "Knihy CZ/SK lokalizace"}
|
||||
- {id: 19, cat: Books/Comics, desc: "Komiks CZ/SK lokalizace"}
|
||||
- {id: 16, cat: Other, desc: "Foto,obrázky"}
|
||||
- {id: 21, cat: PC/Mobile-Android, desc: "Mobilmánia"}
|
||||
- {id: 20, cat: Console, desc: "Konzole"}
|
||||
- {id: 22, cat: Other, desc: "Ostatní CZ/SK scéna"}
|
||||
- {id: 23, cat: Other, desc: "Na prani non CZ/SK"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
tv-search: [q, season, ep, year]
|
||||
movie-search: [q, year]
|
||||
music-search: [q]
|
||||
book-search: [q]
|
||||
|
||||
settings:
|
||||
- name: cookie
|
||||
- name: username
|
||||
type: text
|
||||
label: Cookie
|
||||
- name: info
|
||||
label: Username
|
||||
- name: password
|
||||
type: password
|
||||
label: Password
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Filter FreeLeech only
|
||||
default: false
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
default: data
|
||||
options:
|
||||
data: created
|
||||
seeds: seeders
|
||||
size: size
|
||||
filename: title
|
||||
- name: type
|
||||
type: select
|
||||
label: Order requested from site
|
||||
default: DESC
|
||||
options:
|
||||
DESC: desc
|
||||
ASC: asc
|
||||
- name: info_tpp
|
||||
type: info
|
||||
label: How to get the Cookie
|
||||
default: "<ol><li>Login to this tracker with your browser</li><li>Open the <b>DevTools</b> panel by pressing <b>F12</b></li><li>Select the <b>Network</b> tab</li><li>Click on the <b>Doc</b> button (Chrome Browser) or <b>HTML</b> button (FireFox)</li><li>Refresh the page by pressing <b>F5</b></li><li>Click on the first row entry</li><li>Select the <b>Headers</b> tab on the Right panel</li><li>Find <b>'cookie:'</b> in the <b>Request Headers</b> section</li><li><b>Select</b> and <b>Copy</b> the whole cookie string <i>(everything after 'cookie: ')</i> and <b>Paste</b> here.</li></ol>"
|
||||
label: Results Per Page
|
||||
default: For best results, change the <b>Torrentu na strance:</b> setting to <b>100</b> on your account profile.
|
||||
- name: info_xxx
|
||||
type: info
|
||||
label: XXX Results
|
||||
default: To include XXX in results, click <b>Kategoria XXX sa nezobrazuje!!!. povolit zobrazenie</b> on the tracker search page.
|
||||
|
||||
login:
|
||||
method: cookie
|
||||
path: prihlasenie.php
|
||||
method: post
|
||||
inputs:
|
||||
cookie: "{{ .Config.cookie }}"
|
||||
uid: "{{ .Config.username }}"
|
||||
pwd: "{{ .Config.password }}"
|
||||
error:
|
||||
- selector: div > font:has(a[href="neregpodp.php"])
|
||||
test:
|
||||
path: torrents.php
|
||||
path: index.php
|
||||
selector: a[href="logout.php"]
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: torrents.php
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
args: ["(?i)S(\\d{2})E(\\d{2})", "$1 $2"]
|
||||
inputs:
|
||||
search: "{{ .Keywords }}"
|
||||
category: 0
|
||||
active: 1
|
||||
# 0 all, 1 active, 2 dead
|
||||
active: 0
|
||||
rok: "{{ .Query.Year }}"
|
||||
# can search for genre but you need to know the id. &genres=57466 for Akční
|
||||
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
args: ["(?i)S(\\d{2})E(\\d{2})", "$1 $2"]
|
||||
|
||||
rows:
|
||||
selector: tr.torrenty_lista
|
||||
selector: "tr.torrenty_lista{{ if .Config.freeleech }}:has(a[href^=\"details.php?slug=\"] b span[style=\"color:darkmagenta\"]){{ else }}{{ end }}"
|
||||
|
||||
fields:
|
||||
category:
|
||||
@@ -90,17 +119,36 @@ search:
|
||||
selector: a[href^="details.php?slug="]
|
||||
attribute: title
|
||||
filters:
|
||||
# Czech, English
|
||||
- name: re_replace
|
||||
args: ["(?i)(Zobrazit detaily: |View details: )", ""]
|
||||
args: ["(?i)^(Zobrazit detaily|View details|Detaily): ", ""]
|
||||
- name: re_replace
|
||||
args: ["(Detaily: )", ""]
|
||||
args: ["(?i)[\\s\\->]*FREELEECH.*", ""]
|
||||
- name: re_replace
|
||||
args: ["(\\w)\\.(\\w)", "$1 $2"]
|
||||
args: [".*?/ ", ""]
|
||||
- name: re_replace
|
||||
args: [".*? / ", ""]
|
||||
- name: diacritics
|
||||
args: replace
|
||||
args: ["(?i)\\b(\\d{1,3})x(\\d{1,3})\\b", "S$1E$2"]
|
||||
- name: re_replace
|
||||
args: ["(?i)\\b(?:Sezona|Series?|Seria|Season)[\\s\\.]*(\\d{1,3}(?:-\\d+)?)[\\.,\\s]*Epizoda[\\s\\.]*(\\d+(?:-\\d+)?)\\b", "S$1E$2"]
|
||||
- name: re_replace
|
||||
args: ["(?i)\\b(\\d{1,3}(?:-\\d+)?)[\\s\\.]*(?:Sezona|Series?|Seria|Season)[\\.,\\s]*(\\d+(?:-\\d+)?)[\\s\\.]*Epizoda\\b", "S$1E$2"]
|
||||
- name: re_replace
|
||||
args: ["(?i)\\b(?:Sezona|Series?|Seria|Season)[\\s\\.]*(\\d{1,3}(?:-\\d+)?)[\\.,\\s]+(\\d+(?:-\\d+)?)[\\s\\.]*Epizoda\\b", "S$1E$2"]
|
||||
- name: re_replace
|
||||
args: ["(?i)\\b(?:Sezona|Series?|Seria|Season)[\\s\\.]*(\\d{1,3})[-\\+\\.,\\s]+(\\d+)\\b", "S$1-$2"]
|
||||
- name: re_replace
|
||||
args: ["(?i)\\b(\\d{1,3})[-\\+\\.\\s]+(\\d+)[\\s\\.]*(?:Sezona|Series?|Seria|Season)\\b", "S$1-$2"]
|
||||
- name: re_replace
|
||||
args: ["(?i)\\b(?:Sezona|Series?|Seria|Season)[\\s\\.]*(\\d{1,3}(?:-\\d+)?)\\b", "S$1"]
|
||||
- name: re_replace
|
||||
args: ["(?i)\\b(\\d{1,3}(?:-\\d+)?)[\\s\\.]*(?:Sezona|Series?|Seria|Season)\\b", "S$1"]
|
||||
- name: re_replace
|
||||
args: ["(?i)\\bEpizoda[\\s\\.]*(\\d+)[-\\+\\.,\\s]+(\\d+)\\b", "E$1-$2"]
|
||||
- name: re_replace
|
||||
args: ["(?i)\\b(\\d+)[-\\+\\.,\\s]+(\\d+)[\\s\\.]*Epizoda\\b", "E$1-$2"]
|
||||
- name: re_replace
|
||||
args: ["(?i)\\bEpizoda[\\s\\.]*(\\d+(?:-\\d+)?)\\b", "E$1"]
|
||||
- name: re_replace
|
||||
args: ["(?i)\\b(\\d+(?:-\\d+)?)[\\s\\.]*Epizoda\\b", "E$1"]
|
||||
details:
|
||||
selector: a[href^="details.php?slug="]
|
||||
attribute: href
|
||||
@@ -123,7 +171,17 @@ search:
|
||||
grabs:
|
||||
selector: td:nth-child(10)
|
||||
downloadvolumefactor:
|
||||
text: 1
|
||||
case:
|
||||
a[href^="details.php?slug="] b span[style="color:darkmagenta"]: 0
|
||||
"*": 1
|
||||
uploadvolumefactor:
|
||||
text: 1
|
||||
description:
|
||||
selector: a[href^="details.php?slug="]
|
||||
attribute: title
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["(?i)^(Zobrazit detaily|View details|Detaily): ", ""]
|
||||
- name: re_replace
|
||||
args: ["(?i)[\\s\\->]*FREELEECH.*", ""]
|
||||
# engine tbd
|
||||
|
184
src/Jackett.Common/Definitions/trezzorcookie.yml
Normal file
184
src/Jackett.Common/Definitions/trezzorcookie.yml
Normal file
@@ -0,0 +1,184 @@
|
||||
---
|
||||
id: trezzorcookie
|
||||
name: TreZzoRCookie
|
||||
description: "TreZzoR is a CZECH Private site for TV / MOVIES / GENERAL. This uses the cookie method for access"
|
||||
language: cs-CZ
|
||||
type: private
|
||||
encoding: windows-1250
|
||||
links:
|
||||
- https://tracker.czech-server.com/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 31, cat: Movies/HD, desc: "HD CZ/SK Dabing"}
|
||||
- {id: 33, cat: Movies/HD, desc: "HD CZ/SK Titulky"}
|
||||
- {id: 41, cat: TV/HD, desc: "HD Seriály CZ/SK dabing"}
|
||||
- {id: 42, cat: TV/HD, desc: "HD Seriály CZ/SK titulky"}
|
||||
- {id: 1, cat: Movies/BluRay, desc: "Full disc CZ/SK dabing"}
|
||||
- {id: 2, cat: Movies/BluRay, desc: "Full disc CZ/SK titulky"}
|
||||
- {id: 4, cat: Movies/SD, desc: "SD CZ/SK dabing"}
|
||||
- {id: 36, cat: Movies/SD, desc: "SD CZ/SK titulky"}
|
||||
- {id: 7, cat: TV/SD, desc: "Seriály CZ/SK dabing"}
|
||||
- {id: 37, cat: TV/SD, desc: "Seriály CZ/SK titulky"}
|
||||
- {id: 35, cat: Audio/Video, desc: "Hudebni video"}
|
||||
- {id: 32, cat: XXX, desc: "XXX CZ/SK"}
|
||||
- {id: 13, cat: Audio, desc: "Hudba"}
|
||||
- {id: 24, cat: Audio/Audiobook, desc: "Mluv. slovo CZ/SK dabing"}
|
||||
- {id: 14, cat: PC/Games, desc: "Hry"}
|
||||
- {id: 17, cat: PC/0day, desc: "Programy"}
|
||||
- {id: 15, cat: PC/Games, desc: "Cestiny,patche,upgrady"}
|
||||
- {id: 18, cat: Books, desc: "Knihy CZ/SK lokalizace"}
|
||||
- {id: 19, cat: Books/Comics, desc: "Komiks CZ/SK lokalizace"}
|
||||
- {id: 16, cat: Other, desc: "Foto,obrázky"}
|
||||
- {id: 21, cat: PC/Mobile-Android, desc: "Mobilmánia"}
|
||||
- {id: 20, cat: Console, desc: "Konzole"}
|
||||
- {id: 22, cat: Other, desc: "Ostatní CZ/SK scéna"}
|
||||
- {id: 23, cat: Other, desc: "Na prani non CZ/SK"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, year]
|
||||
movie-search: [q, year]
|
||||
music-search: [q]
|
||||
book-search: [q]
|
||||
|
||||
settings:
|
||||
- name: cookie
|
||||
type: text
|
||||
label: Cookie
|
||||
- name: info
|
||||
type: info
|
||||
label: How to get the Cookie
|
||||
default: "<ol><li>Login to this tracker with your browser</li><li>Open the <b>DevTools</b> panel by pressing <b>F12</b></li><li>Select the <b>Network</b> tab</li><li>Click on the <b>Doc</b> button (Chrome Browser) or <b>HTML</b> button (FireFox)</li><li>Refresh the page by pressing <b>F5</b></li><li>Click on the first row entry</li><li>Select the <b>Headers</b> tab on the Right panel</li><li>Find <b>'cookie:'</b> in the <b>Request Headers</b> section</li><li><b>Select</b> and <b>Copy</b> the whole cookie string <i>(everything after 'cookie: ')</i> and <b>Paste</b> here.</li></ol>"
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Filter FreeLeech only
|
||||
default: false
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
default: data
|
||||
options:
|
||||
data: created
|
||||
seeds: seeders
|
||||
size: size
|
||||
filename: title
|
||||
- name: type
|
||||
type: select
|
||||
label: Order requested from site
|
||||
default: DESC
|
||||
options:
|
||||
DESC: desc
|
||||
ASC: asc
|
||||
- name: info_tpp
|
||||
type: info
|
||||
label: Results Per Page
|
||||
default: For best results, change the <b>Torrentu na strance:</b> setting to <b>100</b> on your account profile.
|
||||
- name: info_xxx
|
||||
type: info
|
||||
label: XXX Results
|
||||
default: To include XXX in results, click <b>Kategoria XXX sa nezobrazuje!!!. povolit zobrazenie</b> on the tracker search page.
|
||||
|
||||
login:
|
||||
method: cookie
|
||||
inputs:
|
||||
cookie: "{{ .Config.cookie }}"
|
||||
test:
|
||||
path: index.php
|
||||
selector: a[href="logout.php"]
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: torrents.php
|
||||
inputs:
|
||||
search: "{{ .Keywords }}"
|
||||
category: 0
|
||||
# 0 all, 1 active, 2 dead
|
||||
active: 0
|
||||
rok: "{{ .Query.Year }}"
|
||||
# can search for genre but you need to know the id. &genres=57466 for Akční
|
||||
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
args: ["(?i)S(\\d{2})E(\\d{2})", "$1 $2"]
|
||||
|
||||
rows:
|
||||
selector: "tr.torrenty_lista{{ if .Config.freeleech }}:has(a[href^=\"details.php?slug=\"] b span[style=\"color:darkmagenta\"]){{ else }}{{ end }}"
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: a[href^="torrents.php?onlycat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: onlycat
|
||||
title:
|
||||
selector: a[href^="details.php?slug="]
|
||||
attribute: title
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["(?i)^(Zobrazit detaily|View details|Detaily): ", ""]
|
||||
- name: re_replace
|
||||
args: ["(?i)[\\s\\->]*FREELEECH.*", ""]
|
||||
- name: re_replace
|
||||
args: [".*?/ ", ""]
|
||||
- name: re_replace
|
||||
args: ["(?i)\\b(\\d{1,3})x(\\d{1,3})\\b", "S$1E$2"]
|
||||
- name: re_replace
|
||||
args: ["(?i)\\b(?:Sezona|Series?|Seria|Season)[\\s\\.]*(\\d{1,3}(?:-\\d+)?)[\\.,\\s]*Epizoda[\\s\\.]*(\\d+(?:-\\d+)?)\\b", "S$1E$2"]
|
||||
- name: re_replace
|
||||
args: ["(?i)\\b(\\d{1,3}(?:-\\d+)?)[\\s\\.]*(?:Sezona|Series?|Seria|Season)[\\.,\\s]*(\\d+(?:-\\d+)?)[\\s\\.]*Epizoda\\b", "S$1E$2"]
|
||||
- name: re_replace
|
||||
args: ["(?i)\\b(?:Sezona|Series?|Seria|Season)[\\s\\.]*(\\d{1,3}(?:-\\d+)?)[\\.,\\s]+(\\d+(?:-\\d+)?)[\\s\\.]*Epizoda\\b", "S$1E$2"]
|
||||
- name: re_replace
|
||||
args: ["(?i)\\b(?:Sezona|Series?|Seria|Season)[\\s\\.]*(\\d{1,3})[-\\+\\.,\\s]+(\\d+)\\b", "S$1-$2"]
|
||||
- name: re_replace
|
||||
args: ["(?i)\\b(\\d{1,3})[-\\+\\.\\s]+(\\d+)[\\s\\.]*(?:Sezona|Series?|Seria|Season)\\b", "S$1-$2"]
|
||||
- name: re_replace
|
||||
args: ["(?i)\\b(?:Sezona|Series?|Seria|Season)[\\s\\.]*(\\d{1,3}(?:-\\d+)?)\\b", "S$1"]
|
||||
- name: re_replace
|
||||
args: ["(?i)\\b(\\d{1,3}(?:-\\d+)?)[\\s\\.]*(?:Sezona|Series?|Seria|Season)\\b", "S$1"]
|
||||
- name: re_replace
|
||||
args: ["(?i)\\bEpizoda[\\s\\.]*(\\d+)[-\\+\\.,\\s]+(\\d+)\\b", "E$1-$2"]
|
||||
- name: re_replace
|
||||
args: ["(?i)\\b(\\d+)[-\\+\\.,\\s]+(\\d+)[\\s\\.]*Epizoda\\b", "E$1-$2"]
|
||||
- name: re_replace
|
||||
args: ["(?i)\\bEpizoda[\\s\\.]*(\\d+(?:-\\d+)?)\\b", "E$1"]
|
||||
- name: re_replace
|
||||
args: ["(?i)\\b(\\d+(?:-\\d+)?)[\\s\\.]*Epizoda\\b", "E$1"]
|
||||
details:
|
||||
selector: a[href^="details.php?slug="]
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href^="download.php?slug="]
|
||||
attribute: href
|
||||
date:
|
||||
selector: td:nth-child(6)
|
||||
filters:
|
||||
- name: append
|
||||
args: " +02:00" # EET
|
||||
- name: dateparse
|
||||
args: "d/M/yyyy HH:mm zzz"
|
||||
size:
|
||||
selector: td:nth-child(7)
|
||||
seeders:
|
||||
selector: td:nth-child(8) a
|
||||
leechers:
|
||||
selector: td:nth-child(9) a
|
||||
grabs:
|
||||
selector: td:nth-child(10)
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
a[href^="details.php?slug="] b span[style="color:darkmagenta"]: 0
|
||||
"*": 1
|
||||
uploadvolumefactor:
|
||||
text: 1
|
||||
description:
|
||||
selector: a[href^="details.php?slug="]
|
||||
attribute: title
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["(?i)^(Zobrazit detaily|View details|Detaily): ", ""]
|
||||
- name: re_replace
|
||||
args: ["(?i)[\\s\\->]*FREELEECH.*", ""]
|
||||
# engine tbd
|
@@ -35,6 +35,7 @@ caps:
|
||||
- {id: 39, cat: TV, desc: "Netflix Film"}
|
||||
- {id: 38, cat: TV, desc: "Netflix Dizi"}
|
||||
- {id: 40, cat: TV, desc: "Netflix Belgesel"}
|
||||
- {id: 104, cat: TV, desc: "Netflix Reality/Yarışma"}
|
||||
- {id: 47, cat: PC, desc: "Programlar"}
|
||||
- {id: 48, cat: PC, desc: "Programlar Windows"}
|
||||
- {id: 96, cat: PC, desc: "Programlar Linux"}
|
||||
|
@@ -92,6 +92,12 @@ search:
|
||||
qty: 100
|
||||
freeleech: "{{ if .Config.freeleech }}1{{ else }}{{ end }}"
|
||||
# can search by genre but need range support. &genres[]=Action&genres[]=Comedy for Action and Comedy
|
||||
keywordsfilters:
|
||||
# if searching for season packs switch S01 to Series 1 #14369
|
||||
- name: re_replace
|
||||
args: ["(?i)(S0)(\\d{1,2})$", "Series $2"]
|
||||
- name: re_replace
|
||||
args: ["(?i)(S)(\\d{1,3})$", "Series $2"]
|
||||
|
||||
rows:
|
||||
selector: table > tbody > tr
|
||||
@@ -105,6 +111,9 @@ search:
|
||||
args: "/categories/(\\d+)"
|
||||
title:
|
||||
selector: a.view-torrent
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["(?i)Series[\\s]+(\\d+)", "S$1"]
|
||||
download:
|
||||
selector: a[href*="/download/"]
|
||||
attribute: href
|
||||
|
156
src/Jackett.Common/Definitions/utopia.yml
Normal file
156
src/Jackett.Common/Definitions/utopia.yml
Normal file
@@ -0,0 +1,156 @@
|
||||
---
|
||||
id: utopia
|
||||
name: UTOPIA
|
||||
description: "UTOPIA is a UKRAINIAN Private Tracker for HD MOVIES and TV"
|
||||
language: uk-UA
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://utp.to/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: Movies, desc: "Movies"}
|
||||
- {id: 2, cat: TV, desc: "TV"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid, tvdbid, tmdbid]
|
||||
movie-search: [q, imdbid, tmdbid]
|
||||
|
||||
settings:
|
||||
- name: apikey
|
||||
type: text
|
||||
label: APIKey
|
||||
- name: info_key
|
||||
type: info
|
||||
label: About your API key
|
||||
default: "Find or Generate a new API Token by accessing your <a href=\"https://utp.to/\" target=\"_blank\">UTOPIA</a> account <i>My Security</i> page and clicking on the <b>API Token</b> tab."
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
default: created_at
|
||||
options:
|
||||
created_at: created
|
||||
seeders: seeders
|
||||
size: size
|
||||
name: title
|
||||
- name: type
|
||||
type: select
|
||||
label: Order requested from site
|
||||
default: desc
|
||||
options:
|
||||
desc: desc
|
||||
asc: asc
|
||||
|
||||
login:
|
||||
path: /api/torrents
|
||||
method: get
|
||||
inputs:
|
||||
api_token: "{{ .Config.apikey }}"
|
||||
error:
|
||||
- selector: a[href*="/login"]
|
||||
message:
|
||||
text: "The API key was not accepted by {{ .Config.sitelink }}."
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://hdinnovations.github.io/UNIT3D-Community-Edition-Docs/api_endpoints.html
|
||||
# https://github.com/HDInnovations/UNIT3D-Community-Edition/blob/master/app/Http/Controllers/API/TorrentController.php
|
||||
- path: "/api/torrents/filter"
|
||||
response:
|
||||
type: json
|
||||
|
||||
inputs:
|
||||
# if we have an id based search, add Season and Episode as query in name for UNIT3D < v6. Else pass S/E Params for UNIT3D >= v6
|
||||
api_token: "{{ .Config.apikey }}"
|
||||
$raw: "{{ range .Categories }}&categories[]={{.}}{{end}}"
|
||||
name: "{{ .Keywords }}"
|
||||
seasonNumber: "{{ .Query.Season }}"
|
||||
episodeNumber: "{{ .Query.Ep }}"
|
||||
imdbId: "{{ .Query.IMDBIDShort }}"
|
||||
tmdbId: "{{ .Query.TMDBID }}"
|
||||
tvdbId: "{{ .Query.TVDBID }}"
|
||||
free: "{{ if .Config.freeleech }}1{{ else }}{{ end }}"
|
||||
sortField: "{{ .Config.sort }}"
|
||||
sortDirection: "{{ .Config.type }}"
|
||||
perPage: 100
|
||||
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
args: ["\\.", " "]
|
||||
|
||||
rows:
|
||||
selector: data
|
||||
attribute: attributes
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: category_id
|
||||
title:
|
||||
selector: name
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["\\.", " "]
|
||||
details:
|
||||
selector: details_link
|
||||
download:
|
||||
selector: download_link
|
||||
infohash:
|
||||
selector: info_hash
|
||||
poster:
|
||||
selector: poster
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["https://via.placeholder.com/90x135", ""]
|
||||
imdbid:
|
||||
selector: imdb_id
|
||||
tmdbid:
|
||||
selector: tmdb_id
|
||||
tvdbid:
|
||||
selector: tvdb_id
|
||||
files:
|
||||
selector: num_file
|
||||
seeders:
|
||||
selector: seeders
|
||||
leechers:
|
||||
selector: leechers
|
||||
grabs:
|
||||
selector: times_completed
|
||||
date:
|
||||
# "created_at": "2021-10-18T00:34:50.000000Z" is returned by Newtonsoft.Json.Linq as 18/10/2021 00:34:50
|
||||
selector: created_at
|
||||
filters:
|
||||
- name: append
|
||||
args: " +00:00" # GMT
|
||||
- name: dateparse
|
||||
args: "MM/dd/yyyy HH:mm:ss zzz"
|
||||
size:
|
||||
selector: size
|
||||
downloadvolumefactor:
|
||||
# api returns 0%, 25%, 50%, 75%, 100%
|
||||
selector: freeleech
|
||||
case:
|
||||
0%: 1 # not free
|
||||
25%: 0.75
|
||||
50%: 0.5
|
||||
75%: 0.25
|
||||
100%: 0 # freeleech
|
||||
"*": 0 # catch errors
|
||||
uploadvolumefactor:
|
||||
# api returns 0=false, 1=true
|
||||
selector: double_upload
|
||||
case:
|
||||
0: 1 # normal
|
||||
1: 2 # double
|
||||
# global MR is 0.4 but torrents must be seeded for 3 days regardless of ratio
|
||||
# minimumratio:
|
||||
# text: 0.4
|
||||
minimumseedtime:
|
||||
# 3 days (as seconds = 3 x 24 x 60 x 60)
|
||||
text: 259200
|
||||
# json UNIT3D 6.2.1
|
@@ -10,11 +10,10 @@ links:
|
||||
|
||||
caps:
|
||||
categories:
|
||||
Audio: Audio
|
||||
PC: PC
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
music-search: [q]
|
||||
|
||||
settings: []
|
||||
|
||||
@@ -39,7 +38,7 @@ search:
|
||||
|
||||
fields:
|
||||
category:
|
||||
text: Audio
|
||||
text: PC
|
||||
title:
|
||||
selector: div.eTitle a
|
||||
details:
|
||||
|
61
src/Jackett.Common/Definitions/vstorrent.yml
Normal file
61
src/Jackett.Common/Definitions/vstorrent.yml
Normal file
@@ -0,0 +1,61 @@
|
||||
---
|
||||
id: vstorrent
|
||||
name: VSTorrent
|
||||
description: "VSTorrent is a Public site for AUDIO apps, plugins and samples"
|
||||
language: en-US
|
||||
type: public
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://vstorrent.org/
|
||||
|
||||
caps:
|
||||
categories:
|
||||
PC: PC
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
|
||||
settings: []
|
||||
|
||||
download:
|
||||
selectors:
|
||||
- selector: a[href^="magnet:?xt"]
|
||||
attribute: href
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: /
|
||||
inputs:
|
||||
s: "{{ .Keywords }}"
|
||||
|
||||
rows:
|
||||
selector: article:has(.entry-title)
|
||||
filters:
|
||||
- name: andmatch
|
||||
|
||||
fields:
|
||||
category:
|
||||
text: PC
|
||||
title:
|
||||
selector: .entry-title
|
||||
details:
|
||||
selector: .entry-title > a
|
||||
attribute: href
|
||||
download:
|
||||
selector: .entry-title > a
|
||||
attribute: href
|
||||
description:
|
||||
selector: .entry-summary
|
||||
date:
|
||||
selector: span.date
|
||||
size:
|
||||
text: "512 MB"
|
||||
seeders:
|
||||
text: 1
|
||||
leechers:
|
||||
text: 1
|
||||
downloadvolumefactor:
|
||||
text: 0
|
||||
uploadvolumefactor:
|
||||
text: 1
|
||||
# wordpress 6.2.2
|
@@ -1,7 +1,7 @@
|
||||
---
|
||||
id: vsttorrents
|
||||
name: VST Torrents
|
||||
description: "VST Torrents is a Public site for AUDIO apps, plugins and samples"
|
||||
name: VST Torrentz
|
||||
description: "VST Torrentz is a Public site for AUDIO apps, plugins and samples"
|
||||
language: en-US
|
||||
type: public
|
||||
encoding: UTF-8
|
||||
@@ -13,11 +13,10 @@ legacylinks:
|
||||
|
||||
caps:
|
||||
categories:
|
||||
Audio: Audio
|
||||
PC: PC
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
music-search: [q]
|
||||
|
||||
settings: []
|
||||
|
||||
@@ -39,7 +38,7 @@ search:
|
||||
|
||||
fields:
|
||||
category:
|
||||
text: Audio
|
||||
text: PC
|
||||
title:
|
||||
selector: .entry-title
|
||||
details:
|
||||
@@ -51,7 +50,8 @@ search:
|
||||
description:
|
||||
selector: .entry-excerpt
|
||||
date:
|
||||
text: now
|
||||
selector: time
|
||||
attribute: datetime
|
||||
size:
|
||||
text: "512 MB"
|
||||
seeders:
|
||||
@@ -62,4 +62,4 @@ search:
|
||||
text: 0
|
||||
uploadvolumefactor:
|
||||
text: 1
|
||||
# wordpress 6.0.3
|
||||
# wordpress 6.2.2
|
||||
|
@@ -31,6 +31,11 @@ settings:
|
||||
desc: desc
|
||||
asc: asc
|
||||
|
||||
download:
|
||||
selectors:
|
||||
- selector: a[href^="/torrents/download/"]
|
||||
attribute: href
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://xxxclub.to/torrents/browse/all/tushyraw%20grays?sort=size&order=asc
|
||||
@@ -43,30 +48,30 @@ search:
|
||||
category:
|
||||
text: XXX
|
||||
title:
|
||||
selector: td:nth-child(2)
|
||||
selector: a[href^="/torrents/details/"]
|
||||
details:
|
||||
selector: td:nth-child(2) a
|
||||
selector: a[href^="/torrents/details/"]
|
||||
attribute: href
|
||||
download:
|
||||
selector: td:nth-child(3) a
|
||||
selector: a[href^="/torrents/details/"]
|
||||
attribute: href
|
||||
poster:
|
||||
selector: td:nth-child(2) a
|
||||
selector: a[href^="/torrents/details/"]
|
||||
attribute: title
|
||||
filters:
|
||||
- name: regexp
|
||||
args: src='(.+?)'
|
||||
date:
|
||||
selector: td:nth-child(4)
|
||||
selector: td:nth-child(3)
|
||||
filters:
|
||||
- name: dateparse
|
||||
args: "dd MMM yyyy HH:mm:ss"
|
||||
size:
|
||||
selector: td:nth-child(5)
|
||||
selector: td:nth-child(4)
|
||||
seeders:
|
||||
selector: td:nth-child(6)
|
||||
selector: td:nth-child(5)
|
||||
leechers:
|
||||
selector: td:nth-child(7)
|
||||
selector: td:nth-child(6)
|
||||
downloadvolumefactor:
|
||||
text: 0
|
||||
uploadvolumefactor:
|
||||
|
12
src/Jackett.Common/Extensions/ListExtensions.cs
Normal file
12
src/Jackett.Common/Extensions/ListExtensions.cs
Normal file
@@ -0,0 +1,12 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
namespace Jackett.Common.Extensions
|
||||
{
|
||||
public static class ListExtensions
|
||||
{
|
||||
public static List<List<T>> ChunkBy<T>(this List<T> source, int chunkSize) => source
|
||||
.Select((x, i) => new { Index = i, Value = x }).GroupBy(x => x.Index / chunkSize)
|
||||
.Select(x => x.Select(v => v.Value).ToList()).ToList();
|
||||
}
|
||||
}
|
@@ -6,7 +6,7 @@ using System.Linq;
|
||||
using System.Net;
|
||||
using System.Threading.Tasks;
|
||||
using Jackett.Common.Models;
|
||||
using Jackett.Common.Models.IndexerConfig;
|
||||
using Jackett.Common.Models.IndexerConfig.Bespoke;
|
||||
using Jackett.Common.Services.Interfaces;
|
||||
using Jackett.Common.Utils;
|
||||
using Jackett.Common.Utils.Clients;
|
||||
@@ -35,7 +35,7 @@ namespace Jackett.Common.Indexers.Abstract
|
||||
private string SearchUrl => SiteLink + "api/torrent";
|
||||
private string _token;
|
||||
|
||||
private new ConfigurationDataBasicLoginWithEmail configData => (ConfigurationDataBasicLoginWithEmail)base.configData;
|
||||
private new ConfigurationDataSpeedAppTracker configData => (ConfigurationDataSpeedAppTracker)base.configData;
|
||||
|
||||
protected SpeedAppTracker(IIndexerConfigurationService configService, WebClient client, Logger logger, IProtectionService p, ICacheService cs)
|
||||
: base(configService: configService,
|
||||
@@ -43,7 +43,7 @@ namespace Jackett.Common.Indexers.Abstract
|
||||
logger: logger,
|
||||
p: p,
|
||||
cacheService: cs,
|
||||
configData: new ConfigurationDataBasicLoginWithEmail())
|
||||
configData: new ConfigurationDataSpeedAppTracker())
|
||||
{
|
||||
}
|
||||
|
||||
@@ -120,8 +120,17 @@ namespace Jackett.Common.Indexers.Abstract
|
||||
try
|
||||
{
|
||||
var rows = JArray.Parse(response.ContentString);
|
||||
|
||||
foreach (var row in rows)
|
||||
{
|
||||
var dlVolumeFactor = row.Value<double>("download_volume_factor");
|
||||
|
||||
// skip non-freeleech results when freeleech only is set
|
||||
if (configData.FreeleechOnly.Value && dlVolumeFactor != 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
var id = row.Value<string>("id");
|
||||
var link = new Uri($"{SiteLink}api/torrent/{id}/download");
|
||||
var urlStr = row.Value<string>("url");
|
||||
@@ -141,9 +150,6 @@ namespace Jackett.Common.Indexers.Abstract
|
||||
var posterStr = row.Value<string>("poster");
|
||||
var poster = Uri.TryCreate(posterStr, UriKind.Absolute, out var posterUri) ? posterUri : null;
|
||||
|
||||
var dlVolumeFactor = row.Value<double>("download_volume_factor");
|
||||
var ulVolumeFactor = row.Value<double>("upload_volume_factor");
|
||||
|
||||
var title = row.Value<string>("name");
|
||||
// fix for #10883
|
||||
if (UseP2PReleaseName && !string.IsNullOrWhiteSpace(row.Value<string>("p2p_release_name")))
|
||||
@@ -167,7 +173,7 @@ namespace Jackett.Common.Indexers.Abstract
|
||||
Seeders = row.Value<int>("seeders"),
|
||||
Peers = row.Value<int>("leechers") + row.Value<int>("seeders"),
|
||||
DownloadVolumeFactor = dlVolumeFactor,
|
||||
UploadVolumeFactor = ulVolumeFactor,
|
||||
UploadVolumeFactor = row.Value<double>("upload_volume_factor"),
|
||||
MinimumRatio = 1,
|
||||
MinimumSeedTime = minimumSeedTime
|
||||
};
|
||||
|
@@ -187,8 +187,10 @@ namespace Jackett.Common.Indexers
|
||||
// AniDex throws errors when categories are url encoded. See issue #9727
|
||||
var searchCategories = MapTorznabCapsToTrackers(query);
|
||||
var catString = "";
|
||||
if (searchCategories.Count > 0)
|
||||
if (searchCategories.Any() && GetAllTrackerCategories().Except(searchCategories).Any())
|
||||
{
|
||||
catString = "&id=" + string.Join(",", searchCategories);
|
||||
}
|
||||
|
||||
// Get Selected Languages
|
||||
// AniDex throws errors when the commas between language IDs are url encoded.
|
||||
|
@@ -117,8 +117,8 @@ namespace Jackett.Common.Indexers
|
||||
|
||||
var searchString = query.GetQueryString().Trim();
|
||||
|
||||
// replace any space, special char, etc. with % (wildcard)
|
||||
searchString = Regex.Replace(searchString, "[^a-zA-Z0-9]+", "%");
|
||||
// replace non-word characters with % (wildcard)
|
||||
searchString = Regex.Replace(searchString, @"[\W]+", "%");
|
||||
|
||||
var searchUrl = SearchUrl;
|
||||
|
||||
|
@@ -164,6 +164,14 @@ namespace Jackett.Common.Indexers
|
||||
|
||||
foreach (var row in rows)
|
||||
{
|
||||
var downloadVolumeFactor = row.QuerySelector("span.freeleech") != null ? 0 : 1;
|
||||
|
||||
// Skip non-freeleech results when freeleech only is set
|
||||
if (configData.FreeleechOnly.Value && downloadVolumeFactor != 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
var qTitleLink = row.QuerySelector("a.title, a.alt_title");
|
||||
if (qTitleLink == null)
|
||||
continue;
|
||||
@@ -247,7 +255,7 @@ namespace Jackett.Common.Indexers
|
||||
else
|
||||
release.PublishDate = DateTime.ParseExact(dateStr, "dd MMM yy", CultureInfo.InvariantCulture);
|
||||
|
||||
release.DownloadVolumeFactor = row.QuerySelector("span.freeleech") != null ? 0 : 1;
|
||||
release.DownloadVolumeFactor = downloadVolumeFactor;
|
||||
release.UploadVolumeFactor = 1;
|
||||
|
||||
releases.Add(release);
|
||||
|
@@ -1349,8 +1349,6 @@ namespace Jackett.Common.Indexers
|
||||
mappedCategories = DefaultCategories;
|
||||
}
|
||||
|
||||
variables[".Categories"] = mappedCategories;
|
||||
|
||||
var KeywordTokens = new List<string>();
|
||||
var KeywordTokenKeys = new List<string> { "Q", "Series", "Movie", "Year" };
|
||||
foreach (var key in KeywordTokenKeys)
|
||||
@@ -1369,15 +1367,26 @@ namespace Jackett.Common.Indexers
|
||||
var SearchPaths = Search.Paths;
|
||||
foreach (var SearchPath in SearchPaths)
|
||||
{
|
||||
variables[".Categories"] = mappedCategories;
|
||||
|
||||
// skip path if categories don't match
|
||||
if (SearchPath.Categories.Count > 0)
|
||||
{
|
||||
var invertMatch = (SearchPath.Categories[0] == "!");
|
||||
var hasIntersect = mappedCategories.Intersect(SearchPath.Categories).Any();
|
||||
if (invertMatch)
|
||||
|
||||
if (SearchPath.Categories[0] == "!")
|
||||
{
|
||||
hasIntersect = !hasIntersect;
|
||||
}
|
||||
|
||||
if (!hasIntersect)
|
||||
{
|
||||
variables[".Categories"] = mappedCategories.Except(SearchPath.Categories).ToList();
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
variables[".Categories"] = mappedCategories.Intersect(SearchPath.Categories).ToList();
|
||||
}
|
||||
|
||||
// build search URL
|
||||
@@ -1448,18 +1457,24 @@ namespace Jackett.Common.Indexers
|
||||
if (SearchPath.Response != null && SearchPath.Response.Type.Equals("json"))
|
||||
{
|
||||
if (response.Status != HttpStatusCode.OK)
|
||||
{
|
||||
throw new Exception($"Error Parsing Json Response: Status={response.Status} Response={results}");
|
||||
}
|
||||
|
||||
if (response.Status == HttpStatusCode.OK
|
||||
&& SearchPath.Response != null
|
||||
&& SearchPath.Response.NoResultsMessage != null
|
||||
&& (SearchPath.Response.NoResultsMessage != string.Empty && results.Contains(SearchPath.Response.NoResultsMessage) || (SearchPath.Response.NoResultsMessage == string.Empty && results == string.Empty)))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
var parsedJson = JToken.Parse(results);
|
||||
|
||||
if (parsedJson == null)
|
||||
{
|
||||
throw new Exception("Error Parsing Json Response");
|
||||
}
|
||||
|
||||
if (Search.Rows.Count != null)
|
||||
{
|
||||
@@ -1483,7 +1498,9 @@ namespace Jackett.Common.Indexers
|
||||
if (rowsArray == null)
|
||||
{
|
||||
if (Search.Rows.MissingAttributeEqualsNoResults)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
throw new Exception("Error Parsing Rows Selector. There are 0 rows.");
|
||||
}
|
||||
@@ -1495,7 +1512,18 @@ namespace Jackett.Common.Indexers
|
||||
|
||||
foreach (var Row in rowsArray)
|
||||
{
|
||||
var selObj = Search.Rows.Attribute != null ? Row.SelectToken(Search.Rows.Attribute).Value<JToken>() : Row;
|
||||
var selObj = Row;
|
||||
|
||||
if (Search.Rows.Attribute != null)
|
||||
{
|
||||
selObj = Row.SelectToken(Search.Rows.Attribute)?.Value<JToken>();
|
||||
|
||||
if (selObj == null && Search.Rows.MissingAttributeEqualsNoResults)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
var mulRows = Search.Rows.Multiple ? selObj.Values<JObject>() : new List<JObject> { selObj.Value<JObject>() };
|
||||
|
||||
foreach (var mulRow in mulRows)
|
||||
|
@@ -13,6 +13,7 @@ using Jackett.Common.Services.Interfaces;
|
||||
using Jackett.Common.Utils.Clients;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using NLog;
|
||||
using static System.Net.WebRequestMethods;
|
||||
using WebClient = Jackett.Common.Utils.Clients.WebClient;
|
||||
|
||||
namespace Jackett.Common.Indexers
|
||||
@@ -23,7 +24,7 @@ namespace Jackett.Common.Indexers
|
||||
public override string Id => "cinecalidad";
|
||||
public override string Name => "Cinecalidad";
|
||||
public override string Description => "Películas Full HD en Latino Dual.";
|
||||
public override string SiteLink { get; protected set; } = "https://www3.cinecalidad.ms/";
|
||||
public override string SiteLink { get; protected set; } = "https://www.cinecalidad.gs/";
|
||||
public override string[] LegacySiteLinks => new[]
|
||||
{
|
||||
"https://cinecalidad.website/",
|
||||
@@ -41,7 +42,9 @@ namespace Jackett.Common.Indexers
|
||||
"https://www.cine-calidad.com/",
|
||||
"https://www.cinecalidad.lat/",
|
||||
"https://cinecalidad.dev/",
|
||||
"https://cinecalidad.ms/"
|
||||
"https://cinecalidad.ms/",
|
||||
"https://www3.cinecalidad.ms/",
|
||||
"https://ww1.cinecalidad.ms/"
|
||||
};
|
||||
public override string Language => "es-419";
|
||||
public override string Type => "public";
|
||||
|
@@ -25,10 +25,10 @@ namespace Jackett.Common.Indexers
|
||||
public override string Id => "dontorrent";
|
||||
public override string Name => "DonTorrent";
|
||||
public override string Description => "DonTorrent is a SPANISH public tracker for MOVIES / TV / GENERAL";
|
||||
public override string SiteLink { get; protected set; } = "https://dontorrent.discount/";
|
||||
public override string SiteLink { get; protected set; } = "https://dontorrent.zip/";
|
||||
public override string[] AlternativeSiteLinks => new[]
|
||||
{
|
||||
"https://dontorrent.discount/",
|
||||
"https://dontorrent.zip/",
|
||||
"https://todotorrents.net/",
|
||||
"https://tomadivx.net/",
|
||||
"https://seriesblanco.one/",
|
||||
@@ -37,7 +37,6 @@ namespace Jackett.Common.Indexers
|
||||
};
|
||||
public override string[] LegacySiteLinks => new[]
|
||||
{
|
||||
"https://dontorrent.surf/",
|
||||
"https://dontorrent.how/",
|
||||
"https://dontorrent.casa/",
|
||||
"https://dontorrent.chat/",
|
||||
@@ -51,8 +50,9 @@ namespace Jackett.Common.Indexers
|
||||
"https://dontorrent.care/",
|
||||
"https://dontorrent.cash/",
|
||||
"https://dontorrent.observer/",
|
||||
"https://dontorrent.company/"
|
||||
|
||||
"https://dontorrent.company/",
|
||||
"https://dontorrent.discount/",
|
||||
"https://dontorrent.dad/",
|
||||
};
|
||||
public override string Language => "es-ES";
|
||||
public override string Type => "public";
|
||||
|
@@ -133,27 +133,37 @@ namespace Jackett.Common.Indexers
|
||||
var result = await RequestLoginAndFollowRedirect(LoginUrl, pairs, loginPage.Cookies, true, null, LoginUrl);
|
||||
|
||||
await ConfigureIfOK(
|
||||
result.Cookies, result.ContentString?.Contains("If your browser doesn't have javascript enabled") == true,
|
||||
() => throw new ExceptionWithConfigData("Couldn't login", configData));
|
||||
result.Cookies, result.ContentString?.Contains("If your browser doesn't have javascript enabled") == true, () =>
|
||||
{
|
||||
var parser = new HtmlParser();
|
||||
var dom = parser.ParseDocument(result.ContentString);
|
||||
|
||||
var errorMessage = dom.QuerySelector("div > font[color=\"#FF0000\"]")?.TextContent.Trim();
|
||||
|
||||
throw new ExceptionWithConfigData(errorMessage ?? "Couldn't login", configData);
|
||||
});
|
||||
|
||||
return IndexerConfigurationStatus.RequiresTesting;
|
||||
}
|
||||
|
||||
protected override async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query)
|
||||
{
|
||||
var releases = new List<ReleaseInfo>();
|
||||
var searchUrl = SearchUrl + string.Join(
|
||||
string.Empty, MapTorznabCapsToTrackers(query).Select(cat => $"category[]={cat}&"));
|
||||
|
||||
var searchUrl = SearchUrl + string.Join(string.Empty, MapTorznabCapsToTrackers(query).Select(cat => $"category[]={cat}&"));
|
||||
|
||||
var queryCollection = new NameValueCollection
|
||||
{
|
||||
{"search", query.ImdbID ?? query.GetQueryString()},
|
||||
{"active", ((BoolConfigurationItem)configData.GetDynamic("freeleech")).Value ? "5" : "0"},
|
||||
{"options", "0"}
|
||||
{ "search", query.ImdbID ?? query.GetQueryString() },
|
||||
{ "active", ((BoolConfigurationItem)configData.GetDynamic("freeleech")).Value ? "5" : "0" },
|
||||
{ "options", "0" }
|
||||
};
|
||||
|
||||
// manually url encode parenthesis to prevent "hacking" detection, remove . as not used in titles
|
||||
searchUrl += queryCollection.GetQueryString().Replace("(", "%28").Replace(")", "%29").Replace(".", " ");
|
||||
|
||||
var results = await RequestWithCookiesAndRetryAsync(searchUrl);
|
||||
|
||||
try
|
||||
{
|
||||
var parser = new HtmlParser();
|
||||
@@ -167,7 +177,10 @@ namespace Jackett.Common.Indexers
|
||||
foreach (var row in rows.Skip(1))
|
||||
{
|
||||
if (row.Children.Length == 2)
|
||||
continue; // fix bug with search: cohen
|
||||
{
|
||||
// fix bug with search: cohen
|
||||
continue;
|
||||
}
|
||||
|
||||
var mainLink = row.Children[2].QuerySelector("a");
|
||||
var title = mainLink.TextContent;
|
||||
|
@@ -24,9 +24,10 @@ namespace Jackett.Common.Indexers
|
||||
public override string Id => "lostfilm";
|
||||
public override string Name => "LostFilm.tv";
|
||||
public override string Description => "Unique portal about foreign series";
|
||||
public override string SiteLink { get; protected set; } = "https://www.lostfilm.run/";
|
||||
public override string SiteLink { get; protected set; } = "https://www.lostfilm.life/";
|
||||
public override string[] AlternativeSiteLinks => new[]
|
||||
{
|
||||
"https://www.lostfilm.life/",
|
||||
"https://www.lostfilm.run/",
|
||||
"https://www.lostfilmtv.site/",
|
||||
"https://www.lostfilm.tv/",
|
||||
@@ -40,7 +41,7 @@ namespace Jackett.Common.Indexers
|
||||
public override string[] LegacySiteLinks => new[]
|
||||
{
|
||||
"https://lostfilm.site",
|
||||
"https://lostfilm.tw/",
|
||||
"https://lostfilm.tw/"
|
||||
};
|
||||
public override string Language => "ru-RU";
|
||||
public override string Type => "semi-private";
|
||||
|
@@ -1,336 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Specialized;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Globalization;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using Jackett.Common.Exceptions;
|
||||
using Jackett.Common.Models;
|
||||
using Jackett.Common.Models.IndexerConfig;
|
||||
using Jackett.Common.Services.Interfaces;
|
||||
using Jackett.Common.Utils;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using NLog;
|
||||
using static Jackett.Common.Models.IndexerConfig.ConfigurationData;
|
||||
|
||||
namespace Jackett.Common.Indexers
|
||||
{
|
||||
[ExcludeFromCodeCoverage]
|
||||
public class RarBG : IndexerBase
|
||||
{
|
||||
public override string Id => "rarbg";
|
||||
public override string Name => "RARBG";
|
||||
public override string Description => "RARBG is a Public torrent site for MOVIES / TV / GENERAL";
|
||||
public override string SiteLink { get; protected set; } = "https://rarbg.to/";
|
||||
public override Encoding Encoding => Encoding.GetEncoding("windows-1252");
|
||||
public override string Language => "en-US";
|
||||
public override string Type => "public";
|
||||
|
||||
public override TorznabCapabilities TorznabCaps => SetCapabilities();
|
||||
|
||||
// API doc: https://torrentapi.org/apidocs_v2.txt?app_id=Jackett
|
||||
private string ApiEndpoint => ((StringConfigurationItem)configData.GetDynamic("apiEndpoint")).Value;
|
||||
private readonly TimeSpan TokenDuration = TimeSpan.FromMinutes(14); // 15 minutes expiration
|
||||
private readonly string _appId;
|
||||
private string _token;
|
||||
private DateTime _lastTokenFetch;
|
||||
private string _sort;
|
||||
|
||||
private new ConfigurationData configData => base.configData;
|
||||
|
||||
public RarBG(IIndexerConfigurationService configService, Utils.Clients.WebClient wc, Logger l,
|
||||
IProtectionService ps, ICacheService cs)
|
||||
: base(configService: configService,
|
||||
client: wc,
|
||||
logger: l,
|
||||
p: ps,
|
||||
cacheService: cs,
|
||||
configData: new ConfigurationData())
|
||||
{
|
||||
webclient.requestDelay = 5; // The api has a 1req/2s limit
|
||||
|
||||
var ConfigApiEndpoint = new StringConfigurationItem("API URL") { Value = "https://torrentapi.org/pubapi_v2.php" };
|
||||
configData.AddDynamic("apiEndpoint", ConfigApiEndpoint);
|
||||
|
||||
var sort = new SingleSelectConfigurationItem("Sort requested from site", new Dictionary<string, string>
|
||||
{
|
||||
{"last", "created"},
|
||||
{"seeders", "seeders"},
|
||||
{"leechers", "leechers"}
|
||||
})
|
||||
{ Value = "last" };
|
||||
configData.AddDynamic("sort", sort);
|
||||
|
||||
_appId = "ttekcaJ_" + EnvironmentUtil.JackettVersion();
|
||||
}
|
||||
|
||||
private TorznabCapabilities SetCapabilities()
|
||||
{
|
||||
var caps = new TorznabCapabilities
|
||||
{
|
||||
TvSearchParams = new List<TvSearchParam>
|
||||
{
|
||||
TvSearchParam.Q, TvSearchParam.Season, TvSearchParam.Ep, TvSearchParam.ImdbId, TvSearchParam.TmdbId, TvSearchParam.TvdbId
|
||||
},
|
||||
MovieSearchParams = new List<MovieSearchParam>
|
||||
{
|
||||
MovieSearchParam.Q, MovieSearchParam.ImdbId, MovieSearchParam.TmdbId
|
||||
},
|
||||
MusicSearchParams = new List<MusicSearchParam>
|
||||
{
|
||||
MusicSearchParam.Q
|
||||
},
|
||||
TvSearchImdbAvailable = true
|
||||
};
|
||||
|
||||
//caps.Categories.AddCategoryMapping(4, TorznabCatType.XXX, "XXX (18+)"); // 3x is not supported by API #11848
|
||||
caps.Categories.AddCategoryMapping(14, TorznabCatType.MoviesSD, "Movies/XVID");
|
||||
caps.Categories.AddCategoryMapping(17, TorznabCatType.MoviesSD, "Movies/x264");
|
||||
caps.Categories.AddCategoryMapping(18, TorznabCatType.TVSD, "TV Episodes");
|
||||
caps.Categories.AddCategoryMapping(23, TorznabCatType.AudioMP3, "Music/MP3");
|
||||
caps.Categories.AddCategoryMapping(25, TorznabCatType.AudioLossless, "Music/FLAC");
|
||||
caps.Categories.AddCategoryMapping(27, TorznabCatType.PCGames, "Games/PC ISO");
|
||||
caps.Categories.AddCategoryMapping(28, TorznabCatType.PCGames, "Games/PC RIP");
|
||||
caps.Categories.AddCategoryMapping(32, TorznabCatType.ConsoleXBox360, "Games/XBOX-360");
|
||||
caps.Categories.AddCategoryMapping(33, TorznabCatType.PCISO, "Software/PC ISO");
|
||||
caps.Categories.AddCategoryMapping(40, TorznabCatType.ConsolePS3, "Games/PS3");
|
||||
caps.Categories.AddCategoryMapping(41, TorznabCatType.TVHD, "TV HD Episodes");
|
||||
caps.Categories.AddCategoryMapping(42, TorznabCatType.MoviesBluRay, "Movies/Full BD");
|
||||
caps.Categories.AddCategoryMapping(44, TorznabCatType.MoviesHD, "Movies/x264/1080");
|
||||
caps.Categories.AddCategoryMapping(45, TorznabCatType.MoviesHD, "Movies/x264/720");
|
||||
caps.Categories.AddCategoryMapping(46, TorznabCatType.MoviesBluRay, "Movies/BD Remux");
|
||||
caps.Categories.AddCategoryMapping(47, TorznabCatType.Movies3D, "Movies/x264/3D");
|
||||
caps.Categories.AddCategoryMapping(48, TorznabCatType.MoviesHD, "Movies/XVID/720");
|
||||
caps.Categories.AddCategoryMapping(49, TorznabCatType.TVUHD, "TV UHD Episodes");
|
||||
// torrentapi.org returns "Movies/TV-UHD-episodes" for some reason
|
||||
// possibly because thats what the category is called on the /top100.php page
|
||||
caps.Categories.AddCategoryMapping(49, TorznabCatType.TVUHD, "Movies/TV-UHD-episodes");
|
||||
caps.Categories.AddCategoryMapping(50, TorznabCatType.MoviesUHD, "Movies/x264/4k");
|
||||
caps.Categories.AddCategoryMapping(51, TorznabCatType.MoviesUHD, "Movies/x265/4k");
|
||||
caps.Categories.AddCategoryMapping(52, TorznabCatType.MoviesUHD, "Movs/x265/4k/HDR");
|
||||
caps.Categories.AddCategoryMapping(53, TorznabCatType.ConsolePS4, "Games/PS4");
|
||||
caps.Categories.AddCategoryMapping(54, TorznabCatType.MoviesHD, "Movies/x265/1080");
|
||||
|
||||
return caps;
|
||||
}
|
||||
|
||||
public override void LoadValuesFromJson(JToken jsonConfig, bool useProtectionService = false)
|
||||
{
|
||||
base.LoadValuesFromJson(jsonConfig, useProtectionService);
|
||||
|
||||
var sort = (SingleSelectConfigurationItem)configData.GetDynamic("sort");
|
||||
_sort = sort != null ? sort.Value : "last";
|
||||
}
|
||||
|
||||
public override async Task<IndexerConfigurationStatus> ApplyConfiguration(JToken configJson)
|
||||
{
|
||||
LoadValuesFromJson(configJson);
|
||||
var releases = await PerformQuery(new TorznabQuery());
|
||||
|
||||
await ConfigureIfOK(string.Empty, releases.Any(), () =>
|
||||
throw new Exception("Could not find releases from this URL"));
|
||||
|
||||
return IndexerConfigurationStatus.Completed;
|
||||
}
|
||||
|
||||
protected override async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query)
|
||||
=> await PerformQueryWithRetry(query, true);
|
||||
|
||||
private async Task<IEnumerable<ReleaseInfo>> PerformQueryWithRetry(TorznabQuery query, bool retry)
|
||||
{
|
||||
var releases = new List<ReleaseInfo>();
|
||||
|
||||
// check the token and renewal if necessary
|
||||
await RenewalTokenAsync();
|
||||
|
||||
var response = await RequestWithCookiesAsync(BuildSearchUrl(query));
|
||||
var responseCode = (int)response.Status;
|
||||
|
||||
switch (responseCode)
|
||||
{
|
||||
case 429:
|
||||
throw new TooManyRequestsException($"Rate limited with StatusCode {responseCode}, retry in 2 minutes", TimeSpan.FromMinutes(2));
|
||||
case 520:
|
||||
throw new TooManyRequestsException($"Rate limited with StatusCode {responseCode}, retry in 3 minutes", TimeSpan.FromMinutes(3));
|
||||
case (int)HttpStatusCode.OK:
|
||||
break;
|
||||
default:
|
||||
throw new Exception($"Indexer API call returned an unexpected StatusCode [{responseCode}]");
|
||||
}
|
||||
|
||||
var jsonContent = JObject.Parse(response.ContentString);
|
||||
var errorCode = jsonContent.Value<int>("error_code");
|
||||
switch (errorCode)
|
||||
{
|
||||
case 0: // valid response with results
|
||||
break;
|
||||
case 2:
|
||||
case 4: // invalid token
|
||||
await RenewalTokenAsync(true); // force renewal token
|
||||
response = await RequestWithCookiesAsync(BuildSearchUrl(query));
|
||||
jsonContent = JObject.Parse(response.ContentString);
|
||||
break;
|
||||
case 5: // Too many requests per second. Maximum requests allowed are 1req/2sec Please try again later!
|
||||
if (retry)
|
||||
{
|
||||
logger.Warn("torrentapi.org returned code 5 Too many requests per second, retrying after 5 secs");
|
||||
return await PerformQueryWithRetry(query, false);
|
||||
}
|
||||
|
||||
throw new TooManyRequestsException("Rate limited, retry in 2 minutes", TimeSpan.FromMinutes(2));
|
||||
case 8: // search_imdb not found, see issue #12466 (no longer used, has been replaced with error 10)
|
||||
case 9: // invalid imdb, see Radarr #1845
|
||||
case 13: // invalid tmdb, invalid tvdb
|
||||
return releases;
|
||||
case 10: // imdb not found, see issue #1486
|
||||
case 14: // tmdb not found (see Radarr #7625), thetvdb not found
|
||||
case 20: // no results found
|
||||
if (jsonContent.Value<int>("rate_limit") is 1 && jsonContent.Value<JArray>("torrent_results") == null)
|
||||
throw new TooManyRequestsException("Rate limited, retry in 5 minutes", TimeSpan.FromMinutes(5));
|
||||
|
||||
// the api returns "no results" in some valid queries. we do one retry on this case but we can't do more
|
||||
// because we can't distinguish between search without results and api malfunction
|
||||
return retry ? await PerformQueryWithRetry(query, false) : releases;
|
||||
default:
|
||||
throw new Exception($"Unknown error code: {errorCode}. Response: {response.ContentString}");
|
||||
}
|
||||
|
||||
if (jsonContent.Value<JArray>("torrent_results") == null)
|
||||
return releases;
|
||||
|
||||
try
|
||||
{
|
||||
foreach (var item in jsonContent.Value<JArray>("torrent_results"))
|
||||
{
|
||||
var magnetStr = item.Value<string>("download");
|
||||
var magnetUri = new Uri(magnetStr);
|
||||
|
||||
// #11021 we can't use the magnet link as guid because they are using random ports
|
||||
var infoHash = magnetStr.Split(':')[3].Split('&')[0];
|
||||
var guid = new Uri(SiteLink + "infohash/" + infoHash);
|
||||
|
||||
// append app_id to prevent api server returning 403 forbidden
|
||||
var details = new Uri(item.Value<string>("info_page") + "&app_id=" + _appId);
|
||||
|
||||
var seeders = item.Value<int>("seeders");
|
||||
var leechers = item.Value<int>("leechers");
|
||||
|
||||
var release = new ReleaseInfo
|
||||
{
|
||||
Guid = guid,
|
||||
Details = details,
|
||||
MagnetUri = magnetUri,
|
||||
Title = WebUtility.HtmlDecode(item.Value<string>("title")).Trim(),
|
||||
Category = MapTrackerCatDescToNewznab(item.Value<string>("category")),
|
||||
InfoHash = infoHash,
|
||||
PublishDate = DateTime.Parse(item.Value<string>("pubdate"), CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal),
|
||||
Seeders = seeders,
|
||||
Peers = leechers + seeders,
|
||||
Size = item.Value<long>("size"),
|
||||
DownloadVolumeFactor = 0,
|
||||
UploadVolumeFactor = 1
|
||||
};
|
||||
|
||||
var episodeInfo = item.Value<JToken>("episode_info");
|
||||
if (episodeInfo.HasValues)
|
||||
{
|
||||
release.Imdb = ParseUtil.GetImdbId(episodeInfo.Value<string>("imdb"));
|
||||
release.TVDBId = episodeInfo.Value<long?>("tvdb");
|
||||
release.RageID = episodeInfo.Value<long?>("tvrage");
|
||||
release.TMDb = episodeInfo.Value<long?>("themoviedb");
|
||||
}
|
||||
|
||||
releases.Add(release);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
OnParseError(response.ContentString, ex);
|
||||
}
|
||||
|
||||
return releases;
|
||||
}
|
||||
|
||||
private string BuildSearchUrl(TorznabQuery query)
|
||||
{
|
||||
var searchString = query.GetQueryString();
|
||||
var episodeSearchString = query.GetEpisodeSearchString();
|
||||
var qc = new NameValueCollection
|
||||
{
|
||||
{ "token", _token },
|
||||
{ "format", "json_extended" },
|
||||
{ "app_id", _appId },
|
||||
{ "limit", "100" },
|
||||
{ "ranked", "0" },
|
||||
{ "sort", _sort }
|
||||
};
|
||||
|
||||
if (query.IsTVSearch && !string.IsNullOrWhiteSpace(episodeSearchString) && query.ImdbID != null)
|
||||
{
|
||||
qc.Add("mode", "search");
|
||||
qc.Add("search_imdb", query.ImdbID);
|
||||
qc.Add("search_string", episodeSearchString);
|
||||
}
|
||||
else if (query.ImdbID != null)
|
||||
{
|
||||
qc.Add("mode", "search");
|
||||
qc.Add("search_imdb", query.ImdbID);
|
||||
}
|
||||
else if (query.TmdbID != null)
|
||||
{
|
||||
qc.Add("mode", "search");
|
||||
qc.Add("search_themoviedb", query.TmdbID.ToString());
|
||||
}
|
||||
else if (query.IsTVSearch && query.TvdbID != null)
|
||||
{
|
||||
qc.Add("mode", "search");
|
||||
qc.Add("search_tvdb", query.TvdbID.ToString());
|
||||
}
|
||||
else if (!string.IsNullOrWhiteSpace(searchString))
|
||||
{
|
||||
// ignore ' (e.g. search for america's Next Top Model)
|
||||
searchString = searchString.Replace("'", "");
|
||||
qc.Add("mode", "search");
|
||||
qc.Add("search_string", searchString);
|
||||
}
|
||||
else
|
||||
{
|
||||
qc.Add("mode", "list");
|
||||
qc.Remove("sort");
|
||||
}
|
||||
|
||||
var querycats = MapTorznabCapsToTrackers(query);
|
||||
if (querycats.Count == 0)
|
||||
// default to all, without specifying it some categories are missing (e.g. games), see #4146
|
||||
querycats = GetAllTrackerCategories();
|
||||
var cats = string.Join(";", querycats);
|
||||
qc.Add("category", cats);
|
||||
|
||||
webclient.requestDelay = qc.Get("mode") == "list" ? 31 : 5;
|
||||
|
||||
return ApiEndpoint + "?" + qc.GetQueryString();
|
||||
}
|
||||
|
||||
private async Task RenewalTokenAsync(bool force = false)
|
||||
{
|
||||
if (!HasValidToken || force)
|
||||
{
|
||||
var qc = new NameValueCollection
|
||||
{
|
||||
{ "get_token", "get_token" },
|
||||
{ "app_id", _appId }
|
||||
};
|
||||
var tokenUrl = ApiEndpoint + "?" + qc.GetQueryString();
|
||||
var result = await RequestWithCookiesAndRetryAsync(tokenUrl);
|
||||
var json = JObject.Parse(result.ContentString);
|
||||
_token = json.Value<string>("token");
|
||||
_lastTokenFetch = DateTime.Now;
|
||||
}
|
||||
}
|
||||
|
||||
private bool HasValidToken => !string.IsNullOrEmpty(_token) && _lastTokenFetch > DateTime.Now - TokenDuration;
|
||||
}
|
||||
}
|
@@ -8,6 +8,7 @@ using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
using AngleSharp.Dom;
|
||||
using AngleSharp.Html.Parser;
|
||||
using Jackett.Common.Extensions;
|
||||
using Jackett.Common.Models;
|
||||
using Jackett.Common.Models.IndexerConfig;
|
||||
using Jackett.Common.Models.IndexerConfig.Bespoke;
|
||||
@@ -119,7 +120,6 @@ namespace Jackett.Common.Indexers
|
||||
caps.Categories.AddCategoryMapping(2220, TorznabCatType.MoviesDVD, "|- Индийское кино (DVD Video)");
|
||||
caps.Categories.AddCategoryMapping(1670, TorznabCatType.MoviesDVD, "|- Грайндхаус (DVD Video)");
|
||||
caps.Categories.AddCategoryMapping(2198, TorznabCatType.MoviesHD, "HD Video");
|
||||
caps.Categories.AddCategoryMapping(1457, TorznabCatType.MoviesUHD, "|- UHD Video");
|
||||
caps.Categories.AddCategoryMapping(2199, TorznabCatType.MoviesHD, "|- Классика мирового кинематографа (HD Video)");
|
||||
caps.Categories.AddCategoryMapping(313, TorznabCatType.MoviesHD, "|- Зарубежное кино (HD Video)");
|
||||
caps.Categories.AddCategoryMapping(312, TorznabCatType.MoviesHD, "|- Наше кино (HD Video)");
|
||||
@@ -128,6 +128,12 @@ namespace Jackett.Common.Indexers
|
||||
caps.Categories.AddCategoryMapping(2339, TorznabCatType.MoviesHD, "|- Арт-хаус и авторское кино (HD Video)");
|
||||
caps.Categories.AddCategoryMapping(140, TorznabCatType.MoviesHD, "|- Индийское кино (HD Video)");
|
||||
caps.Categories.AddCategoryMapping(194, TorznabCatType.MoviesHD, "|- Грайндхаус (HD Video)");
|
||||
caps.Categories.AddCategoryMapping(718, TorznabCatType.MoviesUHD, "UHD Video");
|
||||
caps.Categories.AddCategoryMapping(775, TorznabCatType.MoviesUHD, "|- Классика мирового кинематографа (UHD Video)");
|
||||
caps.Categories.AddCategoryMapping(1457, TorznabCatType.MoviesUHD, "|- Зарубежное кино (UHD Video)");
|
||||
caps.Categories.AddCategoryMapping(1940, TorznabCatType.MoviesUHD, "|- Наше кино (UHD Video)");
|
||||
caps.Categories.AddCategoryMapping(272, TorznabCatType.MoviesUHD, "|- Азиатские фильмы (UHD Video)");
|
||||
caps.Categories.AddCategoryMapping(271, TorznabCatType.MoviesUHD, "|- Арт-хаус и авторское кино (UHD Video)");
|
||||
caps.Categories.AddCategoryMapping(352, TorznabCatType.Movies3D, "3D/Стерео Кино, Видео, TV и Спорт");
|
||||
caps.Categories.AddCategoryMapping(549, TorznabCatType.Movies3D, "|- 3D Кинофильмы");
|
||||
caps.Categories.AddCategoryMapping(1213, TorznabCatType.Movies3D, "|- 3D Мультфильмы");
|
||||
@@ -152,6 +158,7 @@ namespace Jackett.Common.Indexers
|
||||
caps.Categories.AddCategoryMapping(815, TorznabCatType.TVSD, "|- Мультсериалы (SD Video)");
|
||||
caps.Categories.AddCategoryMapping(816, TorznabCatType.TVHD, "|- Мультсериалы (DVD Video)");
|
||||
caps.Categories.AddCategoryMapping(1460, TorznabCatType.TVHD, "|- Мультсериалы (HD Video)");
|
||||
caps.Categories.AddCategoryMapping(498, TorznabCatType.TVUHD, "|- Мультсериалы (UHD Video)");
|
||||
caps.Categories.AddCategoryMapping(33, TorznabCatType.TVAnime, "Аниме");
|
||||
caps.Categories.AddCategoryMapping(1106, TorznabCatType.TVAnime, "|- Онгоинги (HD Video)");
|
||||
caps.Categories.AddCategoryMapping(1105, TorznabCatType.TVAnime, "|- Аниме (HD Video)");
|
||||
@@ -231,7 +238,6 @@ namespace Jackett.Common.Indexers
|
||||
caps.Categories.AddCategoryMapping(1949, TorznabCatType.TVHD, "|- Черное зеркало / Black Mirror (HD Video)");
|
||||
caps.Categories.AddCategoryMapping(1498, TorznabCatType.TVHD, "|- Для некондиционных раздач (HD Video)");
|
||||
caps.Categories.AddCategoryMapping(911, TorznabCatType.TVForeign, "Сериалы Латинской Америки, Турции и Индии");
|
||||
caps.Categories.AddCategoryMapping(1493, TorznabCatType.TVForeign, "|- Актёры и актрисы латиноамериканских сериалов");
|
||||
caps.Categories.AddCategoryMapping(325, TorznabCatType.TVForeign, "|- Сериалы Аргентины");
|
||||
caps.Categories.AddCategoryMapping(534, TorznabCatType.TVForeign, "|- Сериалы Бразилии");
|
||||
caps.Categories.AddCategoryMapping(594, TorznabCatType.TVForeign, "|- Сериалы Венесуэлы");
|
||||
@@ -239,11 +245,8 @@ namespace Jackett.Common.Indexers
|
||||
caps.Categories.AddCategoryMapping(607, TorznabCatType.TVForeign, "|- Сериалы Колумбии");
|
||||
caps.Categories.AddCategoryMapping(1574, TorznabCatType.TVForeign, "|- Сериалы Латинской Америки с озвучкой (раздачи папками)");
|
||||
caps.Categories.AddCategoryMapping(1539, TorznabCatType.TVForeign, "|- Сериалы Латинской Америки с субтитрами");
|
||||
caps.Categories.AddCategoryMapping(1940, TorznabCatType.TVForeign, "|- Официальные краткие версии сериалов Латинской Америки");
|
||||
caps.Categories.AddCategoryMapping(694, TorznabCatType.TVForeign, "|- Сериалы Мексики");
|
||||
caps.Categories.AddCategoryMapping(775, TorznabCatType.TVForeign, "|- Сериалы Перу, Сальвадора, Чили и других стран");
|
||||
caps.Categories.AddCategoryMapping(781, TorznabCatType.TVForeign, "|- Сериалы совместного производства");
|
||||
caps.Categories.AddCategoryMapping(718, TorznabCatType.TVForeign, "|- Сериалы США (латиноамериканские)");
|
||||
caps.Categories.AddCategoryMapping(704, TorznabCatType.TVForeign, "|- Сериалы Турции");
|
||||
caps.Categories.AddCategoryMapping(1537, TorznabCatType.TVForeign, "|- Для некондиционных раздач");
|
||||
caps.Categories.AddCategoryMapping(2100, TorznabCatType.TVForeign, "Азиатские сериалы");
|
||||
@@ -381,7 +384,7 @@ namespace Jackett.Common.Indexers
|
||||
caps.Categories.AddCategoryMapping(1229, TorznabCatType.TVSport, "|- Чемпионат Мира 2022 (финальный турнир)");
|
||||
caps.Categories.AddCategoryMapping(1693, TorznabCatType.TVSport, "|- Чемпионат Мира 2022 (отбор)");
|
||||
caps.Categories.AddCategoryMapping(2532, TorznabCatType.TVSport, "|- Чемпионат Европы 2020 [2021] (финальный турнир)");
|
||||
caps.Categories.AddCategoryMapping(136, TorznabCatType.TVSport, "|- Чемпионат Европы 2020 [2021] (отбор)");
|
||||
caps.Categories.AddCategoryMapping(136, TorznabCatType.TVSport, "|- Чемпионат Европы 2024 (отбор)");
|
||||
caps.Categories.AddCategoryMapping(592, TorznabCatType.TVSport, "|- Лига Наций");
|
||||
caps.Categories.AddCategoryMapping(2533, TorznabCatType.TVSport, "|- Чемпионат Мира 2018 (игры)");
|
||||
caps.Categories.AddCategoryMapping(1952, TorznabCatType.TVSport, "|- Чемпионат Мира 2018 (обзорные передачи, документалистика)");
|
||||
@@ -427,8 +430,7 @@ namespace Jackett.Common.Indexers
|
||||
caps.Categories.AddCategoryMapping(1527, TorznabCatType.TVSport, "|- International Wrestling");
|
||||
caps.Categories.AddCategoryMapping(2069, TorznabCatType.TVSport, "|- Oldschool Wrestling");
|
||||
caps.Categories.AddCategoryMapping(1323, TorznabCatType.TVSport, "|- Documentary Wrestling");
|
||||
caps.Categories.AddCategoryMapping(1346, TorznabCatType.TVSport, "Для дооформления раздач");
|
||||
caps.Categories.AddCategoryMapping(1411, TorznabCatType.TVSport, "|- Сканирование, обработка сканов");
|
||||
caps.Categories.AddCategoryMapping(1411, TorznabCatType.Books, "|- Сканирование, обработка сканов");
|
||||
caps.Categories.AddCategoryMapping(21, TorznabCatType.Books, "Книги и журналы (общий раздел)");
|
||||
caps.Categories.AddCategoryMapping(2157, TorznabCatType.Books, "|- Кино, театр, ТВ, мультипликация, цирк");
|
||||
caps.Categories.AddCategoryMapping(765, TorznabCatType.Books, "|- Рисунок, графический дизайн");
|
||||
@@ -1441,53 +1443,52 @@ namespace Jackett.Common.Indexers
|
||||
var result = await RequestLoginAndFollowRedirect(LoginUrl, pairs, CookieHeader, true, null, LoginUrl, true);
|
||||
await ConfigureIfOK(result.Cookies, result.ContentString != null && result.ContentString.Contains("id=\"logged-in-username\""), () =>
|
||||
{
|
||||
var errorMessage = "Unknown error message, please report";
|
||||
var parser = new HtmlParser();
|
||||
var doc = parser.ParseDocument(result.ContentString);
|
||||
var errormsg = doc.QuerySelector("div.msg-main");
|
||||
if (errormsg != null)
|
||||
errorMessage = errormsg.TextContent;
|
||||
errormsg = doc.QuerySelector("h4[class=\"warnColor1 tCenter mrg_16\"]");
|
||||
if (errormsg != null)
|
||||
errorMessage = errormsg.TextContent;
|
||||
var errorMessage = doc.QuerySelector("h4.warnColor1.tCenter.mrg_16, div.msg-main")?.TextContent.Trim();
|
||||
|
||||
throw new ExceptionWithConfigData(errorMessage, configData);
|
||||
throw new ExceptionWithConfigData(errorMessage ?? "RuTracker authentication failed", configData);
|
||||
});
|
||||
return IndexerConfigurationStatus.RequiresTesting;
|
||||
}
|
||||
|
||||
protected override async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query)
|
||||
{
|
||||
var searchUrl = CreateSearchUrlForQuery(query);
|
||||
|
||||
var results = await RequestWithCookiesAsync(searchUrl);
|
||||
if (!results.ContentString.Contains("id=\"logged-in-username\""))
|
||||
{
|
||||
// re login
|
||||
await ApplyConfiguration(null);
|
||||
results = await RequestWithCookiesAsync(searchUrl);
|
||||
}
|
||||
var searchUrls = CreateSearchUrlsForQuery(query);
|
||||
|
||||
var releases = new List<ReleaseInfo>();
|
||||
|
||||
try
|
||||
foreach (var searchUrl in searchUrls)
|
||||
{
|
||||
var rows = GetReleaseRows(results);
|
||||
foreach (var row in rows)
|
||||
Console.WriteLine(searchUrl);
|
||||
|
||||
var results = await RequestWithCookiesAsync(searchUrl);
|
||||
if (!results.ContentString.Contains("id=\"logged-in-username\""))
|
||||
{
|
||||
var release = ParseReleaseRow(row);
|
||||
if (release != null)
|
||||
// re login
|
||||
await ApplyConfiguration(null);
|
||||
results = await RequestWithCookiesAsync(searchUrl);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
var rows = GetReleaseRows(results);
|
||||
foreach (var row in rows)
|
||||
{
|
||||
releases.Add(release);
|
||||
var release = ParseReleaseRow(row);
|
||||
if (release != null)
|
||||
{
|
||||
releases.Add(release);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
OnParseError(results.ContentString, ex);
|
||||
catch (Exception ex)
|
||||
{
|
||||
OnParseError(results.ContentString, ex);
|
||||
}
|
||||
}
|
||||
|
||||
return releases;
|
||||
return releases.OrderByDescending(o => o.PublishDate).ToArray();
|
||||
}
|
||||
|
||||
public override async Task<byte[]> Download(Uri link)
|
||||
@@ -1509,20 +1510,21 @@ namespace Jackett.Common.Indexers
|
||||
return await base.Download(link);
|
||||
}
|
||||
|
||||
private string CreateSearchUrlForQuery(in TorznabQuery query)
|
||||
private IEnumerable<string> CreateSearchUrlsForQuery(TorznabQuery query)
|
||||
{
|
||||
var queryCollection = new NameValueCollection();
|
||||
|
||||
var searchString = query.SearchTerm;
|
||||
// replace any space, special char, etc. with % (wildcard)
|
||||
var ReplaceRegex = new Regex("[^a-zA-Zа-яА-Я0-9]+");
|
||||
if (!string.IsNullOrWhiteSpace(searchString))
|
||||
searchString = ReplaceRegex.Replace(searchString, "%");
|
||||
{
|
||||
searchString = new Regex("[^a-zA-Zа-яА-Я0-9]+").Replace(searchString, "%");
|
||||
}
|
||||
|
||||
// if the search string is empty use the getnew view
|
||||
if (string.IsNullOrWhiteSpace(searchString))
|
||||
{
|
||||
queryCollection.Add("nm", searchString);
|
||||
queryCollection.Set("nm", searchString);
|
||||
}
|
||||
else // use the normal search
|
||||
{
|
||||
@@ -1535,15 +1537,24 @@ namespace Jackett.Common.Indexers
|
||||
{
|
||||
searchString += " Серии: " + query.Episode;
|
||||
}
|
||||
queryCollection.Add("nm", searchString);
|
||||
queryCollection.Set("nm", searchString);
|
||||
}
|
||||
|
||||
if (query.HasSpecifiedCategories)
|
||||
queryCollection.Add("f", string.Join(",", MapTorznabCapsToTrackers(query)));
|
||||
{
|
||||
var trackerCategories = MapTorznabCapsToTrackers(query).Distinct().ToList();
|
||||
|
||||
var searchUrl = SearchUrl + "?" + queryCollection.GetQueryString();
|
||||
foreach (var trackerCategoriesChunk in trackerCategories.ChunkBy(200))
|
||||
{
|
||||
queryCollection.Set("f", string.Join(",", trackerCategoriesChunk));
|
||||
|
||||
return searchUrl;
|
||||
yield return SearchUrl + "?" + queryCollection.GetQueryString();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
yield return SearchUrl + "?" + queryCollection.GetQueryString();
|
||||
}
|
||||
}
|
||||
|
||||
private IHtmlCollection<IElement> GetReleaseRows(WebResult results)
|
||||
|
@@ -5,12 +5,14 @@ namespace Jackett.Common.Models.IndexerConfig.Bespoke
|
||||
[ExcludeFromCodeCoverage]
|
||||
internal class ConfigurationDataBakaBT : ConfigurationDataBasicLogin
|
||||
{
|
||||
public BoolConfigurationItem FreeleechOnly { get; private set; }
|
||||
public BoolConfigurationItem AddRomajiTitle { get; private set; }
|
||||
public BoolConfigurationItem AppendSeason { get; private set; }
|
||||
|
||||
public ConfigurationDataBakaBT(string instructionMessageOptional = null)
|
||||
: base(instructionMessageOptional)
|
||||
{
|
||||
FreeleechOnly = new BoolConfigurationItem("Show freeleech only") { Value = false };
|
||||
AddRomajiTitle = new BoolConfigurationItem("Add releases for Romaji Title") { Value = true };
|
||||
AppendSeason = new BoolConfigurationItem("Append Season for Sonarr Compatibility") { Value = false };
|
||||
}
|
||||
|
@@ -0,0 +1,15 @@
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
|
||||
namespace Jackett.Common.Models.IndexerConfig.Bespoke
|
||||
{
|
||||
[ExcludeFromCodeCoverage]
|
||||
internal class ConfigurationDataSpeedAppTracker : ConfigurationDataBasicLoginWithEmail
|
||||
{
|
||||
public BoolConfigurationItem FreeleechOnly { get; private set; }
|
||||
|
||||
public ConfigurationDataSpeedAppTracker()
|
||||
{
|
||||
FreeleechOnly = new BoolConfigurationItem("Show freeleech only") { Value = false };
|
||||
}
|
||||
}
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user