Compare commits

...

59 Commits

Author SHA1 Message Date
ilike2burnthing
c8466298c0 installer: apply modify permissions for everyone group. resolves #12864 (#12872) 2022-01-22 23:23:49 +00:00
ilike2burnthing
34d6933302 codeql: specify windows-2019
avoid breaking update to 2022 for windows-latest - https://github.com/actions/virtual-environments/issues/4856
2022-01-22 23:20:21 +00:00
Garfield69
f4fc81e38b hawke-uno: fix imdbid/poster 2022-01-23 09:44:11 +13:00
Garfield69
5d4a4c05d7 assorted unit3d api: fix posters and/or imdbid 2022-01-23 09:21:22 +13:00
Garfield69
3d9225be07 thehorrorcharnel: expired CA 2022-01-23 08:32:25 +13:00
Garfield69
f2722789d8 redbits: add new cat 2022-01-23 08:28:17 +13:00
Garfield69
4bd9372a09 insanetracker: add new cats 2022-01-23 08:19:43 +13:00
Garfield69
bdc54a2c03 cpasbienclone: new domain 2022-01-22 11:12:58 +13:00
Garfield69
78034f77b6 retracker-ru: add new cats 2022-01-22 11:08:21 +13:00
Garfield69
df5a5d4fff mejortorrent: new domain *.net -> *.org 2022-01-22 10:58:15 +13:00
Garfield69
ccb1604296 iv-torrents: update cats 2022-01-21 20:20:05 +13:00
Garfield69
a799f640da lastfiles: new layout
also drop noposter.png
2022-01-21 19:15:08 +13:00
Garfield69
d43ac08372 opencd: https://github.com/Prowlarr/Prowlarr/issues/792 2022-01-21 16:49:39 +13:00
Garfield69
cfff7e4c1d Revert "opencd https => http (#12863)"
This reverts commit 22ebc5170c.
2022-01-21 16:47:06 +13:00
bakerboy448
22ebc5170c opencd https => http (#12863)
https://github.com/Prowlarr/Prowlarr/issues/792
2022-01-21 11:48:02 +13:00
Garfield69
76c8dd45e3 assorted torrent*: bump domains 2022-01-21 08:37:27 +13:00
Garfield69
c8dfa99b28 torrent-turk: add new cat 2022-01-20 15:57:24 +13:00
ilike2burnthing
67e054468d cardigann: fix .query.season (#12857)
Co-authored-by: Qstick <qstick@users.noreply.github.com>
2022-01-19 23:53:45 +00:00
Garfield69
3afd31ea1c torrentfunk: empty search returns no results 2022-01-20 08:04:07 +13:00
ilike2burnthing
ec8e141ac9 cardigann: add xml parsing support (#12848)
Co-authored-by: garfield69 <garfieldsixtynine@gmail.com>
Co-authored-by: Qstick
2022-01-19 18:52:45 +00:00
ilike2burnthing
0cd4eb2b69 dontorrent: typo fix 2022-01-19 15:19:29 +00:00
Garfield69
c9b4c988d7 zetorrents: new domain *.tv -> *.bz 2022-01-19 17:16:29 +13:00
Garfield69
be4cf5e2c9 dontorrent: new domain *.li -> *.it 2022-01-19 17:13:41 +13:00
Garfield69
c46cb2d8bb add uhd-heaven a private site. resolves #12855 2022-01-19 13:28:06 +13:00
ilike2burnthing
d34f1558b7 iptorrents: add sort setting. resolves #12853 (#12856) 2022-01-19 00:16:19 +00:00
ilike2burnthing
2936a1c824 docspedia: add new cat 2022-01-18 18:53:10 +00:00
Garfield69
8ecace57e8 torrentseeds: add book search and new cat 2022-01-19 07:49:31 +13:00
Garfield69
baddd7bcff reelfix: cat desc adjustment 2022-01-19 07:49:01 +13:00
Garfield69
9fa99e6ac4 finvip: add new cat
and adjust desc for others
2022-01-19 07:48:45 +13:00
Garfield69
98374d4055 brsociety: cat desc adjustments 2022-01-19 07:48:12 +13:00
ilike2burnthing
d99fd72269 installer: switch to taskkill. resolves #12780 (#12852) 2022-01-18 15:56:18 +00:00
ilike2burnthing
cd2198bfe1 dontorrent: convert from todotorrents. resolves #6214 (#12849) 2022-01-18 01:43:27 +00:00
ilike2burnthing
96fef53dae datascene-api: update category description 2022-01-17 21:34:12 +00:00
ilike2burnthing
5b4df4a6d9 swarmazon: change to categorydesc
cat id isn't present for search.php results
latest.php has more torrents
limit isn't used
2022-01-17 14:30:05 +00:00
Garfield69
5b962958ff swarmazon: update category detection 2022-01-17 18:20:13 +13:00
ilike2burnthing
3c4a2adbae installer: kill active instances of jackett. resolves #12780 (#12840) 2022-01-17 01:35:45 +00:00
ilike2burnthing
af6f85fc81 rintornet: switch to categorydesc cat detection. (#12845) 2022-01-17 14:33:31 +13:00
Diego Heras
cb7a4861a0 core: use proxy for cover/poster images url. resolves #12761 (#12843) 2022-01-16 23:38:58 +00:00
ilike2burnthing
28db1b63f2 assorted unit3d API: categorydesc remove comment (#12844) 2022-01-16 23:19:03 +00:00
Garfield69
928864afb2 assorted unit3d API: use fields categorydesc for cat detection 2022-01-17 09:20:19 +13:00
Garfield69
f19f753dd1 assorted unit3d API: improve apikey error message 2022-01-17 09:18:17 +13:00
Garfield69
2a0eb6fac7 assorted unit3d API: use fields categorydesc for cat detection 2022-01-17 08:20:22 +13:00
Garfield69
d0413d4acc assorted unit3d API: add apikey validation 2022-01-17 08:16:53 +13:00
Diego Heras
1a9d0fc206 torrentday: add freeleech only. #9456 (#12842) 2022-01-16 19:34:50 +01:00
ilike2burnthing
2a23f98682 ebooks-shares: add vip results setting. resolves #11387
tracker doesn't support multi-category search
2022-01-16 16:03:37 +00:00
Diego Heras
a5b7e58d26 ui: search tracker name and tracker url. resolves #10870 (#12803) 2022-01-16 15:32:47 +00:00
Diego Heras
f2d21899e6 hdolimpo: validate api key when the indexer is configured (#12839) 2022-01-16 15:14:43 +01:00
Diego Heras
60d2c425e1 core: implement category_desc parser for cardigann indexers (fix) (#12838) 2022-01-16 13:44:51 +01:00
Diego Heras
02e43bd6a9 core: implement category_desc parser for cardigann indexers (#12837) 2022-01-16 13:32:35 +01:00
Diego Heras
4a6d630076 core: increate httpclient timeout for update download. resolves #12711 (#12836)
* Update download timeout => 100s => 300 s
2022-01-16 13:04:50 +01:00
Diego Heras
f11bea6429 hdolimpo: migrated to unit3d api (#12834) 2022-01-16 12:19:38 +01:00
Diego Heras
09e81da34c cinecalidad: fix parser. only latino is supported. resolves #12830 (#12833) 2022-01-16 11:30:26 +01:00
Diego Heras
42ca019942 cosmetic: dotnet format c# code (#12832) 2022-01-16 11:30:11 +01:00
Garfield69
d457cd336d cinecalidad:vnew layout #12830 2022-01-16 07:15:26 +13:00
ilike2burnthing
c254acfc46 newpct: bump domain, pt2
follow up to #12812
2022-01-15 16:54:35 +00:00
tomaskazragis
6c5a005e27 torrent.lt: fixed login, added user/password to settings (#12829) 2022-01-15 13:26:58 +00:00
Garfield69
a2b1604052 torrentqq: bump domain 2022-01-15 16:01:44 +13:00
tomaskazragis
562c826cfa torrent.lt: drop cookie method (#12824) 2022-01-15 12:29:36 +13:00
Garfield69
af1002d57e Revert "spidertk: switch to cookie method. resolves #12718"
This reverts commit b17c2482d0.
2022-01-15 06:13:10 +13:00
73 changed files with 1083 additions and 884 deletions

View File

@@ -35,7 +35,7 @@ on:
jobs:
analyze:
name: Analyze
runs-on: windows-latest
runs-on: windows-2019
permissions:
actions: read
contents: read

View File

@@ -30,6 +30,7 @@ UninstallDisplayName={#MyAppName}
Compression=lzma
SolidCompression=yes
DisableDirPage=yes
WizardStyle=modern
[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"
@@ -38,8 +39,11 @@ Name: "english"; MessagesFile: "compiler:Default.isl"
Name: "windowsService"; Description: "Install as a Windows Service"
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
[Dirs]
Name: "{commonappdata}\Jackett"; Permissions: everyone-modify
[Files]
Source: "{#MySourceFolder}\*"; DestDir: "{commonappdata}\Jackett"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "{#MySourceFolder}\*"; DestDir: "{commonappdata}\Jackett"; Flags: ignoreversion recursesubdirs createallsubdirs; Permissions: everyone-modify
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
[Icons]
@@ -47,6 +51,15 @@ Name: "{group}\{#MyAppName}"; Filename: "{commonappdata}\Jackett\{#MyAppExeName}
Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}"
Name: "{commondesktop}\{#MyAppName}"; Filename: "{commonappdata}\Jackett\{#MyAppExeName}"; Tasks: desktopicon
[Code]
function PrepareToInstall(var NeedsRestart: Boolean): String;
var
ErrorCode: Integer;
begin
ShellExec('open', 'taskkill.exe', '/f /im {#MyAppExeName}', '', SW_HIDE, ewNoWait, ErrorCode);
ShellExec('open', 'taskkill.exe', '/f /im JackettConsole.exe', '', SW_HIDE, ewNoWait, ErrorCode);
end;
[Run]
Filename: "{commonappdata}\Jackett\JackettConsole.exe"; Parameters: "--Uninstall"; Flags: waituntilterminated runhidden;
Filename: "{commonappdata}\Jackett\JackettConsole.exe"; Parameters: "--ReserveUrls"; Flags: waituntilterminated runhidden;

View File

@@ -56,6 +56,7 @@ A third-party Golang SDK for Jackett is available from [webtor-io/go-jackett](ht
* Demonoid
* DivxTotal
* dmhy
* DonTorrent
* E-Hentai
* elitetorrent
* EpubLibre
@@ -136,7 +137,6 @@ A third-party Golang SDK for Jackett is available from [webtor-io/go-jackett](ht
* sosulki
* SubsPlease
* sukebei.Nyaa.si
* TodoTorrents
* The Pirate Bay (TPB)
* Tokyo Tosho
* Torlock
@@ -581,6 +581,7 @@ A third-party Golang SDK for Jackett is available from [webtor-io/go-jackett](ht
* Twilights Zoom
* U2 (U2分享園@動漫花園) [![(invite needed)][inviteneeded]](#)
* UHDBits
* UHD-HEAVEN
* UnionGang [![(invite needed)][inviteneeded]](#)
* UnlimitZ
* Vizuk

View File

@@ -288,6 +288,12 @@ function displayConfiguredIndexersList(indexers) {
"visible": true,
"searchable": true,
"orderable": true
},
{
"targets": 2,
"visible": false,
"searchable": true,
"orderable": false
}
]
});
@@ -430,6 +436,13 @@ function displayUnconfiguredIndexersList() {
"visible": true,
"searchable": false,
"orderable": false
},
{
"name": "url",
"targets": 7,
"visible": false,
"searchable": true,
"orderable": false
}
]
});

View File

@@ -306,11 +306,12 @@
<script id="configured-indexer-table" type="text/x-handlebars-template">
<div class="tab-content configured-indexer-div">
<table id="configured-indexer-datatable" class="indexer-table dataTable compact cell-border hover stripe table table-responsive">
<table id="configured-indexer-datatable" class="indexer-table dataTable compact cell-border hover stripe table table-responsive" style="width: 100%">
<thead>
<tr>
<th>Indexer</th>
<th>Actions</th>
<th data-type="hiddendata">URL</th>
</tr>
</thead>
<tbody>
@@ -338,12 +339,15 @@
</button>
</div>
</td>
<td data-type="hiddendata">{{site_link}}</td>
</tr>
{{/each}}
</tbody>
<tfoot>
<tr>
<td colspan="2"></td>
<th></th>
<th></th>
<th data-type="hiddendata"></th>
</tr>
</tfoot>
</table>
@@ -352,7 +356,7 @@
<script id="unconfigured-indexer-table" type="text/x-handlebars-template">
<div class="unconfigured-indexer-div">
<table id="unconfigured-indexer-datatable" class="indexer-table dataTable compact cell-border hover stripe table table-responsive">
<table id="unconfigured-indexer-datatable" class="indexer-table dataTable compact cell-border hover stripe table table-responsive" style="width: 100%">
<thead>
<tr>
<th></th>
@@ -362,6 +366,7 @@
<th data-type="hiddendata">Type string</th>
<th>Language</th>
<th></th>
<th data-type="hiddendata">URL</th>
</tr>
</thead>
<tbody>
@@ -389,6 +394,7 @@
{{/if_eq}}
</div>
</td>
<td data-type="hiddendata">{{site_link}}</td>
</tr>
{{/each}}
</tbody>
@@ -401,6 +407,7 @@
<th data-type="hiddendata">Type string</th>
<th>Language</th>
<th></th>
<th data-type="hiddendata">URL</th>
</tr>
</tfoot>
</table>
@@ -736,6 +743,6 @@
</script>
<script type="text/javascript" src="../libs/api.js?changed=2017083001"></script>
<script type="text/javascript" src="../custom.js?changed=2022010901"></script>
<script type="text/javascript" src="../custom.js?changed=2022011001"></script>
</body>
</html>

View File

@@ -9,7 +9,6 @@ links:
- https://aither.cc/
caps:
# dont forget to update the case block in the search fields category
categorymappings:
- {id: 1, cat: Movies, desc: "Movie"}
- {id: 9, cat: TV/Sport, desc: "Sport"}
@@ -58,6 +57,16 @@ settings:
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
@@ -73,19 +82,8 @@ search:
selector: meta.total
fields:
category:
categorydesc:
selector: category
case:
"Movie": 1
"Sport": 9
"TV": 2
"Music": 3
"Games": 4
"Software & Apps": 10
"Ebooks & Magazines": 11
"Audiobooks": 14
"Education": 15
"XXX": 6
title:
selector: name
details:
@@ -97,8 +95,6 @@ search:
filters:
- name: replace
args: ["https://via.placeholder.com/90x135", ""]
- name: replace
args: ["https://via.placeholder.com/400x600", ""]
imdbid:
selector: imdb_id
tmdbid:

View File

@@ -9,7 +9,6 @@ links:
- https://animeworld.cx/
caps:
# dont forget to update the case block in the search fields category
categorymappings:
- {id: 1, cat: Movies/Other, desc: "Anime Filme"}
- {id: 2, cat: TV/Anime, desc: "Anime Serien"}
@@ -63,6 +62,16 @@ settings:
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
@@ -78,24 +87,8 @@ search:
selector: meta.total
fields:
category:
categorydesc:
selector: category
case:
"Anime Filme": 1
"Anime Serien": 2
"Anime Musik / OSTs": 3
"Anime Spiele": 4
"Anime Hentai": 5
"Software": 6
"Sonstiges": 7
"Serien": 9
"Spiele": 10
"Musik": 11
"Manga": 12
"Cartoon Filme": 13
"Cartoon Serie": 14
"H-Manga / Doujinshi": 15
"Filme": 8
title:
selector: name
details:
@@ -107,8 +100,6 @@ search:
filters:
- name: replace
args: ["https://via.placeholder.com/90x135", ""]
- name: replace
args: ["https://via.placeholder.com/400x600", ""]
imdbid:
selector: imdb_id
tmdbid:

View File

@@ -9,7 +9,6 @@ links:
- https://blutopia.xyz/
caps:
# dont forget to update the case block in the search fields category
categorymappings:
- {id: 1, cat: Movies, desc: "Movie"}
- {id: 2, cat: TV, desc: "TV Show"}
@@ -50,14 +49,33 @@ settings:
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?api_token={{ .Config.apikey }}&name={{ if .Query.IMDBID }}{{ else }}{{ .Keywords }}{{ end }}{{ if .Query.TMDBID }}&tmdbId={{ .Query.TMDBID }}{{ else }}{{ end }}{{ if .Query.IMDBIDShort }}&imdbId={{ .Query.IMDBIDShort }}{{ else }}{{ end }}{{ if .Query.TVDBID }}&tvdbId={{ .Query.TVDBID }}{{ else }}{{ end }}&sortField={{ .Config.sort }}&sortDirection={{ .Config.type }}&perPage=100&page=1{{ range .Categories }}&categories[]={{.}}{{end}}{{ if .Config.freeleech }}&free=1{{ else }}{{ end }}"
- path: "/api/torrents/filter"
response:
type: json
attribute: attributes
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 }}"
name: "{{ .Keywords }}"
$raw: "{{ if .Query.Season }}&seasonNumber={{ .Query.Season }}{{ else }}{{ end }}{{ if .Query.Ep }}&episodeNumber={{ .Query.Ep }}{{ else }}{{ end }}{{ if .Query.TMDBID }}&tmdbId={{ .Query.TMDBID }}{{ else }}{{ end }}{{ if .Query.IMDBIDShort }}&imdbId={{ .Query.IMDBIDShort }}{{ else }}{{ end }}{{ if .Query.TVDBID }}&tvdbId={{ .Query.TVDBID }}{{ else }}{{ end }}{{ range .Categories }}&categories[]={{.}}{{end}}{{ if .Config.freeleech }}&free=1{{ else }}{{ end }}"
sortField: "{{ .Config.sort }}"
sortDirection: "{{ .Config.type }}"
perPage: 100
page: 1
keywordsfilters:
- name: re_replace
@@ -69,13 +87,8 @@ search:
selector: meta.total
fields:
category:
categorydesc:
selector: category
case:
Movie: 1
TV Show: 2
FANRES: 3
Trailer: 5
title:
selector: name
details:
@@ -87,8 +100,6 @@ search:
filters:
- name: replace
args: ["https://via.placeholder.com/90x135", ""]
- name: replace
args: ["https://via.placeholder.com/400x600", ""]
imdbid:
selector: imdb_id
tmdbid:
@@ -130,4 +141,4 @@ search:
minimumseedtime:
# 7 day (as seconds = 7 x 24 x 60 x 60)
text: 604800
# json UNIT3D 5.3.1b
# json UNIT3D 6.0.0 beta

View File

@@ -9,13 +9,12 @@ links:
- https://brsociety.club/
caps:
# dont forget to update the case block in the search fields category
categorymappings:
- {id: 1, cat: TV, desc: "Cursos (courses)"}
- {id: 1, cat: TV, desc: "Cursos"}
- {id: 2, cat: Books/EBook, desc: "eBooks"}
- {id: 5, cat: Books/Mags, desc: "Revistas (Magazines)"}
- {id: 5, cat: Books/Mags, desc: "Revistas"}
- {id: 3, cat: Audio/Audiobook, desc: "Audiobooks"}
- {id: 4, cat: Other, desc: "Arquivos de Auxilio (Help Files)"}
- {id: 4, cat: Other, desc: "Arquivos de Auxilio"}
modes:
search: [q]
@@ -51,6 +50,16 @@ settings:
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
@@ -66,14 +75,8 @@ search:
selector: meta.total
fields:
category:
categorydesc:
selector: category
case:
"Cursos": 1
"eBooks": 2
"Revistas": 5
"Audiobooks": 3
"Arquivos de Auxilio": 4
title:
selector: name
details:
@@ -90,8 +93,6 @@ search:
filters:
- name: replace
args: ["https://via.placeholder.com/90x135", ""]
- name: replace
args: ["https://via.placeholder.com/400x600", ""]
imdbid:
selector: imdb_id
tmdbid:

View File

@@ -7,7 +7,7 @@ type: public
encoding: UTF-8
followredirect: true
links:
- https://cpasbien.to/
- https://www.cpasbien.gg/
legacylinks:
- https://www1.cpasbiens.ws/
- https://www2.cpasbiens.ws/
@@ -19,6 +19,7 @@ legacylinks:
- https://cpasbiens.proxyportal.fun/
- https://cpasbiens.uk-unblock.xyz/
- https://cpasbiens.ind-unblock.xyz/
- https://cpasbien.to/
caps:
categories:

View File

@@ -12,9 +12,8 @@ legacylinks:
- https://datascene.net/
caps:
# dont forget to update the case block in the search fields category
categorymappings:
- {id: 1, cat: Movies, desc: "Movies"}
- {id: 1, cat: Movies, desc: "Movie"}
- {id: 2, cat: TV, desc: "TV"}
- {id: 3, cat: Audio, desc: "Music"}
- {id: 4, cat: PC/Games, desc: "Game"}
@@ -59,6 +58,16 @@ settings:
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
@@ -74,17 +83,8 @@ search:
selector: meta.total
fields:
category:
categorydesc:
selector: category
case:
"Movie": 1
"TV": 2
"Music": 3
"Game": 4
"Application": 5
"XXX": 6
"Mobile": 7
"E-Book": 8
title:
selector: name
details:
@@ -96,8 +96,6 @@ search:
filters:
- name: replace
args: ["https://via.placeholder.com/90x135", ""]
- name: replace
args: ["https://via.placeholder.com/400x600", ""]
imdbid:
selector: imdb_id
tmdbid:

View File

@@ -10,7 +10,6 @@ links:
- https://desitorrents.rocks/
caps:
# dont forget to update the case block in the search fields category
categorymappings:
- {id: 1, cat: Movies, desc: "Movies"}
- {id: 2, cat: TV, desc: "TV"}
@@ -51,6 +50,16 @@ settings:
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
@@ -70,12 +79,8 @@ search:
selector: meta.total
fields:
category:
categorydesc:
selector: category
case:
Movies: 1
TV: 2
Music: 3
title:
selector: name
details:
@@ -87,8 +92,6 @@ search:
filters:
- name: replace
args: ["https://via.placeholder.com/90x135", ""]
- name: replace
args: ["https://via.placeholder.com/400x600", ""]
imdbid:
selector: imdb_id
tmdbid:

View File

@@ -15,6 +15,7 @@ caps:
- {id: 64, cat: Books/EBook, desc: "Books"}
- {id: 66, cat: Books, desc: "Business"}
- {id: 68, cat: Books/Comics, desc: "Comics"}
- {id: 80, cat: Books, desc: "Coooking"}
- {id: 59, cat: TV/Documentary, desc: "Docs/Movies"}
- {id: 60, cat: TV/Documentary, desc: "Docs/TV"}
- {id: 79, cat: TV, desc: "Educational"}

View File

@@ -242,8 +242,8 @@ caps:
- {id: 307, cat: Books/Other, desc: "VIP: Thriller"}
- {id: 306, cat: Books/Other, desc: "VIP: Mystery"}
- {id: 308, cat: Books/Other, desc: "VIP: Crime"}
- {id: 309, cat: Books/Other, desc: "VIP: Fantasy "}
- {id: 204, cat: Books/Other, desc: "VIP: Collections "}
- {id: 309, cat: Books/Other, desc: "VIP: Fantasy"}
- {id: 204, cat: Books/Other, desc: "VIP: Collections"}
- {id: 205, cat: Books/Other, desc: "VIP: Audiobooks"}
- {id: 206, cat: Books/Other, desc: "VIP: Comics"}
- {id: 207, cat: Books/Other, desc: "VIP: Computers"}
@@ -274,6 +274,10 @@ settings:
type: checkbox
label: Search freeleech only
default: false
- name: vip
type: checkbox
label: Include VIP results
default: true
- name: sort
type: select
label: Sort requested from site
@@ -316,10 +320,9 @@ search:
paths:
- path: torrents-search.php
inputs:
$raw: "{{ range .Categories }}filter_cat[{{.}}]=1&{{end}}"
search: "{{ if .Keywords }}\"{{ .Keywords }}\"{{ else }}{{ end }}"
# 0 only active 1 incl dead 2 only dead
incldead: 0
incldead: 1
# 0 all 1 not freeleech 2 only freeleech
freeleech: "{{ if .Config.freeleech }}2{{ else }}0{{ end }}"
# 0 all 1 english 2 french 3 german 4 italian 5 japanese 6 spanish 7 russian 8 other
@@ -328,7 +331,7 @@ search:
order: "{{ .Config.type }}"
rows:
selector: tr.t-row
selector: "tr.t-row{{ if .Config.vip }}{{ else }}:not(:has(a[href^=\"torrents.php?cat=\"]):contains(\"VIP\")){{ end }}"
fields:
category:

View File

@@ -18,10 +18,11 @@ caps:
- {id: 20, cat: TV/SD, desc: "Lasten DVD (kids)"}
- {id: 33, cat: TV/SD, desc: "Lasten XviD (kids)"}
- {id: 11, cat: Movies/DVD, desc: "Leffat DVD (movies)"}
- {id: 13, cat: Movies/SD, desc: "Leffat XviD (movies)"}
- {id: 21, cat: Movies/HD, desc: "Leffat HD (movies)"}
- {id: 32, cat: Movies/DVD, desc: "Custom DVD (movies)"}
- {id: 13, cat: Movies/SD, desc: "Leffat XviD (movies)"}
- {id: 21, cat: Movies/HD, desc: "Leffat HD (movies)"}
- {id: 32, cat: Movies/DVD, desc: "Custom DVD (movies)"}
- {id: 42, cat: Movies, desc: "FVC"}
- {id: 48, cat: Movies/UHD, desc: "Leffat 4K (movies)"}
- {id: 15, cat: Audio, desc: "Musiikki (music)"}
- {id: 12, cat: Audio/Video, desc: "Musavideot (clips)"}
- {id: 7, cat: PC/0day, desc: "Ohjelmat Windows (apps)"}

View File

@@ -9,7 +9,6 @@ links:
- https://www.hawke.uno/
caps:
# dont forget to update the case block in the search fields category
categorymappings:
- {id: 1, cat: Movies, desc: "Movie"}
- {id: 2, cat: TV, desc: "TV"}
@@ -48,6 +47,16 @@ settings:
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
@@ -63,11 +72,8 @@ search:
selector: meta.total
fields:
category:
categorydesc:
selector: category
case:
Movie: 1
TV: 2
title:
selector: name
details:
@@ -76,11 +82,11 @@ search:
selector: download_link
poster:
selector: poster
imdbid:
selector: imdb_id
filters:
- name: replace
args: ["https://via.placeholder.com/90x135", ""]
imdbid:
selector: imdb_id
tmdbid:
selector: tmdb_id
tvdbid:

View File

@@ -0,0 +1,175 @@
---
id: hdolimpo-api
name: HD-Olimpo (API)
description: "HD-Olimpo is a SPANISH site for HD content"
language: es-ES
type: private
encoding: UTF-8
links:
- https://hd-olimpo.club/
legacylinks:
- https://hdolimpo.co/
caps:
categorymappings:
- {id: 1, cat: Movies, desc: "Películas"}
- {id: 2, cat: TV, desc: "Series"}
- {id: 3, cat: Audio, desc: "Música"}
- {id: 4, cat: TV/Documentary, desc: "Documentales"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid, tvdbid]
movie-search: [q, imdbid, tmdbid]
music-search: [q]
book-search: [q]
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 account <i>My configuration / Mi configuración => Secutiy / Seguridad</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"]
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?api_token={{ .Config.apikey }}&name={{ if .Query.IMDBID }}{{ else }}{{ .Keywords }}{{ end }}{{ if .Query.TMDBID }}&tmdbId={{ .Query.TMDBID }}{{ else }}{{ end }}{{ if .Query.IMDBIDShort }}&imdbId={{ .Query.IMDBIDShort }}{{ else }}{{ end }}{{ if .Query.TVDBID }}&tvdbId={{ .Query.TVDBID }}{{ else }}{{ end }}&sortField={{ .Config.sort }}&sortDirection={{ .Config.type }}&perPage=100&page=1{{ range .Categories }}&categories[]={{.}}{{end}}{{ if .Config.freeleech }}&free=1{{ else }}{{ end }}"
response:
type: json
attribute: attributes
rows:
selector: data
count:
selector: meta.total
fields:
categorydesc:
selector: category
title:
selector: name
filters:
- name: re_replace
args: ["\\[", " "]
- name: re_replace
args: ["\\]", " "]
- name: re_replace
args: ["(?i)(full(bluray)?)", "BRDISK"] # FULL(BR/UHD) -> BRDISK
- name: replace
args: ["HDOlimpo", ""] # Delete HDOlimpo
- name: replace
args: ["HD-Olimpo", ""] # Delete HD-Olimpo
- name: replace
args: ["E-AC-3", "EAC3"]
- name: re_replace
args: ["[ -](?i)español[ -]", " SPANiSH "]
- name: re_replace
args: ["[ -](?i)castellano[ -]", " SPANiSH "]
- name: re_replace
args: ["[ -](?i)spa[ -]", " SPANiSH "]
- name: re_replace
args: ["[ -](?i)esp[ -]", " SPANiSH "]
- name: re_replace
args: ["[ -](?i)ingl[eé]s[ -]", " English "]
- name: re_replace
args: ["[ -](?i)[ei]ng[ -]", " English "]
- name: re_replace
args: ["[ -](?i)cat[ -]", " Catalan "]
- name: re_replace
args: ["[ -](?i)vas[ -]", " Basque "]
- name: re_replace
args: ["[ -](?i)fr[ae][ -]", " French "]
- name: re_replace
args: ["[ -](?i)jap[ -]", " Japanese "]
- name: re_replace
args: ["[ -](?i)ita[ -]", " Italian "]
- name: re_replace
args: ["[ -](?i)rus[ -]", " Russian "]
- name: re_replace
args: ["[ -](?i)ger[ -]", " German "]
- name: re_replace
args: ["(?i)(triaudio)", "MULTi/SPANiSH/English"]
- name: re_replace
args: ["(?i)(dual)", " MULTi/SPANiSH "]
- name: re_replace
args: ["\\.+", "."] # More than 1 dot -> .
- name: re_replace
args: ["^\\.", ""] # Delete first dot
- name: re_replace
args: ["\\s+", " "] # More than 1 space to 1 space
details:
selector: details_link
download:
selector: download_link
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:
# 2021-10-18T00:34:50.000000Z"
selector: created_at
size:
selector: size
downloadvolumefactor:
# api returns 0=false, 1=true
selector: freeleech
case:
0: 1 # not free
1: 0 # freeleech
uploadvolumefactor:
# api returns 0=false, 1=true
selector: double_upload
case:
0: 1 # normal
1: 2 # double
minimumseedtime:
# 4 days (as seconds = 4 x 24 x 60 x 60)
text: 345600
# json UNIT3D ???

View File

@@ -1,244 +0,0 @@
---
id: hdolimpo
name: HD-Olimpo
description: "HD-Olimpo is a SPANISH site for HD content"
language: es-ES
type: private
encoding: UTF-8
links:
- https://hd-olimpo.club/
legacylinks:
- https://hdolimpo.co/
caps:
categorymappings:
- {id: 1, cat: Movies, desc: "Movies"}
- {id: 2, cat: TV, desc: "TV"}
- {id: 3, cat: Audio, desc: "Music"}
- {id: 4, cat: TV/Documentary, desc: "Documentaries"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid, tvdbid]
movie-search: [q, imdbid, tmdbid]
settings:
- name: username
type: text
label: Username
- name: password
type: password
label: Password
- 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: login
method: form
form: form[action$="/login"]
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
remember: on
selectorinputs:
_token:
selector: input[name="_token"]
attribute: value
error:
- selector: div#ERROR_COPY
# test:
# path: /
# selector: a[href$="/logout"]
search:
paths:
- path: torrents/filter
inputs:
$raw: "{{ range .Categories }}categories[]={{.}}&{{end}}"
search: "{{ if .Query.IMDBID }}{{ else }}{{ .Keywords }}{{ end }}" # for dashboard imdbid search
description: ""
keywords: ""
uploader: ""
imdb: "{{ .Query.IMDBIDShort }}"
tvdb: "{{ .Query.TVDBID }}"
tmdb: "{{ .Query.TMDBID }}"
mal: ""
igdb: ""
sorting: "{{ .Config.sort }}"
direction: "{{ .Config.type }}"
qty: 100
page: 0
view: list
freeleech: "{{ if .Config.freeleech }}1{{ else }}{{ end }}"
rows:
selector: table > tbody > tr
fields:
category:
selector: a[href*="/categories/"]
attribute: href
filters:
- name: regexp
args: "/categories/(\\d+)"
title:
selector: a.view-torrent
filters:
- name: re_replace
args: ["\\[", " "]
- name: re_replace
args: ["\\]", " "]
- name: re_replace
args: ["(?i)(full(bluray)?)", "BRDISK"] # FULL(BR/UHD) -> BRDISK
- name: replace
args: ["HDOlimpo", ""] # Delete HDOlimpo
- name: replace
args: ["HD-Olimpo", ""] # Delete HD-Olimpo
- name: replace
args: ["E-AC-3", "EAC3"]
- name: re_replace
args: ["[ -](?i)español[ -]", " SPANiSH "]
- name: re_replace
args: ["[ -](?i)castellano[ -]", " SPANiSH "]
- name: re_replace
args: ["[ -](?i)spa[ -]", " SPANiSH "]
- name: re_replace
args: ["[ -](?i)esp[ -]", " SPANiSH "]
- name: re_replace
args: ["[ -](?i)ingl[eé]s[ -]", " English "]
- name: re_replace
args: ["[ -](?i)[ei]ng[ -]", " English "]
- name: re_replace
args: ["[ -](?i)cat[ -]", " Catalan "]
- name: re_replace
args: ["[ -](?i)vas[ -]", " Basque "]
- name: re_replace
args: ["[ -](?i)fr[ae][ -]", " French "]
- name: re_replace
args: ["[ -](?i)jap[ -]", " Japanese "]
- name: re_replace
args: ["[ -](?i)ita[ -]", " Italian "]
- name: re_replace
args: ["[ -](?i)rus[ -]", " Russian "]
- name: re_replace
args: ["[ -](?i)ger[ -]", " German "]
- name: re_replace
args: ["(?i)(triaudio)", "MULTi/SPANiSH/English"]
- name: re_replace
args: ["(?i)(dual)", " MULTi/SPANiSH "]
- name: re_replace
args: ["\\.+", "."] # More than 1 dot -> .
- name: re_replace
args: ["^\\.", ""] # Delete first dot
- name: re_replace
args: ["\\s+", " "] # More than 1 space to 1 space
download:
selector: a[href*="/download/"]
attribute: href
details:
selector: a.view-torrent
attribute: href
poster:
selector: div.torrent-poster img
attribute: src
filters:
- name: prepend
args: "https://images.weserv.nl/?url=" # for display on dashboard
- name: append
args: "&w=180&h=270" # for display on dashboard
- name: replace
args: ["https://images.weserv.nl/?url=https://via.placeholder.com/600x900&w=180&h=270", ""]
size:
selector: td:nth-last-child(4)
seeders:
selector: td:nth-last-child(3)
leechers:
selector: td:nth-last-child(2)
grabs:
selector: td:nth-last-child(1)
imdbid:
selector: a[href*="imdb.com/title/tt"]
attribute: href
tmdbid:
selector: a[href*="themoviedb.org/movie/"]
attribute: href
date:
selector: time
filters:
# translations for Turkish|Estonian|Danish|Italian|Polish|Norwegian|Portuguese|Czech|Russian|Romanian|Spanish|French|German|Bulgarian|Dutch|Chinese|Japanese|Swedish
- name: re_replace
args: ["(?i)(önce|tagasi|geleden|fa|temu|siden|há|atrás|nazpět|назад|acum|în urmă|hace|il y a|vor|преди|前|sedan)", " ago"]
- name: re_replace
args: ["(?i)(saniye|sekundit|sekunder|secondi|sekund|segundos|sekundami|секунд|secunde|secondes|Sekunden|секунди|seconden|秒前)", "seconds"]
- name: re_replace
args: ["(?i)(minutit|minutter|minuti|minuty|minutos|минуты|минут|Minuten|минути|minuten|minuter)", "minutes"]
- name: re_replace
args: ["(?i)(dakika|minut|minuto|minuta|minutt|минута|Minute|minuut|分钟|分)", " minute"]
- name: re_replace
args: ["(?i)(tundi|timer|ore|godziny|horas|hodiny|hoden|часа|часов|ore|heures|Stunden|timmar)", "hours"]
- name: re_replace
args: ["(?i)(saat|tund|time|ora|godzina|hora|hodina|час|oră|heure|Stunde|uur|小时|時間|timme)", " hour"]
- name: re_replace
args: ["(?i)(päeva|dage|giorni|dni|dias|dny|дня|дней|zile|días|jours|Tagen|дни|dagen|dagar)", "days"]
- name: re_replace
args: ["(?i)(gün|päev|dag|giorno|dzień|dia|den|день|zi|día|jour|Tag|ден|天|日)", " day"]
- name: re_replace
args: ["(?i)(nädalat|uger|settimane|tygodnie|uker|semanas|týdny|недели|недель|săptămâni|semaines|Wochen|седмици|weken|veckor)", "weeks"]
- name: re_replace
args: ["(?i)(hafta|nädal|uge|settimana|tydzień|uke|semana|týden|неделю|săptămână|semaine|Woche|седмица|周|週間|vecka)", " week"]
- name: re_replace
args: ["(?i) (ay)", "month"]
- name: re_replace
args: ["(?i)(kuud|måneder|mesi|miesiące|meses|měsíce|месяца|месяцев|luni|meses|mois|Monaten|месеца|maanden|månader)", "months"]
- name: re_replace
args: ["(?i)(kuu|måned|mese|miesiąc|mês|měsíc|месяц|lună|mes|Monat|месец|maand|个月|ヶ月|månad)", " month"]
- name: re_replace
args: ["(?i)(aastat|anni|lata|anos|roky|года|ani|años|ans|Jahren|години)", " years"]
- name: re_replace
args: ["(?i)(yil|aasta|år|anno|rok|ano|год|año|Jahr|година|jaar|年)", " year"]
- name: re_replace
args: ["(?i) (an)", "year"]
- name: re_replace
args: ["(?i)(För |und)", ""] # Misc removals
- name: timeago
downloadvolumefactor:
case:
i[class*="fa-id-badge text-orange"]: 0 # 24 Hour FreeLeech From BON Store
i[class*="fa-trophy text-purple"]: 0 # Special FreeLeech For Certain User Groups
i[class*="fa-star text-bold"]: 0 # Freeleech From Token
i[class*="fa-coins text-bold"]: 0 # Freeleech From Token
i[class*="fa-globe text-blue"]: 0 # Global Freeleech
i[class*="fas fa-star text-gold"]: 0 # Freeleech
i[class*="fal fa-star text-gold"]: 0.5 # 50% Freeleech
i[class*="fa-certificate text-pink"]: 0 # Featured Torrent
"*": 1
uploadvolumefactor:
case:
i[class*="fa-gem text-green"]: 2 # Single Torrent Double Upload
i[class*="fa-globe text-green"]: 2 # Global Double Upload
i[class*="fa-certificate text-pink"]: 2 # Featured Torrent
"*": 1
minimumseedtime:
# 4 days (as seconds = 4 x 24 x 60 x 60)
text: 345600
# UNIT3D 2.4.0

View File

@@ -12,32 +12,34 @@ caps:
categorymappings:
- {id: 8, cat: TV/SD, desc: "Sorozat/Hun"}
- {id: 40, cat: TV/HD, desc: "Sorozat/Hun/HD"}
- {id: 41, cat: Movies/SD, desc: "Film/Hun/SD"}
- {id: 15, cat: Movies/DVD, desc: "Film/Hun/DVD-R"}
- {id: 27, cat: Movies/HD, desc: "Film/Hun/HD"}
- {id: 44, cat: Movies/UHD, desc: "Film/Hun/UHD"}
- {id: 2, cat: Books, desc: "eBook/Hun"}
- {id: 47, cat: TV/UHD, desc: "Sorozat/Hun/UHD"}
- {id: 7, cat: TV/SD, desc: "Sorozat/Eng"}
- {id: 39, cat: TV/HD, desc: "Sorozat/Eng/HD"}
- {id: 46, cat: TV/UHD, desc: "Sorozat/Eng/UHD"}
- {id: 41, cat: Movies/SD, desc: "Film/Hun/SD"}
- {id: 27, cat: Movies/HD, desc: "Film/Hun/HD"}
- {id: 44, cat: Movies/UHD, desc: "Film/Hun/UHD"}
- {id: 15, cat: Movies/DVD, desc: "Film/Hun/DVD-R"}
- {id: 42, cat: Movies/SD, desc: "Film/Eng/SD"}
- {id: 14, cat: Movies/DVD, desc: "Film/Eng/DVD-R"}
- {id: 25, cat: Movies/HD, desc: "Film/Eng/HD"}
- {id: 45, cat: Movies/UHD, desc: "Film/Eng/UHD"}
- {id: 14, cat: Movies/DVD, desc: "Film/Eng/DVD-R"}
- {id: 2, cat: Books, desc: "eBook/Hun"}
- {id: 1, cat: Books, desc: "eBook/Eng"}
- {id: 38, cat: Audio/Audiobook, desc: "Hangoskönyv"}
- {id: 21, cat: XXX, desc: "XXX"}
- {id: 4, cat: PC/ISO, desc: "Program/ISO"}
- {id: 19, cat: Audio/MP3, desc: "Zene/Hun"}
- {id: 37, cat: Audio/Lossless, desc: "Lossless/Hun"}
- {id: 9, cat: PC/Games, desc: "Játék/ISO"}
- {id: 43, cat: Console, desc: "Játék/Konzol"}
- {id: 29, cat: Other, desc: "Képek"}
- {id: 28, cat: XXX/ImageSet, desc: "XXX Képek"}
- {id: 3, cat: PC/0day, desc: "Program/Egyéb"}
- {id: 18, cat: Audio/MP3, desc: "Zene/Eng"}
- {id: 26, cat: Audio/Lossless, desc: "Lossless/Eng"}
- {id: 4, cat: PC/ISO, desc: "Program/ISO"}
- {id: 3, cat: PC/0day, desc: "Program/Egyéb"}
- {id: 11, cat: PC/Games, desc: "Játék/Rip"}
- {id: 9, cat: PC/Games, desc: "Játék/ISO"}
- {id: 43, cat: Console, desc: "Játék/Konzol"}
- {id: 13, cat: PC/Mobile-Other, desc: "Mobil"}
- {id: 21, cat: XXX, desc: "XXX"}
- {id: 28, cat: XXX/ImageSet, desc: "XXX Képek"}
- {id: 29, cat: Other, desc: "Képek"}
modes:

View File

@@ -39,7 +39,7 @@ caps:
- {id: 124, cat: Movies, desc: " |- Зарубежные фильмы"}
- {id: 123, cat: Movies, desc: " |- Отечественные фильмы (Новинки)"}
- {id: 122, cat: Movies, desc: " |- Отечественные фильмы"}
- {id: 689, cat: Movies/WEB-DL, desc: " |- Фильмы WEB-DLRip, HDTVRip "}
- {id: 689, cat: Movies/WEB-DL, desc: " |- Фильмы WEB-DLRip, HDTVRip"}
- {id: 121, cat: Movies, desc: " |- Классика зарубежного кино (фильмы вышедшие до 1980 года)"}
- {id: 120, cat: Movies, desc: " |- Классика отечественного кино (фильмы вышедшие до ..."}
- {id: 126, cat: Movies, desc: " |- Антологии"}
@@ -48,7 +48,7 @@ caps:
- {id: 117, cat: Movies, desc: " |- Зарубежные фильмы (новинки)"}
- {id: 116, cat: Movies, desc: " |- Отечественные фильмы (новинки)"}
- {id: 415, cat: Movies, desc: " |- Разное"}
- {id: 19, cat: Movies/HD, desc: "HD "}
- {id: 19, cat: Movies/HD, desc: "HD"}
- {id: 48, cat: Movies/HD, desc: " |- Новые релизы"}
- {id: 735, cat: Movies/HD, desc: " |- 60fps"}
- {id: 50, cat: Movies/HD, desc: " |- Зарубежные фильмы HD (Новинки)"}
@@ -63,13 +63,13 @@ caps:
- {id: 681, cat: Movies/HD, desc: " |- Классика зарубежного кино (фильмы вышедшие до 1980 года)"}
- {id: 682, cat: Movies/HD, desc: " |- Классика отечественного кино (фильмы вышедшие до ..."}
- {id: 683, cat: Movies/HD, desc: " |- Временные HD фильмы"}
- {id: 20, cat: Movies/DVD, desc: "DVD "}
- {id: 20, cat: Movies/DVD, desc: "DVD"}
- {id: 49, cat: Movies/DVD, desc: " |- Новые релизы"}
- {id: 56, cat: Movies/DVD, desc: " |- Зарубежные фильмы DVD "}
- {id: 57, cat: Movies/DVD, desc: " |- Наши фильмы DVD "}
- {id: 58, cat: Movies/DVD, desc: " |- Зарубежные мультфильмы DVD "}
- {id: 59, cat: Movies/DVD, desc: " |- Наши мультфильмы DVD "}
- {id: 338, cat: Movies/3D, desc: "3D "}
- {id: 56, cat: Movies/DVD, desc: " |- Зарубежные фильмы DVD"}
- {id: 57, cat: Movies/DVD, desc: " |- Наши фильмы DVD"}
- {id: 58, cat: Movies/DVD, desc: " |- Зарубежные мультфильмы DVD"}
- {id: 59, cat: Movies/DVD, desc: " |- Наши мультфильмы DVD"}
- {id: 338, cat: Movies/3D, desc: "3D"}
- {id: 346, cat: Movies/3D, desc: " |- F.A.Q."}
- {id: 339, cat: Movies/3D, desc: " |- Новые релизы"}
- {id: 340, cat: Movies/3D, desc: " |- 3D Зарубежные фильмы"}
@@ -80,7 +80,7 @@ caps:
- {id: 345, cat: Movies/3D, desc: " |- 3D Спорт"}
- {id: 400, cat: TV/Documentary, desc: "Документальные фильмы, Научно-познавательные фильмы"}
- {id: 401, cat: TV/Documentary, desc: " |- Новые релизы"}
- {id: 405, cat: TV/Documentary, desc: " |- BBC / Discovery / National Geographic "}
- {id: 405, cat: TV/Documentary, desc: " |- BBC / Discovery / National Geographic"}
- {id: 410, cat: TV/Documentary, desc: " |- О рыбалке и охоте"}
- {id: 408, cat: TV/Documentary, desc: " |- Криминальные документальные фильмы"}
- {id: 402, cat: TV/Documentary, desc: " |- Документальные научно-познавательные"}
@@ -105,7 +105,7 @@ caps:
- {id: 563, cat: XXX, desc: " |- Pron (DVDRip & others)"}
- {id: 564, cat: XXX, desc: " |- Pron DVD (DVD5/DVD9)"}
- {id: 565, cat: XXX, desc: " |- Pron HD (720p/1080p/1080i)"}
- {id: 566, cat: XXX, desc: " |- Паки Pron "}
- {id: 566, cat: XXX, desc: " |- Паки Pron"}
- {id: 567, cat: XXX, desc: " |- Эротика"}
- {id: 568, cat: XXX, desc: " |- Эротика HD (720p/1080p/1080i)"}
- {id: 569, cat: XXX, desc: " |- Мульты"}
@@ -145,15 +145,15 @@ caps:
- {id: 474, cat: Other, desc: " |- Компьютерные сети и безопасность"}
# Игры Games
- {id: 97, cat: Console, desc: " |- Новые релизы"}
- {id: 287, cat: Console, desc: " |- MMORPG "}
- {id: 287, cat: Console, desc: " |- MMORPG"}
- {id: 286, cat: Console, desc: " |- Online / Онлайн Игры"}
- {id: 111, cat: Console, desc: " |- Аркады"}
- {id: 96, cat: Console, desc: " |- Горячие новинки"}
- {id: 90, cat: Console, desc: " |- Гонки"}
- {id: 95, cat: Console, desc: " |- Action / Shooter / FPS "}
- {id: 94, cat: Console, desc: " |- Action / Shooter / TPS "}
- {id: 95, cat: Console, desc: " |- Action / Shooter / FPS"}
- {id: 94, cat: Console, desc: " |- Action / Shooter / TPS"}
- {id: 285, cat: Console, desc: " |- Детские игры"}
- {id: 93, cat: Console, desc: " |- RPG "}
- {id: 93, cat: Console, desc: " |- RPG"}
- {id: 92, cat: Console, desc: " |- RTS (стратегии в реальном времени)"}
- {id: 91, cat: Console, desc: " |- TBS (пошаговые стратегии)"}
- {id: 88, cat: Console, desc: " |- Многопользовательские игры"}
@@ -164,11 +164,11 @@ caps:
- {id: 553, cat: Console, desc: " |- Эротические игры"}
- {id: 12, cat: PC/Games, desc: "Игры для PC (Repack)"}
- {id: 109, cat: PC/Games, desc: " |- Новые релизы"}
- {id: 107, cat: PC/Games, desc: " |- Action / Shooter / FPS "}
- {id: 107, cat: PC/Games, desc: " |- Action / Shooter / FPS"}
- {id: 463, cat: PC/Games, desc: " |- Горячие новинки"}
- {id: 102, cat: PC/Games, desc: " |- Аркады"}
- {id: 106, cat: PC/Games, desc: " |- Action / Shooter / TPS "}
- {id: 105, cat: PC/Games, desc: " |- RPG "}
- {id: 106, cat: PC/Games, desc: " |- Action / Shooter / TPS"}
- {id: 105, cat: PC/Games, desc: " |- RPG"}
- {id: 104, cat: PC/Games, desc: " |- RTS (стратегии в реальном времени)"}
- {id: 103, cat: PC/Games, desc: " |- TBS (пошаговые стратегии)"}
- {id: 530, cat: PC/Games, desc: " |- Детские игры"}
@@ -180,22 +180,22 @@ caps:
- {id: 554, cat: PC/Games, desc: " |- Эротические игры"}
- {id: 14, cat: Console, desc: "Игры для Консолей"}
- {id: 115, cat: Console, desc: " |- Новые релизы"}
- {id: 114, cat: Console/XBox 360, desc: " |- XBox360 "}
- {id: 674, cat: Console/XBox 360, desc: " |- XBox360 | Kinect "}
- {id: 113, cat: Console/NDS, desc: " |- NDS "}
- {id: 288, cat: Console/PS3, desc: " |- Playstation 2 "}
- {id: 290, cat: Console/PS3, desc: " |- Playstation 3 "}
- {id: 114, cat: Console/XBox 360, desc: " |- XBox360"}
- {id: 674, cat: Console/XBox 360, desc: " |- XBox360 | Kinect"}
- {id: 113, cat: Console/NDS, desc: " |- NDS"}
- {id: 288, cat: Console/PS3, desc: " |- Playstation 2"}
- {id: 290, cat: Console/PS3, desc: " |- Playstation 3"}
- {id: 531, cat: Console, desc: "Программы / Прошивки"}
- {id: 532, cat: Console, desc: " |- Новые релизы"}
- {id: 533, cat: Console/PS3, desc: " |- Playstation 3 "}
- {id: 535, cat: Console/XBox 360, desc: " |- XBox360 "}
- {id: 534, cat: Console/PSP, desc: " |- PSP "}
- {id: 533, cat: Console/PS3, desc: " |- Playstation 3"}
- {id: 535, cat: Console/XBox 360, desc: " |- XBox360"}
- {id: 534, cat: Console/PSP, desc: " |- PSP"}
- {id: 277, cat: Console, desc: "Всё для игр"}
- {id: 291, cat: Console, desc: " |- Новые релизы"}
- {id: 284, cat: Console, desc: " |- Трейлеры/Геймплей видео"}
- {id: 283, cat: Console, desc: " |- Различные моды и дополнения к играм"}
- {id: 281, cat: Console, desc: " |- Софт для игр"}
- {id: 280, cat: Console, desc: " |- NoCD/NoDVD "}
- {id: 280, cat: Console, desc: " |- NoCD/NoDVD"}
- {id: 279, cat: Console, desc: " |- Патчи"}
- {id: 278, cat: Console, desc: " |- Русификаторы"}
# Мультипликация TV
@@ -215,10 +215,10 @@ caps:
- {id: 159, cat: TV, desc: " |- Сборники отечественных мультфильмов и сиквелы"}
- {id: 23, cat: TV, desc: "Зарубежные мультсериалы"}
- {id: 158, cat: TV, desc: " |- Новые релизы"}
- {id: 157, cat: TV, desc: " |- Disney "}
- {id: 157, cat: TV, desc: " |- Disney"}
- {id: 156, cat: TV, desc: " |- Гриффины"}
- {id: 155, cat: TV, desc: " |- Симпсоны"}
- {id: 154, cat: TV, desc: " |- Южный Парк / South Park "}
- {id: 154, cat: TV, desc: " |- Южный Парк / South Park"}
- {id: 153, cat: TV, desc: " |- Звездные войны"}
- {id: 152, cat: TV, desc: " |- Том и Джерри"}
- {id: 151, cat: TV, desc: " |- Футурама"}
@@ -240,7 +240,7 @@ caps:
- {id: 250, cat: TV, desc: " |- Воронины / Папины дочки"}
- {id: 245, cat: TV, desc: " |- Детективы"}
- {id: 550, cat: TV, desc: " |- Деффчонки"}
- {id: 242, cat: TV, desc: " |- Зайцев +1 "}
- {id: 242, cat: TV, desc: " |- Зайцев +1"}
- {id: 546, cat: TV, desc: " |- Закрытая школа"}
- {id: 249, cat: TV, desc: " |- Ментовские войны"}
- {id: 247, cat: TV, desc: " |- Кадетство / Кремлёвские курсанты"}
@@ -259,19 +259,19 @@ caps:
- {id: 238, cat: TV, desc: " |- Другие российские сериалы"}
- {id: 26, cat: TV, desc: "Зарубежные сериалы"}
- {id: 237, cat: TV, desc: " |- Новые релизы"}
- {id: 544, cat: TV, desc: " |- Анатомия страсти / Grey's anatomy "}
- {id: 544, cat: TV, desc: " |- Анатомия страсти / Grey's anatomy"}
- {id: 236, cat: TV, desc: " |- Доктор Хаус / House M.D."}
- {id: 545, cat: TV, desc: " |- Друзья / Friends "}
- {id: 537, cat: TV, desc: " |- Звёздные врата / Stargate "}
- {id: 536, cat: TV, desc: " |- Игра престолов / Game of Thrones "}
- {id: 235, cat: TV, desc: " |- Остаться в живых / Lost "}
- {id: 234, cat: TV, desc: " |- Сверхъестественное / Supernatural "}
- {id: 538, cat: TV, desc: " |- Секретные материалы / The X-Files "}
- {id: 539, cat: TV, desc: " |- Спартак / Spartacus "}
- {id: 540, cat: TV, desc: " |- Тайны Смолвиля / Smallville "}
- {id: 541, cat: TV, desc: " |- Теория Большого Взрыва / The Big Bang Theory "}
- {id: 542, cat: TV, desc: " |- Холм одного дерева / One tree hill "}
- {id: 543, cat: TV, desc: " |- Ходячие мертвецы / The Walking Dead "}
- {id: 545, cat: TV, desc: " |- Друзья / Friends"}
- {id: 537, cat: TV, desc: " |- Звёздные врата / Stargate"}
- {id: 536, cat: TV, desc: " |- Игра престолов / Game of Thrones"}
- {id: 235, cat: TV, desc: " |- Остаться в живых / Lost"}
- {id: 234, cat: TV, desc: " |- Сверхъестественное / Supernatural"}
- {id: 538, cat: TV, desc: " |- Секретные материалы / The X-Files"}
- {id: 539, cat: TV, desc: " |- Спартак / Spartacus"}
- {id: 540, cat: TV, desc: " |- Тайны Смолвиля / Smallville"}
- {id: 541, cat: TV, desc: " |- Теория Большого Взрыва / The Big Bang Theory"}
- {id: 542, cat: TV, desc: " |- Холм одного дерева / One tree hill"}
- {id: 543, cat: TV, desc: " |- Ходячие мертвецы / The Walking Dead"}
- {id: 233, cat: TV, desc: " |- Другие зарубежные сериалы"}
# Мир Аниме Anime
- {id: 32, cat: TV/Anime, desc: "Аниме (общение)"}
@@ -301,18 +301,19 @@ caps:
# Программное обеспечение Software
- {id: 185, cat: PC, desc: " |- Новые релизы"}
- {id: 184, cat: PC, desc: " |- Настольные OS, выпущенные до 2001 года (Microsoft Windows..."}
- {id: 183, cat: PC, desc: " |- Windows XP "}
- {id: 182, cat: PC, desc: " |- Windows Vista "}
- {id: 181, cat: PC, desc: " |- Windows 7 "}
- {id: 180, cat: PC, desc: " |- Windows 8, 8.1 "}
- {id: 702, cat: PC, desc: " |- Windows 10 "}
- {id: 708, cat: PC, desc: " |- Мультисборки Windows OS "}
- {id: 183, cat: PC, desc: " |- Windows XP"}
- {id: 182, cat: PC, desc: " |- Windows Vista"}
- {id: 181, cat: PC, desc: " |- Windows 7"}
- {id: 180, cat: PC, desc: " |- Windows 8, 8.1"}
- {id: 702, cat: PC, desc: " |- Windows 10"}
- {id: 770, cat: PC, desc: " |- Windows 11"}
- {id: 708, cat: PC, desc: " |- Мультисборки Windows OS"}
- {id: 179, cat: PC, desc: " |- Серверные (Microsoft Windows OS)"}
- {id: 34, cat: PC, desc: "Mac OS. Программное обеспечение под них"}
- {id: 189, cat: PC, desc: " |- Новые релизы"}
- {id: 188, cat: PC/Mac, desc: " |- Mac OS (для Apple Macintosh)"}
- {id: 187, cat: PC/Mac, desc: " |- Mac OS (для РС-Hackintosh)"}
- {id: 186, cat: PC/Mac, desc: " |- Системные программы для Mac OS "}
- {id: 186, cat: PC/Mac, desc: " |- Системные программы для Mac OS"}
- {id: 35, cat: PC, desc: "Linux, Unix и другие ОС"}
- {id: 194, cat: PC, desc: " |- Новые релизы"}
- {id: 193, cat: PC, desc: " |- ОС (Linux, Unix)"}
@@ -331,7 +332,7 @@ caps:
- {id: 211, cat: PC, desc: " |- Работа с носителями информации"}
- {id: 210, cat: PC, desc: " |- Резервное копирование и программы для защиты информации"}
- {id: 209, cat: PC, desc: " |- Разное"}
- {id: 37, cat: PC, desc: "Программы для работы с мультимедиа и 3D "}
- {id: 37, cat: PC, desc: "Программы для работы с мультимедиа и 3D"}
- {id: 731, cat: PC, desc: " |- 3D моделирование, рендеринг и плагины для них"}
- {id: 208, cat: PC, desc: " |- Новые релизы"}
- {id: 207, cat: PC, desc: " |- Графические редакторы"}
@@ -353,7 +354,7 @@ caps:
- {id: 230, cat: PC, desc: " |- Новые релизы"}
- {id: 228, cat: PC, desc: " |- Системы для офиса, бизнеса и научной работы"}
- {id: 227, cat: PC, desc: " |- Распознавание текста, звука и синтез речи"}
- {id: 226, cat: PC, desc: " |- Работа с PDF и DjVu "}
- {id: 226, cat: PC, desc: " |- Работа с PDF и DjVu"}
- {id: 225, cat: PC, desc: " |- Словари, переводчики"}
- {id: 695, cat: PC, desc: " |- Текстовые редакторы"}
- {id: 223, cat: PC, desc: " |- САПР"}
@@ -373,10 +374,10 @@ caps:
- {id: 765, cat: Audio, desc: " |- Отечественная поп-музыка (lossless)"}
- {id: 764, cat: Audio, desc: " |- Отечественная поп-музыка (сборники) (lossy)"}
- {id: 272, cat: Audio, desc: " |- Электронная музыка"}
- {id: 271, cat: Audio, desc: " |- Рэп, Хип - Хоп, R'n'B "}
- {id: 271, cat: Audio, desc: " |- Рэп, Хип - Хоп, R'n'B"}
- {id: 270, cat: Audio, desc: " |- Поп музыка"}
- {id: 269, cat: Audio, desc: " |- Рок"}
- {id: 268, cat: Audio, desc: " |- Metal "}
- {id: 268, cat: Audio, desc: " |- Metal"}
- {id: 267, cat: Audio, desc: " |- Шансон"}
- {id: 678, cat: Audio, desc: " |- Джаз / блюз"}
- {id: 266, cat: Audio, desc: " |- Классика и Инструментал"}
@@ -384,22 +385,22 @@ caps:
- {id: 40, cat: Audio, desc: "Зарубежная музыка"}
- {id: 265, cat: Audio, desc: " |- Новые релизы"}
- {id: 264, cat: Audio, desc: " |- Электронная музыка"}
- {id: 505, cat: Audio, desc: " |- Trance "}
- {id: 263, cat: Audio, desc: " |- Рэп, Хип - Хоп, R'n'B "}
- {id: 501, cat: Audio, desc: " |- Drum & Bass "}
- {id: 503, cat: Audio, desc: " |- House "}
- {id: 504, cat: Audio, desc: " |- Dubstep "}
- {id: 412, cat: Audio, desc: " |- Soundtrack / OST "}
- {id: 502, cat: Audio, desc: " |- Hardcore, Hardstyle, Jumpstyle "}
- {id: 505, cat: Audio, desc: " |- Trance"}
- {id: 263, cat: Audio, desc: " |- Рэп, Хип - Хоп, R'n'B"}
- {id: 501, cat: Audio, desc: " |- Drum & Bass"}
- {id: 503, cat: Audio, desc: " |- House"}
- {id: 504, cat: Audio, desc: " |- Dubstep"}
- {id: 412, cat: Audio, desc: " |- Soundtrack / OST"}
- {id: 502, cat: Audio, desc: " |- Hardcore, Hardstyle, Jumpstyle"}
- {id: 262, cat: Audio, desc: " |- Поп музыка"}
- {id: 261, cat: Audio, desc: " |- Рок"}
- {id: 260, cat: Audio, desc: " |- Metal "}
- {id: 260, cat: Audio, desc: " |- Metal"}
- {id: 259, cat: Audio, desc: " |- Шансон"}
- {id: 679, cat: Audio, desc: " |- Джаз / блюз"}
- {id: 42, cat: Audio/Video, desc: "Музыкальное видео"}
- {id: 256, cat: Audio/Video, desc: " |- Новые релизы"}
- {id: 255, cat: Audio/Video, desc: " |- Музыкальные DVD "}
- {id: 254, cat: Audio/Video, desc: " |- Музыкальные HD "}
- {id: 255, cat: Audio/Video, desc: " |- Музыкальные DVD"}
- {id: 254, cat: Audio/Video, desc: " |- Музыкальные HD"}
- {id: 253, cat: Audio/Video, desc: " |- Клипы (видео)"}
- {id: 252, cat: Audio/Video, desc: " |- Концерты (видео)"}
# Спорт Sport
@@ -412,7 +413,7 @@ caps:
- {id: 691, cat: TV/Sport, desc: " |- Рестлинг"}
- {id: 513, cat: TV/Sport, desc: " |- Теннис"}
- {id: 507, cat: TV/Sport, desc: " |- Хоккей"}
- {id: 690, cat: TV/Sport, desc: " |- Формула 1 "}
- {id: 690, cat: TV/Sport, desc: " |- Формула 1"}
- {id: 506, cat: TV/Sport, desc: " |- Футбол"}
- {id: 514, cat: TV/Sport, desc: " |- Другие виды спорта"}
# Все по авто и мото Other
@@ -462,27 +463,27 @@ caps:
# Мобильные устройства Mobile
- {id: 433, cat: PC/Mobile-Other, desc: "Приложения для мобильных телефонов и КПК, КМК"}
- {id: 436, cat: PC/Mobile-Other, desc: " |- Новые релизы"}
- {id: 437, cat: PC/Mobile-Android, desc: " |- Android OS "}
- {id: 435, cat: PC/Mobile-Other, desc: " |- Windows Mobile "}
- {id: 439, cat: PC/Mobile-Other, desc: " |- Symbian "}
- {id: 438, cat: PC/Mobile-iOS, desc: " |- iOS "}
- {id: 440, cat: PC/Mobile-Other, desc: " |- Java "}
- {id: 437, cat: PC/Mobile-Android, desc: " |- Android OS"}
- {id: 435, cat: PC/Mobile-Other, desc: " |- Windows Mobile"}
- {id: 439, cat: PC/Mobile-Other, desc: " |- Symbian"}
- {id: 438, cat: PC/Mobile-iOS, desc: " |- iOS"}
- {id: 440, cat: PC/Mobile-Other, desc: " |- Java"}
- {id: 434, cat: PC/Mobile-Other, desc: "Игры"}
- {id: 441, cat: PC/Mobile-Other, desc: " |- Новые релизы"}
- {id: 442, cat: PC/Mobile-Android, desc: " |- Android OS "}
- {id: 443, cat: PC/Mobile-Other, desc: " |- Symbian "}
- {id: 444, cat: PC/Mobile-iOS, desc: " |- iOS "}
- {id: 446, cat: PC/Mobile-Other, desc: " |- Java "}
- {id: 445, cat: PC/Mobile-Other, desc: " |- Windows Mobile "}
- {id: 575, cat: PC/Mobile-Other, desc: " |- Игры для Windows Phone 7,8 "}
- {id: 442, cat: PC/Mobile-Android, desc: " |- Android OS"}
- {id: 443, cat: PC/Mobile-Other, desc: " |- Symbian"}
- {id: 444, cat: PC/Mobile-iOS, desc: " |- iOS"}
- {id: 446, cat: PC/Mobile-Other, desc: " |- Java"}
- {id: 445, cat: PC/Mobile-Other, desc: " |- Windows Mobile"}
- {id: 575, cat: PC/Mobile-Other, desc: " |- Игры для Windows Phone 7,8"}
- {id: 447, cat: PC/Mobile-Other, desc: "Софт для работы с телефоном"}
- {id: 448, cat: PC/Mobile-Other, desc: "Прошивки"}
- {id: 449, cat: PC/Mobile-Other, desc: " |- Новые релизы"}
- {id: 450, cat: PC/Mobile-Android, desc: " |- Android OS "}
- {id: 451, cat: PC/Mobile-Other, desc: " |- Windows Mobile "}
- {id: 452, cat: PC/Mobile-Other, desc: " |- Symbian "}
- {id: 454, cat: PC/Mobile-iOS, desc: " |- iOS "}
- {id: 455, cat: PC/Mobile-Other, desc: " |- Java "}
- {id: 450, cat: PC/Mobile-Android, desc: " |- Android OS"}
- {id: 451, cat: PC/Mobile-Other, desc: " |- Windows Mobile"}
- {id: 452, cat: PC/Mobile-Other, desc: " |- Symbian"}
- {id: 454, cat: PC/Mobile-iOS, desc: " |- iOS"}
- {id: 455, cat: PC/Mobile-Other, desc: " |- Java"}
# Книги и журналы Books
- {id: 610, cat: Books, desc: " |- Новые релизы"}
- {id: 611, cat: Books, desc: " |- Кино, театр, ТВ, мультипликация"}

View File

@@ -138,16 +138,18 @@ search:
- name: querystring
args: cat
title:
selector: a[href^="details.php?id="]
selector: a[onmouseover]
details:
selector: a[href^="details.php?id="]
selector: a[onmouseover]
attribute: href
poster:
selector: a[href^="details.php?id="]
selector: a[onmouseover]
attribute: onmouseover
filters:
- name: regexp
args: src=\\'(.+?)\\'
- name: replace
args: ["./pic/noposter.png", ""]
download:
selector: a[href^="download.php"]
attribute: href

View File

@@ -30,12 +30,13 @@ caps:
music-search: [q, artist]
settings:
- name: username
- name: cookie
type: text
label: Username
- name: password
type: password
label: Password
label: Cookie
- name: info
type: info
label: How to get the Cookie
default: "<ol><li>Login to this tracker with your browser<li>Open the <b>DevTools</b> panel by pressing <b>F12</b><li>Select the <b>Network</b> tab<li>Click on the <b>Doc</b> button (Chrome Browser) or <b>HTML</b> button (FireFox)<li>Refresh the page by pressing <b>F5</b><li>Click on the first row entry<li>Select the <b>Headers</b> tab on the Right panel<li>Find <b>'cookie:'</b> in the <b>Request Headers</b> section<li><b>Select</b> and <b>Copy</b> the whole cookie string <i>(everything after 'cookie: ')</i> and <b>Paste</b> here.</ol>"
- name: freeleech
type: checkbox
label: Search freeleech only
@@ -62,23 +63,9 @@ settings:
asc: asc
login:
path: login.php
method: form
form: form[action="takelogin.php"]
captcha:
type: image
selector: img[alt="CAPTCHA"]
input: imagestring
method: cookie
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
logout: ""
securelogin: ""
ssl: yes
trackerssl: yes
error:
- selector: td.embedded:has(h2:contains("失敗"))
- selector: td.embedded:has(h2:contains("failed!"))
cookie: "{{ .Config.cookie }}"
test:
path: index.php
selector: a[href="logout.php"]

View File

@@ -15,6 +15,7 @@ caps:
- {id: 6, cat: TV/Documentary, desc: "Documentales"}
- {id: 7, cat: TV/Sport, desc: "Deportes"}
- {id: 8, cat: Movies, desc: "Hagbard"}
- {id: 9, cat: Movies, desc: "Studio Ghibli"}
modes:
search: [q]

View File

@@ -11,9 +11,8 @@ legacylinks:
- https://legacyhd.org/
caps:
# dont forget to update the case block in the search fields category
categorymappings:
- {id: 1, cat: Movies, desc: "Movies"}
- {id: 1, cat: Movies, desc: "Movie"}
modes:
search: [q]
@@ -51,6 +50,16 @@ settings:
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
@@ -66,10 +75,8 @@ search:
selector: meta.total
fields:
category:
categorydesc:
selector: category
case:
Movie: 1
title:
selector: name
details:
@@ -78,13 +85,11 @@ search:
selector: download_link
poster:
selector: poster
imdbid:
selector: imdb_id
filters:
- name: replace
args: ["https://via.placeholder.com/90x135", ""]
- name: replace
args: ["https://via.placeholder.com/400x600", ""]
imdbid:
selector: imdb_id
tmdbid:
selector: tmdb_id
tvdbid:

View File

@@ -9,7 +9,6 @@ links:
- https://www.rintor.net/
caps:
# dont forget to update the search fields category case block
categorymappings:
- {id: 27, cat: XXX, desc: "Фильмы 2160 4K | Movies 2160p 4K"}
- {id: 20, cat: XXX, desc: "Сайтрипы 2160 4K | Porn Video 2160p 4K"}
@@ -20,8 +19,8 @@ caps:
- {id: 24, cat: XXX, desc: "Инцест (Инсценировка) | Incest (Simulation)"}
- {id: 22, cat: XXX, desc: "Лесбиянки | Lesbians"}
- {id: 26, cat: XXX, desc: "Порно Кастинг | Porno Casting"}
- {id: 29, cat: XXX, desc: "Японское Порно | Japanese Porn (Uncen)"}
- {id: 23, cat: XXX, desc: "Ретро Порно, Классика | Classic Porn, Retro"}
- {id: 29, cat: XXX, desc: "Японское (Без Цензуры) | Japanese Porn (Uncen)"}
- {id: 23, cat: XXX, desc: "Ретро Порно, Классика | Retro Porn, Classic"}
- {id: 21, cat: XXX, desc: "Женское Доминирование, Страпон | Femdom, StrapOn"}
- {id: 17, cat: XXX, desc: "БДСМ, Фистинг, Дилдо | BDSM, Fisting, Dildo"}
- {id: 19, cat: XXX, desc: "Беременные | Pregnant"}
@@ -60,30 +59,8 @@ search:
selector: div.entry:has(div.entry__title)
fields:
category:
selector: div.entry__info
case:
"a:last-of-type:contains(\"Movies 2160p\")": 27
"a:last-of-type:contains(\"Video 2160p\")": 20
"a:last-of-type:contains(\"Movies HD\")": 1
"a:last-of-type:contains(\"SiteRips\")": 9
"a:last-of-type:contains(\"WEBRip\")": 12
"a:last-of-type:contains(\"Amateur\")": 10
"a:last-of-type:contains(\"Incest\")": 24
"a:last-of-type:contains(\"Lesbians\")": 22
"a:last-of-type:contains(\"Casting\")": 26
"a:last-of-type:contains(\"Japanese\")": 29
"a:last-of-type:contains(\"Classic\")": 23
"a:last-of-type:contains(\"Femdom\")": 21
"a:last-of-type:contains(\"BDSM\")": 17
"a:last-of-type:contains(\"Pregnant\")": 19
"a:last-of-type:contains(\"Bukkake\")": 28
"a:last-of-type:contains(\"Peeing\")": 25
"a:last-of-type:contains(\"Shemale\")": 16
"a:last-of-type:contains(\"Picture\")": 11
"a:last-of-type:contains(\"Cartoons\")": 14
"a:last-of-type:contains(\"Games\")": 13
"a:last-of-type:contains(\"Gay\")": 15
categorydesc:
selector: div.entry__info > span > a
title:
selector: div.entry__title > h3 > a
details:

View File

@@ -11,6 +11,12 @@ links:
caps:
categorymappings:
# Кинематограф movies
- {id: 1677, cat: Movies, desc: "Кинематограф Зарубежные новинки (2022)"}
- {id: 1676, cat: Movies, desc: "Кинематограф Российские новинки (2022)"}
- {id: 1675, cat: Movies/HD, desc: "Кинематограф Зарубежные новинки в 720p (2022)"}
- {id: 1674, cat: Movies/HD, desc: "Кинематограф Российские новинки в 720p (2022)"}
- {id: 1673, cat: Movies/HD, desc: "Кинематограф Зарубежные новинки в 1080p (2022)"}
- {id: 1672, cat: Movies/HD, desc: "Кинематограф Российские новинки в 1080р (2022)"}
- {id: 1656, cat: Movies, desc: "Новинки (2021)"}
- {id: 1662, cat: Movies, desc: " |- Зарубежные новинки (2021)"}
- {id: 1661, cat: Movies, desc: " |- Российские новинки (2021)"}

View File

@@ -12,7 +12,6 @@ legacylinks:
- http://www.shareisland.org/
caps:
# dont forget to update the case block in the search fields category
categorymappings:
- {id: 1, cat: Movies, desc: "Movie"}
- {id: 2, cat: TV, desc: "Serie TV"}
@@ -59,6 +58,16 @@ settings:
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
@@ -82,17 +91,8 @@ search:
selector: meta.total
fields:
category:
categorydesc:
selector: category
case:
"Movie": 1
"Serie TV": 2
"Ebook": 15
"Riviste e Giornali": 17
"XXX": 19
"Music": 3
"Games": 7
"Software": 23
title:
selector: name
filters:
@@ -128,8 +128,6 @@ search:
filters:
- name: replace
args: ["https://via.placeholder.com/90x135", ""]
- name: replace
args: ["https://via.placeholder.com/400x600", ""]
imdbid:
selector: imdb_id
tmdbid:

View File

@@ -0,0 +1,60 @@
---
id: showrss
name: showRSS
description: "showRSS is a service that allows you to keep track of your favorite TV shows"
language: en-US
type: public
encoding: UTF-8
links:
- https://showrss.info/
caps:
categorymappings:
- {id: 1, cat: TV/SD}
- {id: 2, cat: TV/HD}
modes:
search: [q]
tv-search: [q, season, ep]
settings: []
search:
paths:
- path: /other/all.rss
response:
type: xml
attribute: attributes
rows:
selector: rss > channel > item
filters:
- name: andmatch
fields:
category:
selector: raw_title
filters:
case:
":contains(\"720p\")": 2
":contains(\"1080p\")": 2
"*": 1
title:
selector: raw_title
details:
text: "{{ .Config.sitelink }}"
date:
selector: pubDate
download:
selector: link
size:
text: "512 MB"
seeders:
text: 1
leechers:
text: 1
downloadvolumefactor:
text: 0
uploadvolumefactor:
text: 1
# engine n/a

View File

@@ -9,7 +9,6 @@ links:
- https://skipthecommericals.xyz/
caps:
# dont forget to update the case block in the search fields category
categorymappings:
- {id: 2, cat: TV, desc: "TV Show"}
@@ -25,7 +24,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://datascene.xyz/\" target =_blank>DataScene</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://skipthecommericals.xyz/\" target =_blank>SkipTheCommercials</a> account <i>My Security</i> page and clicking on the <b>API Token</b> tab."
- name: freeleech
type: checkbox
label: Search freeleech only
@@ -47,6 +46,16 @@ settings:
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
@@ -66,10 +75,8 @@ search:
selector: meta.total
fields:
category:
categorydesc:
selector: category
case:
"TV Show": 2
title:
selector: name
details:
@@ -81,8 +88,6 @@ search:
filters:
- name: replace
args: ["https://via.placeholder.com/90x135", ""]
- name: replace
args: ["https://via.placeholder.com/400x600", ""]
imdbid:
selector: imdb_id
tmdbid:

View File

@@ -71,13 +71,19 @@ caps:
book-search: [q]
settings:
- name: cookie
- name: username
type: text
label: Cookie
- name: info
label: Username
- name: password
type: password
label: Password
- name: 2facode
type: text
label: 2FA code
- name: info_2fa
type: info
label: How to get the Cookie
default: "<ol><li>Login to this tracker with your browser<li>Open the <b>DevTools</b> panel by pressing <b>F12</b><li>Select the <b>Network</b> tab<li>Click on the <b>Doc</b> button (Chrome Browser) or <b>HTML</b> button (FireFox)<li>Refresh the page by pressing <b>F5</b><li>Click on the first row entry<li>Select the <b>Headers</b> tab on the Right panel<li>Find <b>'cookie:'</b> in the <b>Request Headers</b> section<li><b>Select</b> and <b>Copy</b> the whole cookie string <i>(everything after 'cookie: ')</i> and <b>Paste</b> here.</ol>"
label: "About 2FA code"
default: "Only fill in the <b>2FA code</b> box if you have enabled <b>2FA</b> on the SpiderTK Web Site. Otherwise just leave it empty."
- name: freeleech
type: checkbox
label: Search freeleech only
@@ -104,9 +110,26 @@ settings:
asc: asc
login:
method: cookie
path: login.php
method: form
form: form[action="takelogin.php"]
captcha:
type: image
selector: img[alt="CAPTCHA"]
input: imagestring
inputs:
cookie: "{{ .Config.cookie }}"
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
two_step_code: "{{ .Config.2facode }}"
logout: ""
securelogin: ""
ssl: yes
trackerssl: ""
error:
- selector: td.embedded:has(h2:contains("Echoué")) # invalid captcha
- selector: td.embedded:has(h2:contains("Échec")) # invalid uid or pwd
message:
selector: td.text
test:
path: index.php
selector: a[href="logout.php"]

View File

@@ -9,7 +9,6 @@ links:
- https://swarmazon.club/
caps:
# dont forget to update the search fields category case block
categorymappings:
- {id: 1, cat: Movies, desc: "Movies"}
- {id: 2, cat: TV, desc: "Television"}
@@ -56,7 +55,7 @@ login:
search:
paths:
- path: "{{ if .Keywords }}en/search/search.php?category=all&query={{ .Keywords }}&limit=50{{ else }}index.php?date_range=14{{ end }}"
- path: "{{ if .Keywords }}en/search/search.php?category=all&query={{ .Keywords }}{{ else }}latest.php?date_range=14{{ end }}"
rows:
selector: table.table-striped > tbody > tr
@@ -64,19 +63,14 @@ search:
- name: andmatch
fields: # some users (rank specific?) have an extra column (td:nth-child(4)) with bookmark features
category:
selector: td.Name
case:
"small:contains(\"in Movies\")": 1
"small:contains(\"in Television\")": 2
"small:contains(\"in Video Courses\")": 3
"small:contains(\"in Music\")": 4
"small:contains(\"in Games\")": 5
"small:contains(\"in Software\")": 6
"small:contains(\"in Anime\")": 7
"small:contains(\"in E-Books\")": 8
"small:contains(\"in Audio Books\")": 9
"small:contains(\"in Comics\")": 10
categorydesc:
selector: td.Name small
filters:
- name: re_replace
args: ["(.+?)in\\s(.+?)", "$2"]
- name: replace
args: ["Freeleech", ""]
- name: trim
title:
selector: a[href*="/view/torrent.php?hash="]
details:

View File

@@ -13,7 +13,6 @@ legacylinks:
- https://telly.to/
caps:
# dont forget to update the case block in the search fields category
categorymappings:
- {id: 1, cat: Movies, desc: "Movie"}
- {id: 2, cat: TV, desc: "TV"}
@@ -59,6 +58,16 @@ settings:
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
@@ -74,17 +83,8 @@ search:
selector: meta.total
fields:
category:
categorydesc:
selector: category
case:
"Movie": 1
"TV": 2
"Music": 3
"Web Originals": 4
"Games": 5
"Application": 6
"Mobile App": 7
"Movies": 8
title:
selector: name
details:
@@ -96,8 +96,6 @@ search:
filters:
- name: replace
args: ["https://via.placeholder.com/90x135", ""]
- name: replace
args: ["https://via.placeholder.com/400x600", ""]
imdbid:
selector: imdb_id
tmdbid:

View File

@@ -5,6 +5,8 @@ description: "The Horror Charnel (THC) is a Private Torrent Tracker for HORROR /
language: en-US
type: private
encoding: UTF-8
certificates:
- ffcfcef31cc501c935dedfeae5be2aff9ebcd19f # expired 23 Jan 2022
links:
- https://horrorcharnel.org/

View File

@@ -35,10 +35,10 @@ caps:
- {id: 169, cat: TV/Other, desc: "TV/Boxset"}
- {id: 191, cat: TV, desc: "TV/BluTv"}
- {id: 192, cat: TV, desc: "TV/BluTv Series"}
- {id: 193, cat: Movies, desc: "TV/BluTv Film"}
- {id: 193, cat: Movies, desc: "Movies/BluTv Film"}
- {id: 188, cat: TV, desc: "TV/Netflix"}
- {id: 189, cat: TV, desc: "TV/Netflix Series"}
- {id: 190, cat: Movies, desc: "TV/Netflix Film"}
- {id: 190, cat: Movies, desc: "Movies/Netflix Film"}
- {id: 195, cat: TV, desc: "TV/Exxen"}
- {id: 171, cat: Audio, desc: "Music"}
- {id: 172, cat: Audio, desc: "Music/Turkish"}
@@ -53,6 +53,7 @@ caps:
- {id: 179, cat: PC, desc: "OS"}
- {id: 180, cat: PC/Games, desc: "PC/Games"}
- {id: 181, cat: Console, desc: "Playstation"}
- {id: 198, cat: Movies, desc: "Movies/Amazon Prime"}
modes:
search: [q]

View File

@@ -59,7 +59,7 @@ settings: []
search:
paths:
# https://www.torrentfunk.com/all/torrents/morty-402-castellano.html
- path: "all/torrents/{{ .Keywords }}.html"
- path: "all/torrents/{{ if .Keywords }}{{ .Keywords }}{{ else }}{{ .Today.Year }}{{ end }}.html"
keywordsfilters:
- name: re_replace
args: ["[\\s]+", "-"]

View File

@@ -87,13 +87,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 in your browser<li>Open the <b>DevTools</b> panel by pressing <b>F12</b><li>Select the <b>Network</b> tab<li>Click on the <b>Doc</b> button<li>Refresh the page by pressing <b>F5</b><li>Select the <b>Headers</b> tab<li>Find 'cookie:' in the <b>Request Headers</b> section<li>Copy & paste the whole cookie string to here</ol>"
label: Username
- name: password
type: password
label: Password
- name: freeleech
type: checkbox
label: Search freeleech only
@@ -119,15 +118,20 @@ settings:
asc: asc
login:
method: cookie
path: lt/account-login.php
method: post
inputs:
cookie: "{{ .Config.cookie }}"
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- selector: div.klaida
- selector: p.error_text
test:
path: lt/torrents.php
path: lt/torrents
search:
paths:
- path: lt/torrents.php
- path: lt/torrents
inputs:
$raw: "{{ range .Categories }}cats[]={{.}}&{{end}}"
search: "{{ .Keywords }}"

View File

@@ -7,9 +7,8 @@ type: public
encoding: UTF-8
followredirect: true
links:
- https://torrentqq125.com/
- https://torrentqq127.com/
legacylinks:
- https://torrentqq104.com/
- https://torrentqq105.com/
- https://torrentqq106.com/
- https://torrentqq107.com/
@@ -28,6 +27,8 @@ legacylinks:
- https://torrentqq121.com/
- https://torrentqq122.com/
- https://torrentqq123.com/
- https://torrentqq125.com/
- https://torrentqq126.com/
caps:
categorymappings:

View File

@@ -9,7 +9,6 @@ links:
- https://torrentseeds.org/
caps:
# dont forget to update the case block in the search fields category
categorymappings:
- {id: 1, cat: PC/0day, desc: "Apps"}
- {id: 5, cat: TV/Anime, desc: "Anime"}
@@ -22,12 +21,14 @@ caps:
- {id: 8, cat: TV, desc: "Packs"}
- {id: 3206, cat: TV/Foreign, desc: "TV/Foreign"}
- {id: 3207, cat: Movies/Foreign, desc: "Movies/Foreign"}
- {id: 3208, cat: Books/EBook, desc: "E-Books"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid, tvdbid]
movie-search: [q, imdbid, tmdbid]
music-search: [q]
book-search: [q]
settings:
- name: apikey
@@ -58,6 +59,16 @@ settings:
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
@@ -73,20 +84,8 @@ search:
selector: meta.total
fields:
category:
categorydesc:
selector: category
case:
"Apps": 1
"Games": 2
"Movies": 3
"Music": 4
"Anime": 5
"Porn": 6
"Sport": 7
"Packs": 8
"TV": 3205
"TV/Foreign": 3206
"Movies/Foreign": 3207
title:
selector: name
details:
@@ -98,8 +97,6 @@ search:
filters:
- name: replace
args: ["https://via.placeholder.com/90x135", ""]
- name: replace
args: ["https://via.placeholder.com/400x600", ""]
imdbid:
selector: imdb_id
tmdbid:

View File

@@ -7,7 +7,7 @@ type: public
encoding: UTF-8
followredirect: true
links:
- https://torrentsir46.com/
- https://torrentsir47.com/
legacylinks:
- https://torrentsir31.com/
- https://torrentsir33.com/
@@ -23,6 +23,7 @@ legacylinks:
- https://torrentsir43.com/
- https://torrentsir44.com/
- https://torrentsir45.com/
- https://torrentsir46.com/
caps:
categorymappings:

View File

@@ -7,10 +7,9 @@ type: public
encoding: UTF-8
followredirect: true
links:
- https://torrentview49.com/
- https://torrentview50.com/
legacylinks:
- https://torrentview.net/
- https://torrentview27.com/
- https://torrentview28.com/
- https://torrentview29.com/
- https://torrentview30.com/
@@ -30,6 +29,7 @@ legacylinks:
- https://torrentview45.com/
- https://torrentview46.com/
- https://torrentview47.com/
- https://torrentview49.com/
caps:
categorymappings:

View File

@@ -7,7 +7,7 @@ type: public
encoding: UTF-8
followredirect: true
links:
- https://torrentwiz36.com/
- https://torrentwiz37.com/
legacylinks:
- https://torrentwiz22.me/
- https://torrentwiz23.me/
@@ -23,6 +23,7 @@ legacylinks:
- https://torrentwiz33.com/
- https://torrentwiz34.com/
- https://torrentwiz35.com/
- https://torrentwiz36.com/
caps:
categorymappings:

View File

@@ -9,7 +9,6 @@ links:
- https://trackeros.tk/
caps:
# dont forget to update the case block in the search fields category
categorymappings:
- {id: 1, cat: Movies, desc: "Películas"}
- {id: 2, cat: TV, desc: "Series"}
@@ -54,6 +53,16 @@ settings:
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
@@ -69,15 +78,8 @@ search:
selector: meta.total
fields:
category:
categorydesc:
selector: category
case:
Películas: 1
Series: 2
Musica: 3
Espectáculos: 7
Documentales: 8
Consolas: 4
title:
selector: name
filters:
@@ -131,11 +133,11 @@ search:
selector: download_link
poster:
selector: poster
imdbid:
selector: imdb_id
filters:
- name: replace
args: ["https://via.placeholder.com/90x135", ""]
imdbid:
selector: imdb_id
tmdbid:
selector: tmdb_id
tvdbid:

View File

@@ -0,0 +1,125 @@
---
id: uhd-heaven
name: UHD-HEAVEN
description: "UHD-HEAVEN is a Private Torrent Tracker for UHD MOVIES / TV"
language: en-US
type: private
encoding: UTF-8
links:
- https://uhd-heaven.xyz/
caps:
categorymappings:
- {id: 1, cat: Movies, desc: "Movies"}
- {id: 2, cat: TV, desc: "TV"}
modes:
search: [q]
tv-search: [q, season, ep, imdbid, tvdbid]
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://uhd-heaven.xyz/\" target =_blank>UHD-HEAVEN</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?api_token={{ .Config.apikey }}&name={{ if .Query.IMDBID }}{{ else }}{{ .Keywords }}{{ end }}{{ if .Query.TMDBID }}&tmdbId={{ .Query.TMDBID }}{{ else }}{{ end }}{{ if .Query.IMDBIDShort }}&imdbId={{ .Query.IMDBIDShort }}{{ else }}{{ end }}{{ if .Query.TVDBID }}&tvdbId={{ .Query.TVDBID }}{{ else }}{{ end }}&sortField={{ .Config.sort }}&sortDirection={{ .Config.type }}&perPage=100&page=1{{ range .Categories }}&categories[]={{.}}{{end}}{{ if .Config.freeleech }}&free=1{{ else }}{{ end }}"
response:
type: json
attribute: attributes
rows:
selector: data
count:
selector: meta.total
fields:
categorydesc:
selector: category
title:
selector: name
details:
selector: details_link
download:
selector: download_link
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:
# 2021-10-18T00:34:50.000000Z"
selector: created_at
size:
selector: size
downloadvolumefactor:
# api returns 0=false, 1=true
selector: freeleech
case:
0: 1 # not free
1: 0 # freeleech
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:
# 7 days (as seconds = 7 x 24 x 60 x 60)
text: 604800
# json UNIT3D 5.3.0

View File

@@ -6,7 +6,7 @@ language: fr-FR
type: public
encoding: UTF-8
links:
- https://www.zetorrents.tv/
- https://www.zetorrents.bz/
legacylinks:
- https://www.zetorrents.co/
- https://www.zetorrents.io/
@@ -17,6 +17,7 @@ legacylinks:
- https://www.zetorrents.org/
- https://wvw.zetorrents.org/
- https://www.zetorrents.cc/
- https://www.zetorrents.tv/
caps:
categories:

View File

@@ -132,8 +132,10 @@ namespace Jackett.Common.Indexers
foreach (var searchString in searchStrings)
{
var queryCollection = new NameValueCollection();
queryCollection.Add("action", "basic");
var queryCollection = new NameValueCollection
{
{ "action", "basic" }
};
if (!string.IsNullOrWhiteSpace(searchString))
{
@@ -169,10 +171,11 @@ namespace Jackett.Common.Indexers
var rows = dom.QuerySelectorAll("#torrent_table > tbody > tr.torrent");
foreach (var row in rows)
{
var release = new ReleaseInfo();
release.MinimumRatio = 1;
release.MinimumSeedTime = 172800; // 48 hours
var release = new ReleaseInfo
{
MinimumRatio = 1,
MinimumSeedTime = 172800 // 48 hours
};
var catStr = row.Children[0].FirstElementChild.GetAttribute("href").Split(new[] { '[', ']' })[1];
release.Category = MapTrackerCatToNewznab(catStr);

View File

@@ -173,9 +173,10 @@ namespace Jackett.Common.Indexers
foreach (var name in titles)
{
var release = new ReleaseInfo();
release.Title = (name + releaseInfo).Trim();
var release = new ReleaseInfo
{
Title = (name + releaseInfo).Trim()
};
// Ensure the season is defined as this tracker only deals with full seasons
if (release.Title.IndexOf("Season") == -1 && AppendSeason)
{

View File

@@ -558,6 +558,19 @@ namespace Jackett.Common.Indexers
return response.ContentBytes;
}
public virtual async Task<WebResult> DownloadImage(Uri link)
{
var uncleanLink = UncleanLink(link);
var requestLink = uncleanLink.ToString();
var referer = SiteLink;
var response = await RequestWithCookiesAsync(requestLink, null, RequestType.GET, referer);
if (response.IsRedirect)
await FollowIfRedirect(response);
return response;
}
protected async Task<WebResult> RequestWithCookiesAndRetryAsync(
string url, string cookieOverride = null, RequestType method = RequestType.GET,
string referer = null, IEnumerable<KeyValuePair<string, string>> data = null,

View File

@@ -130,13 +130,15 @@ namespace Jackett.Common.Indexers
var searchString = query.GetQueryString();
var searchUrl = BrowseUrl;
var queryCollection = new NameValueCollection();
queryCollection.Add("showsearch", "0");
queryCollection.Add("incldead", "1");
queryCollection.Add("blah", "0");
queryCollection.Add("team", "0");
queryCollection.Add("orderby", "added");
queryCollection.Add("sort", "desc");
var queryCollection = new NameValueCollection
{
{ "showsearch", "0" },
{ "incldead", "1" },
{ "blah", "0" },
{ "team", "0" },
{ "orderby", "added" },
{ "sort", "desc" }
};
if (!string.IsNullOrWhiteSpace(searchString))
queryCollection.Add("search", searchString);
@@ -156,11 +158,13 @@ namespace Jackett.Common.Indexers
foreach (var row in rows)
{
var release = new ReleaseInfo();
release.MinimumRatio = 0.7;
release.MinimumSeedTime = 172800; // 48 hours
release.DownloadVolumeFactor = 1;
release.UploadVolumeFactor = 1;
var release = new ReleaseInfo
{
MinimumRatio = 0.7,
MinimumSeedTime = 172800, // 48 hours
DownloadVolumeFactor = 1,
UploadVolumeFactor = 1
};
var flagImgs = row.QuerySelectorAll("table tbody tr:nth-of-type(1) td > img");
var flags = new List<string>();

View File

@@ -10,6 +10,7 @@ using System.Threading.Tasks;
using AngleSharp.Dom;
using AngleSharp.Html.Dom;
using AngleSharp.Html.Parser;
using AngleSharp.Xml.Parser;
using Jackett.Common.Helpers;
using Jackett.Common.Models;
using Jackett.Common.Models.IndexerConfig;
@@ -1258,19 +1259,19 @@ namespace Jackett.Common.Indexers
variables[".Query.Q"] = query.SearchTerm;
variables[".Query.Series"] = null;
variables[".Query.Ep"] = query.Episode;
variables[".Query.Season"] = query.Season;
variables[".Query.Season"] = query.Season > 0 ? query.Season.ToString() : null;
variables[".Query.Movie"] = null;
variables[".Query.Year"] = query.Year.ToString();
variables[".Query.Limit"] = query.Limit.ToString();
variables[".Query.Offset"] = query.Offset.ToString();
variables[".Query.Year"] = query.Year?.ToString() ?? null;
variables[".Query.Limit"] = query.Limit.ToString() ?? null;
variables[".Query.Offset"] = query.Offset.ToString() ?? null;
variables[".Query.Extended"] = query.Extended.ToString();
variables[".Query.Categories"] = query.Categories;
variables[".Query.APIKey"] = query.ApiKey;
variables[".Query.TVDBID"] = query.TvdbID.ToString();
variables[".Query.TVRageID"] = query.RageID;
variables[".Query.TVDBID"] = query.TvdbID?.ToString() ?? null;
variables[".Query.TVRageID"] = query.RageID?.ToString() ?? null;
variables[".Query.IMDBID"] = query.ImdbID;
variables[".Query.IMDBIDShort"] = query.ImdbIDShort;
variables[".Query.TMDBID"] = query.TmdbID.ToString();
variables[".Query.TMDBID"] = query.TmdbID?.ToString() ?? null;
variables[".Query.TVMazeID"] = null;
variables[".Query.TraktID"] = null;
variables[".Query.Album"] = query.Album;
@@ -1463,39 +1464,61 @@ namespace Jackett.Common.Indexers
{
try
{
var SearchResultParser = new HtmlParser();
var SearchResultDocument = SearchResultParser.ParseDocument(results);
IHtmlCollection<IElement> rowsDom;
// check if we need to login again
var loginNeeded = CheckIfLoginIsNeeded(response, SearchResultDocument);
if (loginNeeded)
if (SearchPath.Response != null && SearchPath.Response.Type.Equals("xml"))
{
logger.Info(string.Format("CardigannIndexer ({0}): Relogin required", Id));
var LoginResult = await DoLogin();
if (!LoginResult)
throw new Exception(string.Format("Relogin failed"));
await TestLogin();
response = await RequestWithCookiesAsync(searchUrl, method: method, data: queryCollection);
if (response.IsRedirect && SearchPath.Followredirect)
await FollowIfRedirect(response);
var SearchResultParser = new XmlParser();
var SearchResultDocument = SearchResultParser.ParseDocument(results);
if (Search.Preprocessingfilters != null)
{
results = applyFilters(results, Search.Preprocessingfilters, variables);
SearchResultDocument = SearchResultParser.ParseDocument(results);
logger.Debug(string.Format("CardigannIndexer ({0}): result after preprocessingfilters: {1}", Definition.Id, results));
}
var rowsSelector = applyGoTemplateText(Search.Rows.Selector, variables);
rowsDom = SearchResultDocument.QuerySelectorAll(rowsSelector);
}
else
{
var SearchResultParser = new HtmlParser();
var SearchResultDocument = SearchResultParser.ParseDocument(results);
// check if we need to login again
var loginNeeded = CheckIfLoginIsNeeded(response, SearchResultDocument);
if (loginNeeded)
{
logger.Info(string.Format("CardigannIndexer ({0}): Relogin required", Id));
var LoginResult = await DoLogin();
if (!LoginResult)
throw new Exception(string.Format("Relogin failed"));
await TestLogin();
response = await RequestWithCookiesAsync(searchUrl, method: method, data: queryCollection);
if (response.IsRedirect && SearchPath.Followredirect)
await FollowIfRedirect(response);
results = response.ContentString;
SearchResultDocument = SearchResultParser.ParseDocument(results);
}
checkForError(response, Definition.Search.Error);
if (Search.Preprocessingfilters != null)
{
results = applyFilters(results, Search.Preprocessingfilters, variables);
SearchResultDocument = SearchResultParser.ParseDocument(results);
logger.Debug(string.Format("CardigannIndexer ({0}): result after preprocessingfilters: {1}", Id, results));
}
var rowsSelector = applyGoTemplateText(Search.Rows.Selector, variables);
rowsDom = SearchResultDocument.QuerySelectorAll(rowsSelector);
results = response.ContentString;
SearchResultDocument = SearchResultParser.ParseDocument(results);
}
checkForError(response, Definition.Search.Error);
if (Search.Preprocessingfilters != null)
{
results = applyFilters(results, Search.Preprocessingfilters, variables);
SearchResultDocument = SearchResultParser.ParseDocument(results);
logger.Debug(string.Format("CardigannIndexer ({0}): result after preprocessingfilters: {1}", Id, results));
}
var rowsSelector = applyGoTemplateText(Search.Rows.Selector, variables);
var RowsDom = SearchResultDocument.QuerySelectorAll(rowsSelector);
var Rows = new List<IElement>();
foreach (var RowDom in RowsDom)
foreach (var RowDom in rowsDom)
{
Rows.Add(RowDom);
}
@@ -1914,6 +1937,17 @@ namespace Jackett.Common.Indexers
}
value = release.Category.ToString();
break;
case "categorydesc":
var catsDesc = MapTrackerCatDescToNewznab(value);
if (catsDesc.Any())
{
if (release.Category == null || FieldModifiers.Contains("noappend"))
release.Category = catsDesc;
else
release.Category = release.Category.Union(catsDesc).ToList();
}
value = release.Category.ToString();
break;
case "size":
release.Size = ReleaseInfo.GetBytes(value);
value = release.Size.ToString();

View File

@@ -20,9 +20,8 @@ namespace Jackett.Common.Indexers
[ExcludeFromCodeCoverage]
public class Cinecalidad : BaseWebIndexer
{
private const int MaxItemsPerPage = 15;
private const int MaxSearchPageLimit = 6; // 15 items per page * 6 pages = 90
private string _language;
private const int MaxLatestPageLimit = 3; // 10 items per page * 3 pages = 30
private const int MaxSearchPageLimit = 6;
public override string[] LegacySiteLinks { get; protected set; } = {
"https://cinecalidad.website/",
@@ -41,7 +40,7 @@ namespace Jackett.Common.Indexers
ICacheService cs)
: base(id: "cinecalidad",
name: "Cinecalidad",
description: "Películas Full HD en Castellano y Latino Dual.",
description: "Películas Full HD en Latino Dual.",
link: "https://www.cinecalidad.lat/",
caps: new TorznabCapabilities
{
@@ -55,32 +54,12 @@ namespace Jackett.Common.Indexers
configData: new ConfigurationData())
{
Encoding = Encoding.UTF8;
Language = "es-ES";
Language = "es-419";
Type = "public";
var language = new ConfigurationData.SingleSelectConfigurationItem(
"Select language", new Dictionary<string, string>
{
{"castellano", "Castilian Spanish"},
{"latino", "Latin American Spanish"}
})
{
Value = "castellano"
};
configData.AddDynamic("language", language);
AddCategoryMapping(1, TorznabCatType.MoviesHD);
}
public override void LoadValuesFromJson(JToken jsonConfig, bool useProtectionService = false)
{
{
base.LoadValuesFromJson(jsonConfig, useProtectionService);
var language = (ConfigurationData.SingleSelectConfigurationItem)configData.GetDynamic("language");
_language = language?.Value ?? "castellano";
}
}
public override async Task<IndexerConfigurationStatus> ApplyConfiguration(JToken configJson)
{
LoadValuesFromJson(configJson);
@@ -97,11 +76,9 @@ namespace Jackett.Common.Indexers
var releases = new List<ReleaseInfo>();
var templateUrl = SiteLink;
if (_language.Equals("castellano"))
templateUrl += "espana/";
templateUrl += "{0}?s="; // placeholder for page
var maxPages = 2; // we scrape only 2 pages for recent torrents
var maxPages = MaxLatestPageLimit; // we scrape only 2 pages for recent torrents
if (!string.IsNullOrWhiteSpace(query.GetQueryString()))
{
templateUrl += WebUtilityHelpers.UrlEncode(query.GetQueryString(), Encoding.UTF8);
@@ -124,7 +101,7 @@ namespace Jackett.Common.Indexers
}
releases.AddRange(pageReleases);
if (pageReleases.Count < MaxItemsPerPage)
if (pageReleases.Count < 1)
break; // this is the last page
}
@@ -139,19 +116,8 @@ namespace Jackett.Common.Indexers
{
var parser = new HtmlParser();
var dom = parser.ParseDocument(results.ContentString);
var linkParent = dom.QuerySelector("li:contains('Torrent')").ParentElement;
var protectedLink = linkParent.GetAttribute("data-res");
if (protectedLink != null)
protectedLink = "protect/v.php?i=" + protectedLink;
else
protectedLink = linkParent.GetAttribute("href");
if (protectedLink.Contains("/ouo.io/"))
{
// protected link =>
// https://ouo.io/qs/qsW6rCh4?s=https://www.cinecalidad.is/protect/v2.php?i=A8--9InL&title=High+Life+%282018%29
var linkParts = protectedLink.Split('=');
protectedLink = protectedLink.Replace(linkParts[0] + "=", "");
}
var protectedLink = dom.QuerySelector("a:contains('Torrent')").GetAttribute("data-url");
protectedLink = Base64Decode(protectedLink);
protectedLink = GetAbsoluteUrl(protectedLink);
results = await RequestWithCookiesAsync(protectedLink);
@@ -176,20 +142,23 @@ namespace Jackett.Common.Indexers
var parser = new HtmlParser();
var dom = parser.ParseDocument(response.ContentString);
var rows = dom.QuerySelectorAll("div.postItem");
var rows = dom.QuerySelectorAll("article");
foreach (var row in rows)
{
if (row.QuerySelector("div.selt") != null)
continue; // we only support movies
var qLink = row.QuerySelector("a.absolute");
var qImg = row.QuerySelector("img");
if (qImg == null)
if (qLink == null || qImg == null)
continue; // skip results without image
var title = qImg.GetAttribute("title");
var title = qLink.TextContent.Trim();
if (!CheckTitleMatchWords(query.GetQueryString(), title))
continue; // skip if it doesn't contain all words
title += _language.Equals("castellano") ? " MULTi/SPANiSH" : " MULTi/LATiN SPANiSH";
title += " 1080p BDRip x264";
var poster = new Uri(GetAbsoluteUrl(qImg.GetAttribute("data-src")));
var link = new Uri(row.QuerySelector("a.postItem__back-link").GetAttribute("href"));
title += " MULTi/LATiN SPANiSH 1080p BDRip x264";
var poster = new Uri(GetAbsoluteUrl(qImg.GetAttribute("src")));
var link = new Uri(qLink.GetAttribute("href"));
var release = new ReleaseInfo
{
@@ -243,6 +212,12 @@ namespace Jackett.Common.Indexers
return SiteLink + url.TrimStart('/');
return url;
}
private string Base64Decode(string base64EncodedData)
{
var base64EncodedBytes = Convert.FromBase64String(base64EncodedData);
return Encoding.UTF8.GetString(base64EncodedBytes);
}
}
}

View File

@@ -21,9 +21,9 @@ using WebClient = Jackett.Common.Utils.Clients.WebClient;
namespace Jackett.Common.Indexers
{
[ExcludeFromCodeCoverage]
public class TodoTorrents : BaseWebIndexer
public class DonTorrent : BaseWebIndexer
{
private static class TodoTorrentsCatType
private static class DonTorrentCatType
{
public static string Pelicula => "pelicula";
public static string Pelicula4K => "pelicula4k";
@@ -39,28 +39,32 @@ namespace Jackett.Common.Indexers
private const string SearchUrl = "/buscar/";
public override string[] AlternativeSiteLinks { get; protected set; } = {
"https://dontorrent.it/",
"https://todotorrents.net/",
"https://tomadivx.net/",
"https://seriesblanco.one/"
};
public override string[] LegacySiteLinks { get; protected set; } = {
"https://todotorrents.net"
"https://dontorrent.li/"
};
private static Dictionary<string, string> CategoriesMap => new Dictionary<string, string>
{
{ "/pelicula/", TodoTorrentsCatType.Pelicula },
{ "/serie/", TodoTorrentsCatType.Serie },
{ "/documental", TodoTorrentsCatType.Documental },
{ "/musica/", TodoTorrentsCatType.Musica },
{ "/variado/", TodoTorrentsCatType.Variado },
{ "/juego/", TodoTorrentsCatType.Juego } //games, it can be pc or console
{ "/pelicula/", DonTorrentCatType.Pelicula },
{ "/serie/", DonTorrentCatType.Serie },
{ "/documental", DonTorrentCatType.Documental },
{ "/musica/", DonTorrentCatType.Musica },
{ "/variado/", DonTorrentCatType.Variado },
{ "/juego/", DonTorrentCatType.Juego } //games, it can be pc or console
};
public TodoTorrents(IIndexerConfigurationService configService, WebClient w, Logger l, IProtectionService ps,
public DonTorrent(IIndexerConfigurationService configService, WebClient w, Logger l, IProtectionService ps,
ICacheService cs)
: base(id: "todotorrents",
name: "TodoTorrents",
description: "TodoTorrents is a SPANISH public tracker for MOVIES / TV / GENERAL",
link: "https://todotorrents.net/",
: base(id: "dontorrent",
name: "DonTorrent",
description: "DonTorrent is a SPANISH public tracker for MOVIES / TV / GENERAL",
link: "https://dontorrent.it/",
caps: new TorznabCapabilities
{
TvSearchParams = new List<TvSearchParam>
@@ -90,13 +94,11 @@ namespace Jackett.Common.Indexers
var matchWords = new BoolConfigurationItem("Match words in title") { Value = true };
configData.AddDynamic("MatchWords", matchWords);
//configData.AddDynamic("flaresolverr", new DisplayInfoConfigurationItem("FlareSolverr", "This site may use Cloudflare DDoS Protection, therefore Jackett requires <a href=\"https://github.com/Jackett/Jackett#configuring-flaresolverr\" target=\"_blank\">FlareSolver</a> to access it."));
AddCategoryMapping(TodoTorrentsCatType.Pelicula, TorznabCatType.Movies, "Pelicula");
AddCategoryMapping(TodoTorrentsCatType.Pelicula4K, TorznabCatType.MoviesUHD, "Peliculas 4K");
AddCategoryMapping(TodoTorrentsCatType.Serie, TorznabCatType.TVSD, "Serie");
AddCategoryMapping(TodoTorrentsCatType.SerieHD, TorznabCatType.TVHD, "Serie HD");
AddCategoryMapping(TodoTorrentsCatType.Musica, TorznabCatType.Audio, "Música");
AddCategoryMapping(DonTorrentCatType.Pelicula, TorznabCatType.Movies, "Pelicula");
AddCategoryMapping(DonTorrentCatType.Pelicula4K, TorznabCatType.MoviesUHD, "Peliculas 4K");
AddCategoryMapping(DonTorrentCatType.Serie, TorznabCatType.TVSD, "Serie");
AddCategoryMapping(DonTorrentCatType.SerieHD, TorznabCatType.TVHD, "Serie HD");
AddCategoryMapping(DonTorrentCatType.Musica, TorznabCatType.Audio, "Música");
}
public override async Task<IndexerConfigurationStatus> ApplyConfiguration(JToken configJson)
@@ -135,7 +137,7 @@ namespace Jackett.Common.Indexers
var parser = new HtmlParser();
// Eg https://todotorrents.net/pelicula/24797/Halloween-Kills
// Eg https://dontorrent.li/pelicula/24797/Halloween-Kills
var result = await RequestWithCookiesAsync(downloadUrl);
if (result.Status != HttpStatusCode.OK)
throw new ExceptionWithConfigData(result.ContentString, configData);
@@ -183,7 +185,7 @@ namespace Jackett.Common.Indexers
}
//<span class="text-muted">2022-01-12</span>
//<a href='pelicula/24797/Halloween-Kills' class="text-primary">Halloween Kills</a>
//<a href='pelicula/24797/Halloween-Kills' class="text-primary">Halloween Kills</a>
//<span class="text-muted">(MicroHD-1080p)</span>
if (row.TagName.Equals("A"))
@@ -495,7 +497,6 @@ namespace Jackett.Common.Indexers
Category = MapTrackerCatToNewznab(cat),
PublishDate = publishDate,
Size = size,
Files = 1,
Seeders = 1,
Peers = 2,
DownloadVolumeFactor = 0,
@@ -673,7 +674,7 @@ namespace Jackett.Common.Indexers
case "pelicula4k":
if (title.Contains("4K"))
{
cat = TodoTorrentsCatType.Pelicula4K;
cat = DonTorrentCatType.Pelicula4K;
}
break;
@@ -681,7 +682,7 @@ namespace Jackett.Common.Indexers
case "seriehd":
if (title.Contains("720p") || title.Contains("1080p"))
{
cat = TodoTorrentsCatType.SerieHD;
cat = DonTorrentCatType.SerieHD;
}
break;

View File

@@ -141,9 +141,11 @@ namespace Jackett.Common.Indexers
if (prev == null || !string.Equals(prev.NodeName, "style", StringComparison.OrdinalIgnoreCase))
continue;
var release = new ReleaseInfo();
release.MinimumRatio = 1;
release.MinimumSeedTime = 86400; // 24 hours
var release = new ReleaseInfo
{
MinimumRatio = 1,
MinimumSeedTime = 86400 // 24 hours
};
var qLink = row.Children[1].FirstElementChild;
release.Title = qLink.TextContent.Trim();

View File

@@ -4,6 +4,7 @@ using System.Text;
using System.Threading.Tasks;
using Jackett.Common.Models;
using Jackett.Common.Models.IndexerConfig;
using Jackett.Common.Utils.Clients;
using Newtonsoft.Json.Linq;
namespace Jackett.Common.Indexers
@@ -65,5 +66,7 @@ namespace Jackett.Common.Indexers
public interface IWebIndexer : IIndexer
{
Task<byte[]> Download(Uri link);
Task<WebResult> DownloadImage(Uri link);
}
}

View File

@@ -87,6 +87,16 @@ namespace Jackett.Common.Indexers
Language = "en-US";
Type = "private";
var sort = new ConfigurationData.SingleSelectConfigurationItem("Sort requested from site", new Dictionary<string, string>
{
{"time", "created"},
{"size", "size"},
{"seeders", "seeders"},
{"name", "title"}
})
{ Value = "time" };
configData.AddDynamic("sort", sort);
configData.AddDynamic("freeleech", new BoolConfigurationItem("Search freeleech only") { Value = false });
AddCategoryMapping(72, TorznabCatType.Movies, "Movies");
@@ -201,6 +211,8 @@ namespace Jackett.Common.Indexers
if (((BoolConfigurationItem)configData.GetDynamic("freeleech")).Value)
qc.Add("free", "on");
qc.Add("o", ((SingleSelectConfigurationItem)configData.GetDynamic("sort")).Value);
var searchUrl = SearchUrl + "?" + qc.GetQueryString();
var response = await RequestWithCookiesAndRetryAsync(searchUrl, referer: SearchUrl);
var results = response.ContentString;

View File

@@ -36,7 +36,7 @@ namespace Jackett.Common.Indexers
private const string SearchUrl = "secciones.php";
public override string[] AlternativeSiteLinks { get; protected set; } = {
"https://www.mejortorrentes.net/",
"https://www.mejortorrentes.org/",
"https://mejortorrent.nocensor.biz/",
"https://mejortorrent.unblockit.how/"
};
@@ -59,6 +59,7 @@ namespace Jackett.Common.Indexers
"https://www.mejortorrentes.com/",
"https://www.mejortorrento.info/",
"https://mejortorrent.nocensor.work/",
"https://www.mejortorrentes.net/",
"https://mejortorrent.unblockit.tv/"
};
@@ -67,7 +68,7 @@ namespace Jackett.Common.Indexers
: base(id: "mejortorrent",
name: "MejorTorrent",
description: "MejorTorrent - Hay veces que un torrent viene mejor! :)",
link: "https://www.mejortorrentes.net/",
link: "https://www.mejortorrentes.org/",
caps: new TorznabCapabilities
{
TvSearchParams = new List<TvSearchParam>

View File

@@ -132,7 +132,7 @@ namespace Jackett.Common.Indexers
: base(id: "newpct",
name: "NewPCT",
description: "NewPCT - Descargar peliculas, series y estrenos torrent gratis",
link: "https://atomixhq.net/",
link: "https://atomixhq.top/",
caps: new TorznabCapabilities
{
TvSearchParams = new List<TvSearchParam>

View File

@@ -168,9 +168,11 @@ namespace Jackett.Common.Indexers
foreach (var row in rows)
{
// TODO convert to initializer
var release = new ReleaseInfo();
release.MinimumRatio = 1;
release.MinimumSeedTime = 259200; // 72 hours
var release = new ReleaseInfo
{
MinimumRatio = 1,
MinimumSeedTime = 259200 // 72 hours
};
var catId = "82"; // default
var qCatLink = row.Children[categoryIndex].QuerySelector("a");

View File

@@ -1,122 +0,0 @@
using System;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
using Jackett.Common.Models;
using Jackett.Common.Models.IndexerConfig;
using Jackett.Common.Services.Interfaces;
using Jackett.Common.Utils.Clients;
using Newtonsoft.Json.Linq;
using NLog;
namespace Jackett.Common.Indexers
{
[ExcludeFromCodeCoverage]
public class ShowRSS : BaseWebIndexer
{
private string SearchAllUrl => SiteLink + "other/all.rss";
private string BrowseUrl => SiteLink + "browse/";
public override string[] LegacySiteLinks { get; protected set; } = {
"http://showrss.info/"
};
private new ConfigurationData configData => base.configData;
public ShowRSS(IIndexerConfigurationService configService, WebClient wc, Logger l, IProtectionService ps,
ICacheService cs)
: base(id: "showrss",
name: "ShowRSS",
description: "showRSS is a service that allows you to keep track of your favorite TV shows",
link: "https://showrss.info/",
caps: new TorznabCapabilities
{
TvSearchParams = new List<TvSearchParam>
{
TvSearchParam.Q, TvSearchParam.Season, TvSearchParam.Ep
}
},
configService: configService,
client: wc,
logger: l,
p: ps,
cacheService: cs,
configData: new ConfigurationData())
{
Encoding = Encoding.UTF8;
Language = "en-US";
Type = "public";
AddCategoryMapping(1, TorznabCatType.TV);
AddCategoryMapping(2, TorznabCatType.TVSD);
AddCategoryMapping(3, TorznabCatType.TVHD);
}
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.RequiresTesting;
}
protected override async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query)
{
var releases = new List<ReleaseInfo>();
var episodeSearchUrl = string.Format(SearchAllUrl);
var result = await RequestWithCookiesAndRetryAsync(episodeSearchUrl);
var xmlDoc = new XmlDocument();
try
{
xmlDoc.LoadXml(result.ContentString);
foreach (XmlNode node in xmlDoc.GetElementsByTagName("item"))
{
var title = node.SelectSingleNode(".//*[local-name()='raw_title']").InnerText;
if (!query.MatchQueryStringAND(title))
continue;
// TODO: use Jackett.Common.Utils.TvCategoryParser.ParseTvShowQuality
// guess category from title
var category = title.Contains("720p") || title.Contains("1080p") ?
TorznabCatType.TVHD.ID :
TorznabCatType.TVSD.ID;
var magnetUri = new Uri(node.SelectSingleNode("link")?.InnerText);
var publishDate = DateTime.Parse(node.SelectSingleNode("pubDate").InnerText, CultureInfo.InvariantCulture);
var infoHash = node.SelectSingleNode(".//*[local-name()='info_hash']").InnerText;
var details = new Uri(BrowseUrl + node.SelectSingleNode(".//*[local-name()='show_id']").InnerText);
var release = new ReleaseInfo
{
Title = title,
Details = details,
Category = new List<int> { category },
Guid = magnetUri,
PublishDate = publishDate,
InfoHash = infoHash,
MagnetUri = magnetUri,
Size = 512,
Seeders = 1,
Peers = 2,
DownloadVolumeFactor = 0,
UploadVolumeFactor = 1
};
releases.Add(release);
}
}
catch (Exception e)
{
OnParseError(result.ContentString, e);
}
return releases;
}
}
}

View File

@@ -13,6 +13,7 @@ using Jackett.Common.Utils.Clients;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using NLog;
using static Jackett.Common.Models.IndexerConfig.ConfigurationData;
namespace Jackett.Common.Indexers
{
@@ -85,6 +86,8 @@ namespace Jackett.Common.Indexers
wc.EmulateBrowser = false;
configData.AddDynamic("freeleech", new BoolConfigurationItem("Search freeleech only") { Value = false });
AddCategoryMapping(29, TorznabCatType.TVAnime, "Anime");
AddCategoryMapping(28, TorznabCatType.PC, "Appz/Packs");
AddCategoryMapping(42, TorznabCatType.AudioAudiobook, "Audio Books");
@@ -171,6 +174,9 @@ namespace Jackett.Common.Indexers
else
searchUrl += ";q=" + WebUtilityHelpers.UrlEncode(query.GetQueryString(), Encoding);
if (((BoolConfigurationItem)configData.GetDynamic("freeleech")).Value)
searchUrl += ";free=on";
var results = await RequestWithCookiesAndRetryAsync(searchUrl);
// Check for being logged out

View File

@@ -11,6 +11,7 @@
<ItemGroup>
<PackageReference Include="AngleSharp" Version="0.16.1" />
<PackageReference Include="AngleSharp.Xml" Version="0.16.0" />
<PackageReference Include="Autofac" Version="6.3.0" />
<PackageReference Include="AutoMapper" Version="10.1.1" />
<PackageReference Include="BencodeNET" Version="4.0.0" />

View File

@@ -150,7 +150,7 @@ namespace Jackett.Common.Services
if (!File.Exists(fullPath))
{
logger.Debug("Config file does not exist: " + fullPath);
return default(T);
return default;
}
return serializeService.DeSerialise<T>(File.ReadAllText(fullPath));

View File

@@ -42,6 +42,7 @@ namespace Jackett.Common.Services
{
{"audiobooktorrents", "abtorrents"},
{"broadcastthenet", "broadcasthenet"},
{"todotorrents", "dontorrent"},
{"hdreactor", "hdhouse"},
{"icetorrent", "speedapp"},
{"kickasstorrent-kathow", "kickasstorrents-ws"},

View File

@@ -16,7 +16,7 @@ namespace Jackett.Common.Services
}
catch
{
return default(T);
return default;
}
}
}

View File

@@ -44,6 +44,10 @@ namespace Jackett.Common.Services
filePermissionService = fps;
variant = new Variants().GetVariant();
// Increase the HTTP client timeout just for update download (not other requests)
// The update is heavy and can take longer time for slow connections. Fix #12711
client.SetTimeout(300); // 5 minutes
}
public void StartUpdateChecker() => Task.Factory.StartNew(UpdateWorkerThread);

View File

@@ -10,7 +10,7 @@ namespace Jackett.Common.Utils
{
var commonAssembly = Assembly.GetExecutingAssembly();
var attribute = commonAssembly.GetCustomAttribute<BuildDateAttribute>();
return attribute?.DateTime ?? default(DateTime);
return attribute?.DateTime ?? default;
}
}

View File

@@ -49,6 +49,8 @@ namespace Jackett.Common.Utils.Clients
return sslPolicyErrors == SslPolicyErrors.None;
}
public override void SetTimeout(int seconds) => ClientTimeout = seconds;
public override void Init()
{
base.Init();
@@ -92,6 +94,7 @@ namespace Jackett.Common.Utils.Clients
clearanceHandlr.InnerHandler = clientHandlr;
using (var client = new HttpClient(clearanceHandlr))
{
client.Timeout = TimeSpan.FromSeconds(ClientTimeout);
using (var request = new HttpRequestMessage())
{
request.Headers.ExpectContinue = false;
@@ -154,10 +157,9 @@ namespace Jackett.Common.Utils.Clients
};
foreach (var header in response.Headers)
{
var value = header.Value;
result.Headers[header.Key.ToLowerInvariant()] = value.ToArray();
}
result.Headers[header.Key.ToLowerInvariant()] = header.Value.ToArray();
foreach (var header in response.Content.Headers)
result.Headers[header.Key.ToLowerInvariant()] = header.Value.ToArray();
// some cloudflare clients are using a refresh header
// Pull it out manually

View File

@@ -77,6 +77,8 @@ namespace Jackett.Common.Utils.Clients
clearanceHandlr.InnerHandler = clientHandlr;
client = new HttpClient(clearanceHandlr);
SetTimeout(ClientTimeout);
}
// Called everytime the ServerConfig changes
@@ -90,6 +92,12 @@ namespace Jackett.Common.Utils.Clients
}
}
public override void SetTimeout(int seconds)
{
ClientTimeout = seconds;
client.Timeout = TimeSpan.FromSeconds(ClientTimeout);
}
public override void Init()
{
base.Init();
@@ -175,10 +183,9 @@ namespace Jackett.Common.Utils.Clients
};
foreach (var header in response.Headers)
{
var value = header.Value;
result.Headers[header.Key.ToLowerInvariant()] = value.ToArray();
}
result.Headers[header.Key.ToLowerInvariant()] = header.Value.ToArray();
foreach (var header in response.Content.Headers)
result.Headers[header.Key.ToLowerInvariant()] = header.Value.ToArray();
// some cloudflare clients are using a refresh header
// Pull it out manually

View File

@@ -25,6 +25,7 @@ namespace Jackett.Common.Utils.Clients
protected DateTime lastRequest = DateTime.MinValue;
protected TimeSpan requestDelayTimeSpan;
protected string ClientType;
protected int ClientTimeout = 100; // default timeout is 100 s
public bool EmulateBrowser = true;
protected static Dictionary<string, ICollection<string>> trustedCertificates = new Dictionary<string, ICollection<string>>();
@@ -224,6 +225,8 @@ namespace Jackett.Common.Utils.Clients
InitProxy(serverConfig);
}
public virtual void SetTimeout(int seconds) => throw new NotImplementedException();
/**
* This method does the same as FormUrlEncodedContent but with custom encoding instead of utf-8
* https://stackoverflow.com/a/13832544

View File

@@ -43,9 +43,7 @@ namespace Jackett.Common.Utils
internal LambdaFilterFuncComponent(string id, Func<string, Func<IIndexer, bool>> builder) : base(id)
{
if (builder == null)
throw new ArgumentNullException(nameof(builder));
this.builder = builder;
this.builder = builder ?? throw new ArgumentNullException(nameof(builder));
}
public override Func<IIndexer, bool> ToFunc(string args)

View File

@@ -0,0 +1,72 @@
using System;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Jackett.Common.Models.Config;
using Jackett.Common.Services.Interfaces;
using Jackett.Server.ActionFilters;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.WebUtilities;
using NLog;
namespace Jackett.Server.Controllers
{
[AllowAnonymous]
[DownloadActionFilter]
[ResponseCache(Location = ResponseCacheLocation.None, NoStore = true)]
[Route("img/{indexerID}")]
public class ImageController : Controller
{
private readonly ServerConfig serverConfig;
private readonly Logger logger;
private readonly IIndexerManagerService indexerService;
private readonly IProtectionService protectionService;
public ImageController(IIndexerManagerService i, Logger l, IProtectionService ps, ServerConfig sConfig)
{
serverConfig = sConfig;
logger = l;
indexerService = i;
protectionService = ps;
}
[HttpGet]
public async Task<IActionResult> DownloadImage(string indexerID, string path, string jackett_apikey, string file)
{
try
{
if (serverConfig.APIKey != jackett_apikey)
return Unauthorized();
var indexer = indexerService.GetWebIndexer(indexerID);
if (!indexer.IsConfigured)
{
logger.Warn($"Rejected a request to {indexer.DisplayName} which is unconfigured.");
return Forbid("This indexer is not configured.");
}
path = Encoding.UTF8.GetString(WebEncoders.Base64UrlDecode(path));
path = protectionService.UnProtect(path);
var target = new Uri(path, UriKind.RelativeOrAbsolute);
var response = await indexer.DownloadImage(target);
if (response.Status != System.Net.HttpStatusCode.OK &&
response.Status != System.Net.HttpStatusCode.Continue &&
response.Status != System.Net.HttpStatusCode.PartialContent)
return new StatusCodeResult((int)response.Status);
var contentType = response.Headers.ContainsKey("content-type") ?
response.Headers["content-type"].First() :
"image/jpeg";
return File(response.ContentBytes, contentType);
}
catch (Exception e)
{
logger.Debug($"Error downloading image. indexer: {indexerID} path: {path}\n{e}");
return new StatusCodeResult((int)System.Net.HttpStatusCode.InternalServerError);
}
}
}
}

View File

@@ -167,11 +167,11 @@ namespace Jackett.Server.Controllers
var serverUrl = serverService.GetServerUrl(Request);
foreach (var result in results)
{
var link = result.Link;
var file = StringUtil.MakeValidFileName(result.Title, '_', false);
result.Link = serverService.ConvertToProxyLink(link, serverUrl, result.TrackerId, "dl", file);
result.Link = serverService.ConvertToProxyLink(result.Link, serverUrl, result.TrackerId, "dl", file);
result.Poster = serverService.ConvertToProxyLink(result.Poster, serverUrl, result.TrackerId, "img", "poster");
if (result.Link != null && result.Link.Scheme != "magnet" && !string.IsNullOrWhiteSpace(serverService.GetBlackholeDirectory()))
result.BlackholeLink = serverService.ConvertToProxyLink(link, serverUrl, result.TrackerId, "bh", file);
result.BlackholeLink = serverService.ConvertToProxyLink(result.Link, serverUrl, result.TrackerId, "bh", file);
}
}

View File

@@ -414,6 +414,7 @@ namespace Jackett.Server.Controllers
var proxiedReleases = result.Releases.Select(r => MapperUtil.Mapper.Map<ReleaseInfo>(r)).Select(r =>
{
r.Link = serverService.ConvertToProxyLink(r.Link, serverUrl, r.Origin.Id, "dl", r.Title);
r.Poster = serverService.ConvertToProxyLink(r.Poster, serverUrl, r.Origin.Id, "img", "poster");
return r;
});
@@ -498,6 +499,9 @@ namespace Jackett.Server.Controllers
{
var release = MapperUtil.Mapper.Map<ReleaseInfo>(r);
release.Link = serverService.ConvertToProxyLink(release.Link, serverUrl, CurrentIndexer.Id, "dl", release.Title);
// Poster is not used in Potato response
//release.Poster = serverService.ConvertToProxyLink(release.Poster, serverUrl, CurrentIndexer.Id, "img", "poster");
// IMPORTANT: We can't use Uri.ToString(), because it generates URLs without URL encode (links with unicode
// characters are broken). We must use Uri.AbsoluteUri instead that handles encoding correctly
var item = new TorrentPotatoResponseItem()
@@ -531,13 +535,13 @@ namespace Jackett.Server.Controllers
var serverUrl = serverService.GetServerUrl(Request);
foreach (var result in results)
{
var link = result.Link;
var file = StringUtil.MakeValidFileName(result.Title, '_', false);
result.Link = serverService.ConvertToProxyLink(link, serverUrl, result.TrackerId, "dl", file);
result.Link = serverService.ConvertToProxyLink(result.Link, serverUrl, result.TrackerId, "dl", file);
result.Poster = serverService.ConvertToProxyLink(result.Poster, serverUrl, result.TrackerId, "img", "poster");
if (!string.IsNullOrWhiteSpace(serverConfig.BlackholeDir))
{
if (result.Link != null)
result.BlackholeLink = serverService.ConvertToProxyLink(link, serverUrl, result.TrackerId, "bh", file);
result.BlackholeLink = serverService.ConvertToProxyLink(result.Link, serverUrl, result.TrackerId, "bh", file);
else if (result.MagnetUri != null)
result.BlackholeLink = serverService.ConvertToProxyLink(result.MagnetUri, serverUrl, result.TrackerId, "bh", file);
}

View File

@@ -356,6 +356,7 @@ namespace Jackett.Updater
"Definitions/hdbc.yml", // renamed to hdbitscom
"Definitions/hdclub.yml",
"Definitions/hddisk.yml",
"Definitions/hdolimpo.yml", // migrated to UNIT3D API
"Definitions/hdplus.yml",
"Definitions/hdreactor.yml", // renamed to hdhouse
"Definitions/hdstreet.yml",