mirror of
https://github.com/Jackett/Jackett.git
synced 2025-12-22 06:06:43 +01:00
Compare commits
61 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fa2025cfd4 | ||
|
|
dfbd9753af | ||
|
|
65a673f02d | ||
|
|
842a844966 | ||
|
|
d0a988b40e | ||
|
|
222afe4672 | ||
|
|
86bb86c68e | ||
|
|
ad1b84ee89 | ||
|
|
2108c139aa | ||
|
|
dd74f55711 | ||
|
|
a8b4da3eb7 | ||
|
|
6162de159d | ||
|
|
f2f8a2eb3d | ||
|
|
3938b4ecb4 | ||
|
|
3943302e0d | ||
|
|
34b5887e2f | ||
|
|
b38627b7d4 | ||
|
|
7af3b141e2 | ||
|
|
4e6a470c62 | ||
|
|
49e8d72a94 | ||
|
|
cbffbe5738 | ||
|
|
0568c226b1 | ||
|
|
e1cc732293 | ||
|
|
89dc15ad80 | ||
|
|
32128b5c61 | ||
|
|
76644c380b | ||
|
|
9ec189367e | ||
|
|
56c3a0c21b | ||
|
|
d47f059031 | ||
|
|
5f8c2de953 | ||
|
|
4963cacc07 | ||
|
|
c95fb103fe | ||
|
|
a3225049e7 | ||
|
|
3b87b862da | ||
|
|
655262e76b | ||
|
|
47b6e1594f | ||
|
|
d31e084f4f | ||
|
|
a3dfdc6aaf | ||
|
|
ce11beb6e1 | ||
|
|
4773e3bc4c | ||
|
|
e47d2b1961 | ||
|
|
319e196341 | ||
|
|
30fee2b231 | ||
|
|
80d3f4c1a0 | ||
|
|
aae061e7a9 | ||
|
|
48ba07f500 | ||
|
|
144957821f | ||
|
|
8d468be93a | ||
|
|
97e8196edd | ||
|
|
b5f457e06f | ||
|
|
8b5ef12567 | ||
|
|
674ddc09b8 | ||
|
|
51d5eee095 | ||
|
|
a78a0e94d5 | ||
|
|
a4f7c7a826 | ||
|
|
c2b2d51875 | ||
|
|
6f761d1bc4 | ||
|
|
ed8be733fc | ||
|
|
5584438a94 | ||
|
|
b68ba1b338 | ||
|
|
d06272a26a |
@@ -127,7 +127,6 @@ A third-party Golang SDK for Jackett is available from [webtor-io/go-jackett](ht
|
||||
* RuTor
|
||||
* RuTracker.RU
|
||||
* seleZen
|
||||
* Sexxi
|
||||
* Sexy-Pics
|
||||
* ShizaProject
|
||||
* ShowRSS
|
||||
@@ -139,7 +138,6 @@ A third-party Golang SDK for Jackett is available from [webtor-io/go-jackett](ht
|
||||
* Tokyo Tosho
|
||||
* Torlock
|
||||
* Torlook
|
||||
* TOROS
|
||||
* Torrent Downloads (TD)
|
||||
* Torrent Oyun indir
|
||||
* torrent.by
|
||||
@@ -256,6 +254,7 @@ A third-party Golang SDK for Jackett is available from [webtor-io/go-jackett](ht
|
||||
* AmigosShareClub
|
||||
* anasch.cc
|
||||
* AnimeBytes (AB)
|
||||
* AnimeItalia
|
||||
* AnimeTorrents (AnT) [![(invite needed)][inviteneeded]](#)
|
||||
* AnimeWorld [![(invite needed)][inviteneeded]](#)
|
||||
* Anthelion
|
||||
@@ -275,7 +274,6 @@ A third-party Golang SDK for Jackett is available from [webtor-io/go-jackett](ht
|
||||
* Bit-Bázis
|
||||
* Bit-City Reloaded
|
||||
* BIT-HDTV
|
||||
* BiT-TiTAN
|
||||
* BitBR
|
||||
* Bitded
|
||||
* Bithorlo (BHO)
|
||||
@@ -535,7 +533,6 @@ A third-party Golang SDK for Jackett is available from [webtor-io/go-jackett](ht
|
||||
* TellyTorrent
|
||||
* teracod (Movie Zone)
|
||||
* The-Crazy-Ones
|
||||
* The-Devils-Lounge
|
||||
* The Falling Angels (TFA) [![(invite needed)][inviteneeded]](#)
|
||||
* The Geeks
|
||||
* The Horror Charnel (THC)
|
||||
|
||||
@@ -14,9 +14,8 @@ links:
|
||||
- https://x1337x.eu/
|
||||
- https://x1337x.se/
|
||||
- https://1337x.unblockit.day/
|
||||
- https://1337x.nocensor.biz/
|
||||
- https://1337x.nocensor.sbs/
|
||||
legacylinks:
|
||||
- https://1337x.unblocked.rest/
|
||||
- https://1337x.unblockit.dev/
|
||||
- https://1337x.unblockit.ltd/
|
||||
- https://1337x.unblockit.link/
|
||||
@@ -36,6 +35,7 @@ legacylinks:
|
||||
- https://1337x.unblockit.tv/
|
||||
- https://1337x.unblockit.how/
|
||||
- https://1337x.unblockit.cam/
|
||||
- https://1337x.nocensor.biz/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
|
||||
@@ -150,4 +150,4 @@ search:
|
||||
minimumseedtime:
|
||||
# 5 days (as seconds = 3 x 24 x 60 x 60)
|
||||
text: 432000
|
||||
# json UNIT3D 6.0.1
|
||||
# json UNIT3D 6.0.5
|
||||
|
||||
155
src/Jackett.Common/Definitions/animeitalia.yml
Normal file
155
src/Jackett.Common/Definitions/animeitalia.yml
Normal file
@@ -0,0 +1,155 @@
|
||||
---
|
||||
id: animeitalia
|
||||
name: AnimeItalia
|
||||
description: "AnimeItalia is an ITALIAN Private Torrent Tracker for ANIME"
|
||||
language: it-IT
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://animeitalia.org/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: Movies, desc: "Film ITA"}
|
||||
- {id: 2, cat: TV, desc: "Serie TV"}
|
||||
- {id: 3, cat: Audio, desc: "Musica"}
|
||||
- {id: 4, cat: Console, desc: "Giochi"}
|
||||
- {id: 5, cat: PC, desc: "Programmi"}
|
||||
- {id: 6, cat: TV/Anime, desc: "Anime SUB-ITA"}
|
||||
- {id: 7, cat: TV/Anime, desc: "Anime ITA"}
|
||||
- {id: 8, cat: Movies/Other, desc: "Film Anime SUB-ITA"}
|
||||
- {id: 9, cat: Movies/Other, desc: "Film Anime ITA"}
|
||||
- {id: 10, cat: Books/Comics, desc: "Manga ITA"}
|
||||
- {id: 11, cat: Books/Comics, desc: "Manga ENG"}
|
||||
- {id: 12, cat: Audio, desc: "Anime Music"}
|
||||
- {id: 13, cat: Other, desc: "Foto Anime"}
|
||||
- {id: 14, cat: XXX/Other, desc: "Hentai SUB-ITA"}
|
||||
- {id: 15, cat: XXX/Other, desc: "Hentai ITA"}
|
||||
- {id: 16, cat: XXX/ImageSet, desc: "Foto Hentai"}
|
||||
|
||||
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 <a href=\"https://animeitalia.org/\" target =_blank>AnimeItalia</a> account <i>My Security</i> page and clicking on the <b>API Token</b> tab."
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
default: created_at
|
||||
options:
|
||||
created_at: created
|
||||
seeders: seeders
|
||||
size: size
|
||||
name: title
|
||||
- name: type
|
||||
type: select
|
||||
label: Order requested from site
|
||||
default: desc
|
||||
options:
|
||||
desc: desc
|
||||
asc: asc
|
||||
|
||||
login:
|
||||
path: /api/torrents
|
||||
method: get
|
||||
inputs:
|
||||
api_token: "{{ .Config.apikey }}"
|
||||
error:
|
||||
- selector: a[href*="/login"]
|
||||
message:
|
||||
text: "The API key was not accepted by {{ .Config.sitelink }}."
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://hdinnovations.github.io/UNIT3D-Community-Edition-Docs/api_endpoints.html
|
||||
# https://github.com/HDInnovations/UNIT3D-Community-Edition/blob/master/app/Http/Controllers/API/TorrentController.php
|
||||
- path: "/api/torrents/filter"
|
||||
response:
|
||||
type: json
|
||||
|
||||
inputs:
|
||||
# if we have an id based search, add Season and Episode as query in name for UNIT3D < v6. Else pass S/E Params for UNIT3D >= v6
|
||||
api_token: "{{ .Config.apikey }}"
|
||||
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
|
||||
args: ["\\.", " "]
|
||||
|
||||
rows:
|
||||
selector: data
|
||||
attribute: attributes
|
||||
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%, 25%, 50%, 75%, 100%
|
||||
selector: freeleech
|
||||
case:
|
||||
0%: 1 # not free
|
||||
25%: 0.75
|
||||
50%: 0.5
|
||||
75%: 0.25
|
||||
100%: 0 # freeleech
|
||||
"*": 0 # catch errors
|
||||
uploadvolumefactor:
|
||||
# api returns 0=false, 1=true
|
||||
selector: double_upload
|
||||
case:
|
||||
0: 1 # normal
|
||||
1: 2 # double
|
||||
minimumratio:
|
||||
text: 1.0
|
||||
# json UNIT3D 6.0.4
|
||||
@@ -47,6 +47,7 @@ caps:
|
||||
- {id: 52, cat: TV, desc: "مسرحيات (Plays)"}
|
||||
- {id: 71, cat: TV, desc: "مسلسلات مدبلجه عربي (Arabic Dubbed Series)"}
|
||||
- {id: 90, cat: TV, desc: "برامج ومسابقات (Shows)"}
|
||||
- {id: 111, cat: TV, desc: "2022 رمضان (2022 Ramadan)"}
|
||||
# المرئيات الاجنبية Foreign Movies
|
||||
- {id: 92, cat: TV/Foreign, desc: "تعليمي (Educational)"}
|
||||
- {id: 93, cat: TV/Documentary, desc: "وثائقي (Documentary)"}
|
||||
|
||||
@@ -7,9 +7,10 @@ type: public
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://badasstorrents.com/
|
||||
- https://badasstorrents.nocensor.biz/
|
||||
- https://badasstorrents.nocensor.sbs/
|
||||
legacylinks:
|
||||
- https://badasstorrents.nocensor.work/
|
||||
- https://badasstorrents.nocensor.biz/
|
||||
|
||||
caps:
|
||||
categories:
|
||||
|
||||
@@ -1,191 +0,0 @@
|
||||
---
|
||||
id: bit-titan
|
||||
name: BiT-TiTAN
|
||||
description: "BiT-TiTAN is a GERMAN Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
language: de-DE
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://bit-titan.net/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1010, cat: Movies/UHD, desc: "Movies 2160p"}
|
||||
- {id: 1020, cat: Movies/HD, desc: "Movies 1080p"}
|
||||
- {id: 1030, cat: Movies/HD, desc: "Movies 720p"}
|
||||
- {id: 1040, cat: Movies/HD, desc: "Movies x264"}
|
||||
- {id: 1050, cat: Movies/HD, desc: "Movies x265"}
|
||||
- {id: 1060, cat: Movies/SD, desc: "Movies XviD"}
|
||||
- {id: 1070, cat: Movies/3D, desc: "Movies 3D"}
|
||||
- {id: 1080, cat: Movies/DVD, desc: "Movies DVD"}
|
||||
- {id: 1090, cat: Movies/BluRay, desc: "Movies BluRay"}
|
||||
- {id: 1100, cat: Movies/DVD, desc: "Movies HD2DVD"}
|
||||
- {id: 1110, cat: Movies/Foreign, desc: "Movies International"}
|
||||
- {id: 1120, cat: Movies/HD, desc: "Movies HD Packs"}
|
||||
- {id: 1130, cat: Movies/SD, desc: "Movies SD Packs"}
|
||||
- {id: 2010, cat: TV/UHD, desc: "TV 2160p"}
|
||||
- {id: 2020, cat: TV/HD, desc: "TV 1080p"}
|
||||
- {id: 2030, cat: TV/HD, desc: "TV 720p"}
|
||||
- {id: 2040, cat: TV/HD, desc: "TV x264"}
|
||||
- {id: 2050, cat: TV/HD, desc: "TV x265"}
|
||||
- {id: 2060, cat: TV/SD, desc: "TV XviD"}
|
||||
- {id: 2070, cat: TV/HD, desc: "TV HD Packs"}
|
||||
- {id: 2080, cat: TV/SD, desc: "TV SD Packs"}
|
||||
- {id: 2090, cat: TV/Foreign, desc: "TV International"}
|
||||
- {id: 3010, cat: TV/Documentary, desc: "Docu 2160p"}
|
||||
- {id: 3020, cat: TV/Documentary, desc: "Docu 1080p"}
|
||||
- {id: 3030, cat: TV/Documentary, desc: "Docu 720p"}
|
||||
- {id: 3040, cat: TV/Documentary, desc: "Docu x264"}
|
||||
- {id: 3050, cat: TV/Documentary, desc: "Docu x265"}
|
||||
- {id: 3060, cat: TV/Documentary, desc: "Docu XviD"}
|
||||
- {id: 3070, cat: TV/Documentary, desc: "Docu HD Packs"}
|
||||
- {id: 3080, cat: TV/Documentary, desc: "Docu SD Packs"}
|
||||
- {id: 3090, cat: TV/Documentary, desc: "Docu International"}
|
||||
- {id: 4010, cat: TV/Sport, desc: "Sport 2160p"}
|
||||
- {id: 4020, cat: TV/Sport, desc: "Sport 1080p"}
|
||||
- {id: 4030, cat: TV/Sport, desc: "Sport 720p"}
|
||||
- {id: 4040, cat: TV/Sport, desc: "Sport SD Sport"}
|
||||
- {id: 4050, cat: TV/Sport, desc: "Sport HD Packs"}
|
||||
- {id: 4060, cat: TV/Sport, desc: "Sport SD Packs"}
|
||||
- {id: 5010, cat: XXX, desc: "XXX 2160p"}
|
||||
- {id: 5020, cat: XXX, desc: "XXX 1080p"}
|
||||
- {id: 5030, cat: XXX, desc: "XXX 720p"}
|
||||
- {id: 5040, cat: XXX, desc: "XXX x264"}
|
||||
- {id: 5050, cat: XXX, desc: "XXX x265"}
|
||||
- {id: 5060, cat: XXX, desc: "XXX XviD"}
|
||||
- {id: 5070, cat: XXX, desc: "XXX HD Packs"}
|
||||
- {id: 5080, cat: XXX, desc: "XXX SD Packs"}
|
||||
- {id: 5090, cat: XXX, desc: "XXX Sonstiges"}
|
||||
- {id: 6010, cat: PC/Games, desc: "Games Windows"}
|
||||
- {id: 6020, cat: Console, desc: "Games Linux"}
|
||||
- {id: 6030, cat: PC/Mac, desc: "Games MacOS"}
|
||||
- {id: 6040, cat: PC/Mobile-Android, desc: "Games Android"}
|
||||
- {id: 6050, cat: Console/XBox, desc: "Games Xbox"}
|
||||
- {id: 6060, cat: Console/PSP, desc: "Games PlayStation"}
|
||||
- {id: 6070, cat: Console/NDS, desc: "Games Nintendo"}
|
||||
- {id: 6080, cat: Console, desc: "Games Sonstige"}
|
||||
- {id: 7010, cat: PC/0day, desc: "Software Windows"}
|
||||
- {id: 7020, cat: PC, desc: "Software Linux"}
|
||||
- {id: 7030, cat: PC/Mac, desc: "Software MacOS"}
|
||||
- {id: 7040, cat: PC/Mobile-Android, desc: "Software Android"}
|
||||
- {id: 8010, cat: Audio/MP3, desc: "Music MP3-Album"}
|
||||
- {id: 8020, cat: Audio/MP3, desc: "Music MP3-Charts"}
|
||||
- {id: 8030, cat: Audio/MP3, desc: "Music MP3-Sampler"}
|
||||
- {id: 8040, cat: Audio/MP3, desc: "Music MP3-Single"}
|
||||
- {id: 8050, cat: Audio/Lossless, desc: "Music FLAC-Album"}
|
||||
- {id: 8060, cat: Audio/Lossless, desc: "Music FLAC-Charts"}
|
||||
- {id: 8070, cat: Audio/Lossless, desc: "Music FLAC-Sampler"}
|
||||
- {id: 8080, cat: Audio/Lossless, desc: "Music FLAC-Single"}
|
||||
- {id: 8090, cat: Audio/Video, desc: "Music Video"}
|
||||
- {id: 9010, cat: Audio/Audiobook, desc: "Books A-Book"}
|
||||
- {id: 9020, cat: Books/EBook, desc: "Books E-Book"}
|
||||
- {id: 9030, cat: Books, desc: "Books E-Paper"}
|
||||
- {id: 9040, cat: Books, desc: "Books E-Learning"}
|
||||
- {id: 9060, cat: TV/Anime, desc: "Anime HD"}
|
||||
- {id: 9070, cat: TV/Anime, desc: "Anime SD"}
|
||||
- {id: 9080, cat: TV/Anime, desc: "Anime Pack"}
|
||||
- {id: 9999, cat: Other, desc: "unsort"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
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 key <a href=\"https://bit-titan.net/api_cp.php\" target =_blank>here</a>."
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort type requested from site
|
||||
default: 1
|
||||
options:
|
||||
1: created
|
||||
2: seeders
|
||||
5: size
|
||||
9: title
|
||||
- name: type
|
||||
type: select
|
||||
label: Order direction requested from site
|
||||
default: 1
|
||||
options:
|
||||
1: desc
|
||||
2: asc
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: api.php
|
||||
response:
|
||||
type: json
|
||||
|
||||
inputs:
|
||||
apiKey: "{{ .Config.apikey }}"
|
||||
categories: "{{ if .Categories }}{{ join .Categories \",\" }}{{ else }}0{{ end }}"
|
||||
search: "{{ .Keywords }}"
|
||||
# searchIn: 0 all, 1 active, 2 dead, 3 highlights, 4 uploads, 5 BOT uploads, 6 onlyupload, 7 multiplier, 8 %download, 9 freeleech
|
||||
searchIn: "{{ if .Config.freeleech }}9{{ else }}0{{ end }}"
|
||||
# 1 25, 2 50, 3 75, 4 100
|
||||
limit: 2
|
||||
page: 1
|
||||
# 1 JSON, 2 XML, 3 HTML
|
||||
response: 1
|
||||
# 0 NO, 1 YES
|
||||
downloadLink: 1
|
||||
# 1 = Sat, 28 Nov 2020 23:29:38 +0100 (DEFAULT VALUE) , 2 = 1606606178 (UNIX TIMESTAMP) , 3 = 28.11.2020 23:29.38 (German Timestamp) , 4 = 2020-11-28 23:29:38 (Default Datetime)
|
||||
timeFormat: 2
|
||||
# 1 bytes, 2 units
|
||||
sizeFormat: 1
|
||||
# 0 NO, 1 YES
|
||||
categoryName: 0
|
||||
orderBy: "{{ .Config.sort }}"
|
||||
order: "{{ .Config.type }}"
|
||||
|
||||
rows:
|
||||
selector: results
|
||||
count:
|
||||
selector: filesFound
|
||||
|
||||
fields:
|
||||
id:
|
||||
selector: id
|
||||
category:
|
||||
selector: category
|
||||
title:
|
||||
selector: name
|
||||
details:
|
||||
text: "details.php?id={{ .Result.id }}"
|
||||
download:
|
||||
selector: download
|
||||
poster:
|
||||
selector: poster
|
||||
seeders:
|
||||
selector: seeds
|
||||
leechers:
|
||||
selector: leechers
|
||||
grabs:
|
||||
selector: snatchers
|
||||
date:
|
||||
# unix
|
||||
selector: added
|
||||
size:
|
||||
selector: size
|
||||
downloadvolumefactor:
|
||||
selector: downloadFactor
|
||||
uploadvolumefactor:
|
||||
selector: uploadFactor
|
||||
minimumratio:
|
||||
text: 1.0
|
||||
minimumseedtime:
|
||||
# 2 day (as seconds = 2 x 24 x 60 x 60)
|
||||
text: 172800
|
||||
# json engine v.2.011.022
|
||||
@@ -130,7 +130,7 @@ search:
|
||||
size:
|
||||
selector: td:nth-child(6)
|
||||
date:
|
||||
#2022<br>03/15.
|
||||
# 2022<br>03/15.
|
||||
selector: td:nth-child(7)
|
||||
filters:
|
||||
- name: append
|
||||
|
||||
@@ -7,6 +7,8 @@ type: public
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://bitsearch.to/
|
||||
- https://bitsearch.nocensor.sbs/
|
||||
legacylinks:
|
||||
- https://bitsearch.nocensor.biz/
|
||||
|
||||
caps:
|
||||
|
||||
@@ -88,8 +88,8 @@ search:
|
||||
selector: meta.total
|
||||
|
||||
fields:
|
||||
categorydesc:
|
||||
selector: category
|
||||
category:
|
||||
selector: category_id
|
||||
title:
|
||||
selector: name
|
||||
details:
|
||||
@@ -142,4 +142,4 @@ search:
|
||||
minimumseedtime:
|
||||
# 7 day (as seconds = 7 x 24 x 60 x 60)
|
||||
text: 604800
|
||||
# json UNIT3D 6.0.0 beta
|
||||
# json UNIT3D 6.0.6 beta
|
||||
|
||||
@@ -100,7 +100,7 @@ search:
|
||||
by: "{{ .Config.type }}"
|
||||
|
||||
rows:
|
||||
selector: "table.lista tr td table.lista tr:has(a[href^=\"index.php?page=torrent-details\"]){{ if .Config.freeleech }}:has(img[src=\"gold/gold.gif\"]){{ else }}{{ end }}"
|
||||
selector: "table.lista tr td table.lista tr:has(a[href^=\"index.php?page=torrent-details\"]):not(:has(a[href=\"index.php?page=torrents&category=0\"])){{ if .Config.freeleech }}:has(img[src=\"gold/gold.gif\"]){{ else }}{{ end }}"
|
||||
|
||||
fields:
|
||||
category:
|
||||
|
||||
@@ -133,4 +133,4 @@ search:
|
||||
minimumseedtime:
|
||||
# 2 day (as seconds = 2 x 24 x 60 x 60)
|
||||
text: 172800
|
||||
# json DBy v0.95
|
||||
# json DBy v0.96
|
||||
|
||||
@@ -13,9 +13,8 @@ links:
|
||||
- https://demonoidevmsgasmojajlhikwetsr4pxzw6xkjt3dgdv6nr5yxvsamid.onion.ly/
|
||||
- https://demonoid.unblockit.day/
|
||||
- https://demonoid.torrentbay.to/
|
||||
- https://demonoid.nocensor.biz/
|
||||
- https://demonoid.nocensor.sbs/
|
||||
legacylinks:
|
||||
- https://demonoid.unblockit.top/
|
||||
- https://demonoid.unblockit.lat/
|
||||
- https://demonoid.unblockit.app/
|
||||
- https://demonoid.unblockit.dev/
|
||||
@@ -35,6 +34,7 @@ legacylinks:
|
||||
- https://demonoid.unblockit.tv/
|
||||
- https://demonoid.unblockit.how/
|
||||
- https://demonoid.unblockit.cam/
|
||||
- https://demonoid.nocensor.biz/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
|
||||
@@ -7,7 +7,7 @@ type: public
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://elitetorrent.la/
|
||||
- https://elitetorrent.nocensor.biz/
|
||||
- https://elitetorrent.nocensor.sbs/
|
||||
legacylinks:
|
||||
- https://www.elitetorrent.biz/
|
||||
- https://www.elitetorrent.io/
|
||||
@@ -28,6 +28,7 @@ legacylinks:
|
||||
- https://elitetorrent.nocensor.work/
|
||||
- https://elitetorrent.com/
|
||||
- https://elitetorrent.app/
|
||||
- https://elitetorrent.nocensor.biz/
|
||||
|
||||
caps:
|
||||
categories:
|
||||
|
||||
@@ -8,7 +8,7 @@ encoding: UTF-8
|
||||
links:
|
||||
- https://extratorrent.st/
|
||||
- https://extratorrent.unblockit.day/
|
||||
- https://extratorrent.nocensor.biz/
|
||||
- https://extratorrent.nocensor.sbs/
|
||||
legacylinks:
|
||||
- https://extratorrent.nocensor.work/
|
||||
- https://extratorrent.unblockit.kim/
|
||||
@@ -16,6 +16,7 @@ legacylinks:
|
||||
- https://extratorrent.unblockit.tv/
|
||||
- https://extratorrent.unblockit.how/
|
||||
- https://extratorrent.unblockit.cam/
|
||||
- https://extratorrent.nocensor.biz/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
|
||||
@@ -13,13 +13,12 @@ links:
|
||||
- https://eztv.yt/
|
||||
- https://eztv.unblockninja.com/
|
||||
- https://eztv.unblockit.day/
|
||||
- https://eztv.nocensor.biz/
|
||||
- https://eztv.nocensor.sbs/
|
||||
legacylinks:
|
||||
- https://eztv.ag/ # redirects to .re
|
||||
- https://eztv.it/ # redirects to .re
|
||||
- https://eztv.ch/ # redirects to .re
|
||||
- https://eztv.io/
|
||||
- https://eztv.unblockit.link/
|
||||
- https://eztv.unblockit.buzz/
|
||||
- https://eztv.unblocked.monster/
|
||||
- https://eztv.unblockit.club/
|
||||
@@ -35,6 +34,7 @@ legacylinks:
|
||||
- https://eztv.unblockit.tv/
|
||||
- https://eztv.unblockit.how/
|
||||
- https://eztv.unblockit.cam/
|
||||
- https://eztv.nocensor.biz/
|
||||
|
||||
caps:
|
||||
categories:
|
||||
|
||||
@@ -7,6 +7,8 @@ type: public
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://filelisting.com/
|
||||
- https://filelisting.nocensor.sbs/
|
||||
legacylinks:
|
||||
- https://filelisting.nocensor.biz/
|
||||
|
||||
caps:
|
||||
|
||||
@@ -7,13 +7,14 @@ type: public
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://www.gamestorrents.fm/
|
||||
- https://gamestorrents.nocensor.biz/
|
||||
- https://gamestorrents.nocensor.sbs/
|
||||
legacylinks:
|
||||
- https://www.gamestorrents.com/
|
||||
- https://www.gamestorrents.tv/
|
||||
- https://www.gamestorrents.nu/
|
||||
- https://gamestorrents.nocensor.space/
|
||||
- https://gamestorrents.nocensor.work/
|
||||
- https://gamestorrents.nocensor.biz/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
|
||||
@@ -184,4 +184,4 @@ search:
|
||||
minimumseedtime:
|
||||
# 2 days (as seconds = 2 x 24 x 60 x 60)
|
||||
text: 172800
|
||||
# json UNIT3D 6.0.4
|
||||
# json UNIT3D 6.0.5
|
||||
|
||||
@@ -8,16 +8,8 @@ encoding: UTF-8
|
||||
followredirect: true
|
||||
links:
|
||||
- https://www.gktorrents.org/
|
||||
- https://gktorrent.nocensor.biz/
|
||||
- https://gktorrent.nocensor.sbs/
|
||||
legacylinks:
|
||||
- https://www.gktorrent.com/
|
||||
- http://www.gktorrent.com/
|
||||
- http://ww1.gktorrent.com/
|
||||
- http://ww2.gktorrent.com/
|
||||
- https://ww2.gktorrent.com/
|
||||
- https://ww3.gktorrent.com/
|
||||
- http://www.gktorrent.net/
|
||||
- https://ww4.gktorrent.com/
|
||||
- http://www.gktorrent.co/
|
||||
- https://www.gktorrent.co/
|
||||
- https://www.gktorrent.ws/
|
||||
@@ -37,6 +29,7 @@ legacylinks:
|
||||
- https://www.gktorrents.com/
|
||||
- https://gktorrent.nocensor.work/
|
||||
- https://www.gktorrents.net/
|
||||
- https://gktorrent.nocensor.biz/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
|
||||
@@ -11,11 +11,10 @@ links:
|
||||
- https://gtdb.cc/
|
||||
- https://www.gtdb.to/
|
||||
- https://glotorrents.unblockit.day/
|
||||
- https://glotorrents.nocensor.biz/
|
||||
- https://glotorrents.nocensor.sbs/
|
||||
legacylinks:
|
||||
- https://glodls.rocks/
|
||||
- https://gtdb.to/
|
||||
- https://glotorrents.unblockit.dev/
|
||||
- https://glotorrents.unblockit.ltd/
|
||||
- https://glotorrents.unblockit.link/
|
||||
- https://glotorrents.unblockit.buzz/
|
||||
@@ -33,6 +32,7 @@ legacylinks:
|
||||
- https://glotorrents.unblockit.tv/
|
||||
- https://glotorrents.unblockit.how/
|
||||
- https://glotorrents.unblockit.cam/
|
||||
- https://glotorrents.nocensor.biz/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
|
||||
@@ -5,6 +5,8 @@ description: "HDCity is a SPANISH site for HD content"
|
||||
language: es-ES
|
||||
type: private
|
||||
encoding: ISO-8859-1
|
||||
certificates:
|
||||
- a10f2f7a863cd3fba9663185b0943cde01698451 # expired 25 October 2021
|
||||
links:
|
||||
- https://hdcity.li/
|
||||
|
||||
|
||||
@@ -132,13 +132,13 @@ search:
|
||||
size:
|
||||
selector: td:nth-child(4)
|
||||
date:
|
||||
# 19.Jul<br>2021<br>06:57
|
||||
# 15.11.21<br>07:47
|
||||
selector: td:nth-child(5)
|
||||
filters:
|
||||
- name: append
|
||||
args: " +00:00" # auto adjusted by site account profile
|
||||
- name: dateparse
|
||||
args: "2.Jan200615:04 -07:00"
|
||||
args: "2.01.0615:04 -07:00"
|
||||
grabs:
|
||||
selector: td:nth-child(7)
|
||||
seeders:
|
||||
|
||||
@@ -16,7 +16,7 @@ caps:
|
||||
- {id: 5, cat: TV, desc: "Série"}
|
||||
- {id: 6, cat: TV/Anime, desc: "Série anim"}
|
||||
- {id: 7, cat: Movies/Other, desc: "Film d'animation"}
|
||||
- {id: 7, cat: Audio/Video, desc: "Concert"}
|
||||
- {id: 9, cat: Audio/Video, desc: "Concert"}
|
||||
- {id: 11, cat: TV/Documentary, desc: "Documentaire"}
|
||||
- {id: 13, cat: Movies/Other, desc: "Court-métrage"}
|
||||
- {id: 14, cat: Movies/Other, desc: "Clip"}
|
||||
|
||||
@@ -79,6 +79,12 @@ search:
|
||||
args: "["
|
||||
- name: append
|
||||
args: "]"
|
||||
- name: re_replace
|
||||
args: ["(?i)(MEGAPACK)", "REPACK"]
|
||||
- name: re_replace
|
||||
args: ["(?i)(AUDIOEDITADO)", "PROPER"]
|
||||
- name: re_replace
|
||||
args: ["(?i)(VERSIÓN MEJORADA)", "PROPER"]
|
||||
title_vose:
|
||||
selector: td.titulo a[id]:contains("VOSE")
|
||||
optional: true
|
||||
|
||||
@@ -1,70 +1,33 @@
|
||||
---
|
||||
id: hidden-palace
|
||||
name: Hidden-Palace
|
||||
description: "Hidden-Palace is a Private torrent site for MOVIES / TV / GENERAL"
|
||||
description: "Hidden-Palace is a Private torrent site for MOVIES / TV"
|
||||
language: en-US
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
testlinktorrent: false
|
||||
links:
|
||||
- https://hidden-palace.net/
|
||||
legacylinks:
|
||||
- https://hidden-palace.xyz/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 39, cat: Audio/Audiobook, desc: "Abook: Abook"}
|
||||
- {id: 1, cat: PC/0day, desc: "Application: 0-Day"}
|
||||
- {id: 2, cat: PC, desc: "Application: Pc"}
|
||||
- {id: 3, cat: PC/Mac, desc: "Application: Mac"}
|
||||
- {id: 38, cat: Books/EBook, desc: "Ebooks: Ebook"}
|
||||
- {id: 32, cat: TV/Anime, desc: "Episodes: Anime"}
|
||||
- {id: 33, cat: TV, desc: "Episodes: Classic"}
|
||||
- {id: 34, cat: TV/Foreign, desc: "Episodes: Foreign"}
|
||||
- {id: 35, cat: TV/HD, desc: "Episodes: TvHD"}
|
||||
- {id: 36, cat: TV/SD, desc: "Episodes: TvSD"}
|
||||
- {id: 37, cat: TV/Sport, desc: "Episodes: TVsports"}
|
||||
- {id: 22, cat: PC/Games, desc: "Games: Pc"}
|
||||
- {id: 23, cat: Console/PS4, desc: "Games: Ps4"}
|
||||
- {id: 24, cat: Console/PS3, desc: "Games: Ps3"}
|
||||
- {id: 25, cat: Console/PSP, desc: "Games: Ps1"}
|
||||
- {id: 26, cat: Console/PSP, desc: "Games: Ps2"}
|
||||
- {id: 27, cat: Console/PSP, desc: "Games: PsP"}
|
||||
- {id: 28, cat: Console/XBox, desc: "Games: xbox"}
|
||||
- {id: 29, cat: Console/Wii, desc: "Games: Wii"}
|
||||
- {id: 30, cat: Console/NDS, desc: "Games: Nintendo"}
|
||||
- {id: 31, cat: Console/Other, desc: "Games: Dreamcast"}
|
||||
- {id: 4, cat: Movies/HD, desc: "Movies: 1080P"}
|
||||
- {id: 5, cat: TV/Anime, desc: "Movies: Anime"}
|
||||
- {id: 6, cat: Movies/DVD, desc: "Movies: DvdR"}
|
||||
- {id: 7, cat: Movies/SD, desc: "Movies: Camer"}
|
||||
- {id: 8, cat: Movies/3D, desc: "Movies: 3D"}
|
||||
- {id: 9, cat: Movies/WEB-DL, desc: "Movies: WEBRip"}
|
||||
- {id: 10, cat: XXX, desc: "Movies: XxX"}
|
||||
- {id: 11, cat: Movies/UHD, desc: "Movies: Real-4K"}
|
||||
- {id: 12, cat: Movies, desc: "Movies: Classic"}
|
||||
- {id: 13, cat: Movies/Foreign, desc: "Movies: Foreign"}
|
||||
- {id: 14, cat: Movies, desc: "Movies: Remux"}
|
||||
- {id: 15, cat: Movies/HD, desc: "Movies: HD"}
|
||||
- {id: 16, cat: Movies/SD, desc: "Movies: SD"}
|
||||
- {id: 17, cat: Movies, desc: "Movies: Packs"}
|
||||
- {id: 18, cat: Movies, desc: "Movies: Animation"}
|
||||
- {id: 19, cat: Audio, desc: "Music: Audio"}
|
||||
- {id: 20, cat: Audio, desc: "Music: Packs"}
|
||||
- {id: 21, cat: Audio/Video, desc: "Music: Video"}
|
||||
- {id: 1, cat: Movies, desc: "Movie"}
|
||||
- {id: 2, cat: TV, desc: "TV"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
music-search: [q]
|
||||
book-search: [q]
|
||||
tv-search: [q, season, ep, imdbid, tvdbid]
|
||||
movie-search: [q, imdbid, tmdbid]
|
||||
|
||||
settings:
|
||||
- name: username
|
||||
- name: apikey
|
||||
type: text
|
||||
label: Username
|
||||
- name: password
|
||||
type: password
|
||||
label: Password
|
||||
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://hidden-palace.net/\" target =_blank>Hidden-Palace</a> account <i>My Security</i> page and clicking on the <b>API Token</b> tab."
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
@@ -72,9 +35,9 @@ settings:
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
default: id
|
||||
default: created_at
|
||||
options:
|
||||
id: created
|
||||
created_at: created
|
||||
seeders: seeders
|
||||
size: size
|
||||
name: title
|
||||
@@ -87,102 +50,95 @@ settings:
|
||||
asc: asc
|
||||
|
||||
login:
|
||||
path: account-login.php
|
||||
method: post
|
||||
path: /api/torrents
|
||||
method: get
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
returnto: /
|
||||
api_token: "{{ .Config.apikey }}"
|
||||
error:
|
||||
- selector: div.my_block:contains("Access Denied")
|
||||
test:
|
||||
path: index.php
|
||||
selector: a[href="account-logout.php"]
|
||||
|
||||
download:
|
||||
before:
|
||||
path: thanks.php
|
||||
method: post
|
||||
inputs:
|
||||
torrent: "{{ .DownloadUri.Query.id }}"
|
||||
selectors:
|
||||
- selector: a[href^="download.php?id="]
|
||||
attribute: href
|
||||
- selector: a[href*="/login"]
|
||||
message:
|
||||
text: "The API key was not accepted by {{ .Config.sitelink }}."
|
||||
|
||||
search:
|
||||
# https://hidden-palace.xyz/torrents.php?search=&cat=0&incldead=1&freeleech=0&lang=0
|
||||
paths:
|
||||
- path: torrents.php
|
||||
# https://hdinnovations.github.io/UNIT3D-Community-Edition-Docs/api_endpoints.html
|
||||
# https://github.com/HDInnovations/UNIT3D-Community-Edition/blob/master/app/Http/Controllers/API/TorrentController.php
|
||||
- path: "/api/torrents/filter"
|
||||
response:
|
||||
type: json
|
||||
|
||||
inputs:
|
||||
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
|
||||
search: "{{ .Keywords }}"
|
||||
cat: 0
|
||||
# 0 active, 1 incldead, 2 onlydead
|
||||
incldead: 1
|
||||
# 0 all, 1 notfree, 2 onlyfree
|
||||
freeleech: "{{ if .Config.freeleech }}2{{ else }}0{{ end }}"
|
||||
# 0 all, 1 English, 2 etc...
|
||||
lang: 0
|
||||
sort: "{{ .Config.sort }}"
|
||||
order: "{{ .Config.type }}"
|
||||
# does not support imdbid searching or display imdbid links.
|
||||
# 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
|
||||
args: ["(\\w+)", " +$1"] # prepend + to each word
|
||||
args: ["\\.", " "]
|
||||
|
||||
rows:
|
||||
selector: tr.t-row
|
||||
selector: data
|
||||
attribute: attributes
|
||||
count:
|
||||
selector: meta.total
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: td a[href^="torrents.php?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
categorydesc:
|
||||
selector: category
|
||||
title:
|
||||
selector: td a[href^="torrents-details.php?id="]
|
||||
selector: name
|
||||
details:
|
||||
selector: td a[href^="torrents-details.php?id="]
|
||||
attribute: href
|
||||
selector: details_link
|
||||
download:
|
||||
selector: td a[href^="torrents-details.php?id="]
|
||||
attribute: href
|
||||
selector: download_link
|
||||
poster:
|
||||
selector: td a[href^="torrents-details.php?id="]
|
||||
attribute: onMouseover
|
||||
selector: poster
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "img\\ssrc=\\\\'(http.+?)\\\\'"
|
||||
- name: replace
|
||||
args: ["themes/default/images/nocover.jpg", ""]
|
||||
date:
|
||||
selector: td a[href^="torrents-details.php?id="]
|
||||
attribute: onmouseover
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "Date\\sAdded\\s:(\\d{2}-\\d{2}-\\d{4})"
|
||||
- name: append
|
||||
args: " +00:00" # auto adjusted by site account profile
|
||||
- name: dateparse
|
||||
args: "02-01-2006 -07:00"
|
||||
size:
|
||||
selector: td:nth-child(5)
|
||||
grabs:
|
||||
selector: td:nth-child(8)
|
||||
args: ["https://via.placeholder.com/90x135", ""]
|
||||
imdbid:
|
||||
selector: imdb_id
|
||||
tmdbid:
|
||||
selector: tmdb_id
|
||||
tvdbid:
|
||||
selector: tvdb_id
|
||||
files:
|
||||
selector: num_file
|
||||
seeders:
|
||||
selector: td:nth-child(6)
|
||||
selector: seeders
|
||||
leechers:
|
||||
selector: td:nth-child(7)
|
||||
selector: leechers
|
||||
grabs:
|
||||
selector: times_completed
|
||||
date:
|
||||
# 2021-10-18T00:34:50.000000Z"
|
||||
selector: created_at
|
||||
size:
|
||||
selector: size
|
||||
downloadvolumefactor:
|
||||
text: 1
|
||||
uploadvolumefactor:
|
||||
# api returns 0%, 25%, 50%, 75%, 100%
|
||||
selector: freeleech
|
||||
case:
|
||||
"font:contains(\"Doubleupload\")": 2
|
||||
"*": 1
|
||||
0%: 1 # not free
|
||||
25%: 0.75
|
||||
50%: 0.5
|
||||
75%: 0.25
|
||||
100%: 0 # freeleech
|
||||
"*": 0 # catch errors
|
||||
uploadvolumefactor:
|
||||
# api returns 0=false, 1=true
|
||||
selector: double_upload
|
||||
case:
|
||||
0: 1 # normal
|
||||
1: 2 # double
|
||||
minimumratio:
|
||||
text: 1.0
|
||||
minimumseedtime:
|
||||
# 1 day (as seconds = 24 x 60 x 60)
|
||||
# 1 day (as seconds = 1 x 24 x 60 x 60)
|
||||
text: 86400
|
||||
# FMEDition 3 (TorrentTrader)
|
||||
# json UNIT3D 6.0.5
|
||||
|
||||
@@ -11,7 +11,7 @@ links:
|
||||
- https://ilcorsaronero.fun/
|
||||
- https://ilcorsaronero.pro/
|
||||
- https://ilcorsaronero.torrentbay.to/
|
||||
- https://ilcorsaronero.nocensor.biz/
|
||||
- https://ilcorsaronero.nocensor.sbs/
|
||||
legacylinks:
|
||||
- https://ilcorsaronero.live/
|
||||
- https://ilcorsaronero.vip/
|
||||
@@ -27,6 +27,7 @@ legacylinks:
|
||||
- https://ilcorsaronero.unblockit.pw/
|
||||
- https://ilcorsaronero.nocensor.space/
|
||||
- https://ilcorsaronero.nocensor.work/
|
||||
- https://ilcorsaronero.nocensor.biz/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
|
||||
@@ -116,6 +116,9 @@ search:
|
||||
|
||||
fields:
|
||||
category:
|
||||
text: 24
|
||||
category|noappend:
|
||||
optional: true
|
||||
selector: a[href^="browse.php?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
|
||||
@@ -11,7 +11,7 @@ links:
|
||||
- https://www.limetorrents.pro/
|
||||
- https://limetorrents.unblockit.day/
|
||||
- https://limetorrents.unblockninja.com/
|
||||
- https://limetorrents.nocensor.biz/
|
||||
- https://limetorrents.nocensor.sbs/
|
||||
legacylinks:
|
||||
- https://www.limetorrents.io/
|
||||
- https://www.limetorrents.cc/
|
||||
@@ -22,7 +22,6 @@ legacylinks:
|
||||
- https://www.limetorrents.co/
|
||||
- https://limetor.com/
|
||||
- https://www.limetor.pro/
|
||||
- https://limetorrents.unblockit.li/
|
||||
- https://limetorrents.unblockit.uno/
|
||||
- https://limetorrents.unblockit.ch/
|
||||
- https://limetorrents.nocensor.space/
|
||||
@@ -33,6 +32,7 @@ legacylinks:
|
||||
- https://limetorrents.unblockit.tv/
|
||||
- https://limetorrents.unblockit.how/
|
||||
- https://limetorrents.unblockit.cam/
|
||||
- https://limetorrents.nocensor.biz/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
|
||||
@@ -6,13 +6,14 @@ language: el-GR
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://trelas.club/
|
||||
- https://trellas.net/
|
||||
legacylinks:
|
||||
- https://magico.info/
|
||||
- https://magico.one/
|
||||
- https://magico.club/
|
||||
- https://magico.fun/
|
||||
- https://trellas.info/
|
||||
- https://trelas.club/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
|
||||
@@ -7,9 +7,10 @@ type: public
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://www.newpct.net/
|
||||
- https://newpct.nocensor.biz/
|
||||
- https://newpct.nocensor.sbs/
|
||||
legacylinks:
|
||||
- https://www.newpct.me/
|
||||
- https://newpct.nocensor.biz/
|
||||
|
||||
caps:
|
||||
categories:
|
||||
|
||||
@@ -9,7 +9,7 @@ followredirect: true
|
||||
links:
|
||||
- https://www.oxtorrent.re/
|
||||
- https://oxtorrent.unblockit.day/
|
||||
- https://oxtorrent.nocensor.biz/
|
||||
- https://oxtorrent.nocensor.sbs/
|
||||
legacylinks:
|
||||
- https://www.oxtorrent.bz/
|
||||
- https://www.oxtorrent.ws/
|
||||
@@ -19,7 +19,6 @@ legacylinks:
|
||||
- https://www.oxtorrent.co/
|
||||
- https://www.oxtorrent.io/
|
||||
- https://www.oxtorrent.cx/
|
||||
- https://oxtorrent.unblockit.ws/
|
||||
- https://www.oxtorrent.nz/
|
||||
- https://oxtorrent.nocensor.work/
|
||||
- https://oxtorrent.unblockit.kim/
|
||||
@@ -31,6 +30,7 @@ legacylinks:
|
||||
- https://oxtorrent.unblockit.how/
|
||||
- https://www.oxtorrent.be/
|
||||
- https://oxtorrent.unblockit.cam/
|
||||
- https://oxtorrent.nocensor.biz/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
|
||||
@@ -169,4 +169,4 @@ search:
|
||||
1: 2 # double
|
||||
minimumratio:
|
||||
text: 1.0
|
||||
# json UNIT3D 6.0.0
|
||||
# json UNIT3D 6.0.4
|
||||
|
||||
@@ -138,8 +138,5 @@ search:
|
||||
0: 1 # normal
|
||||
1: 2 # double
|
||||
minimumratio:
|
||||
text: 0.4
|
||||
minimumseedtime:
|
||||
# 5 days (as seconds = 5 x 24 x 60 x 60)
|
||||
text: 432000
|
||||
# json UNIT3D 6.0.1
|
||||
text: 1.0
|
||||
# json UNIT3D 6.0.5
|
||||
|
||||
@@ -66,6 +66,7 @@ login:
|
||||
|
||||
search:
|
||||
paths:
|
||||
# http://rudub.tv/browse.php?search=&incldead=1&sort=4&type=desc
|
||||
- path: browse.php
|
||||
inputs:
|
||||
search: "{{.Keywords }}"
|
||||
@@ -78,7 +79,7 @@ search:
|
||||
args: ["[s|S](\\d+)[e|E][\\d]+", "/s$1"]
|
||||
|
||||
rows:
|
||||
selector: table > tbody > tr:has(a[href^="details.php?id="])
|
||||
selector: div.card__torlist__browse_2
|
||||
|
||||
fields:
|
||||
category:
|
||||
@@ -89,7 +90,9 @@ search:
|
||||
- name: re_replace
|
||||
args: ["[\\/]+", ""]
|
||||
- name: replace
|
||||
args: [" (Золото)", ""]
|
||||
args: [" (Золото)", ""] # remove gold tag
|
||||
- name: re_replace
|
||||
args: ["[()]", " "] # remove the brackets around the English title and attributes
|
||||
- name: replace
|
||||
args: ["-Rip", "Rip"]
|
||||
- name: replace
|
||||
@@ -110,66 +113,37 @@ search:
|
||||
args: ["(\\([А-Яа-яЁё\\W]+\\))|(^[А-Яа-яЁё\\W\\d]+\\/ )|([а-яА-ЯЁё \\-]+,+)|([а-яА-ЯЁё]+)", "{{ if .Config.striprussian }}{{ else }}$1$2$3$4{{ end }}"]
|
||||
- name: append
|
||||
args: " - rus"
|
||||
- name: trim # clean up any leading and trailing spaces left over from above editing
|
||||
details:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
poster:
|
||||
selector: img[src^="/posters/"]
|
||||
attribute: src
|
||||
download:
|
||||
selector: a[href^="download.php?id="]
|
||||
attribute: href
|
||||
date:
|
||||
selector: small
|
||||
# 2022-03-28 01:28:07
|
||||
selector: li[title="Дата"]
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["Загружена: ", ""]
|
||||
- name: replace
|
||||
args: [" в ", " "]
|
||||
- name: replace
|
||||
args: ["января", "January"]
|
||||
- name: replace
|
||||
args: ["февраля", "February"]
|
||||
- name: replace
|
||||
args: ["марта", "March"]
|
||||
- name: replace
|
||||
args: ["апреля", "April"]
|
||||
- name: replace
|
||||
args: ["мая", "May"]
|
||||
- name: replace
|
||||
args: ["июня", "June"]
|
||||
- name: replace
|
||||
args: ["июля", "July"]
|
||||
- name: replace
|
||||
args: ["августа", "August"]
|
||||
- name: replace
|
||||
args: ["сентября", "September"]
|
||||
- name: replace
|
||||
args: ["октября", "October"]
|
||||
- name: replace
|
||||
args: ["ноября", "November"]
|
||||
- name: replace
|
||||
args: ["декабря", "December"]
|
||||
- name: append
|
||||
args: " +03:00" # MSK
|
||||
- name: dateparse
|
||||
args: "2 January 2006 15:04:05 -07:00"
|
||||
args: "2006-01-02 15:04:05 -07:00"
|
||||
files:
|
||||
selector: td:nth-last-child(5)
|
||||
selector: li[title="Файлов"]
|
||||
size:
|
||||
selector: td:nth-last-child(3)
|
||||
selector: li[title="Размер"]
|
||||
seeders:
|
||||
selector: td:nth-last-child(2)
|
||||
selector: li[title="Активность"]
|
||||
filters:
|
||||
- name: split
|
||||
args: ["|", 0]
|
||||
- name: regexp
|
||||
args: (\d+)\s+\d+
|
||||
leechers:
|
||||
selector: td:nth-last-child(2)
|
||||
selector: li[title="Активность"]
|
||||
filters:
|
||||
- name: split
|
||||
args: ["|", 1]
|
||||
- name: regexp
|
||||
args: \d+\s+(\d+)
|
||||
grabs:
|
||||
selector: td:nth-last-child(1)
|
||||
selector: li[title="Завершено"]
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"a[href^=\"details.php?id=\"]:contains(\"(Золото)\")": 0
|
||||
|
||||
@@ -1,170 +0,0 @@
|
||||
---
|
||||
id: sexxi
|
||||
name: Sexxi
|
||||
description: "Sexxi is a RUSSIAN Public Torrent Tracker for 3X"
|
||||
language: ru-RU
|
||||
type: public
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://sexxi.club/
|
||||
|
||||
caps:
|
||||
# don't forget to update the search fields category case block
|
||||
categorymappings:
|
||||
- {id: 1, cat: XXX, desc: "Любительское"}
|
||||
- {id: 20, cat: XXX, desc: "Орал"}
|
||||
- {id: 13, cat: XXX, desc: "Минет"}
|
||||
- {id: 2, cat: XXX, desc: "Анал"}
|
||||
- {id: 31, cat: XXX, desc: "Куннилингус"}
|
||||
- {id: 32, cat: XXX, desc: "Большие сиськи"}
|
||||
- {id: 27, cat: XXX, desc: "HD-видео"}
|
||||
- {id: 10, cat: XXX, desc: "Хардкор"}
|
||||
- {id: 35, cat: XXX, desc: "Втроем"}
|
||||
- {id: 19, cat: XXX, desc: "Мастурбация"}
|
||||
- {id: 34, cat: XXX, desc: "Русские"}
|
||||
- {id: 7, cat: XXX, desc: "Молодые"}
|
||||
- {id: 17, cat: XXX, desc: "Зрелые"}
|
||||
- {id: 5, cat: XXX, desc: "Блондинки"}
|
||||
- {id: 6, cat: XXX, desc: "Брюнетки"}
|
||||
- {id: 3, cat: XXX, desc: "Азиатки"}
|
||||
- {id: 15, cat: XXX, desc: "Лесбиянки"}
|
||||
- {id: 12, cat: XXX, desc: "Межрасовый"}
|
||||
- {id: 30, cat: XXX, desc: "Групповое"}
|
||||
- {id: 36, cat: XXX, desc: "От первого лица"}
|
||||
- {id: 22, cat: XXX, desc: "ПорноЗвезды"}
|
||||
- {id: 11, cat: XXX, desc: "Кастинг"}
|
||||
- {id: 33, cat: XXX, desc: "Ролевая игра"}
|
||||
- {id: 14, cat: XXX, desc: "Фетиш"}
|
||||
- {id: 25, cat: XXX, desc: "Униформа"}
|
||||
- {id: 18, cat: XXX, desc: "Пьяные"}
|
||||
- {id: 21, cat: XXX, desc: "Колготки"}
|
||||
- {id: 28, cat: XXX, desc: "Волосатые"}
|
||||
- {id: 23, cat: XXX, desc: "Рыжая"}
|
||||
- {id: 24, cat: XXX, desc: "Ретро"}
|
||||
- {id: 29, cat: XXX, desc: "Нудизм"}
|
||||
- {id: 4, cat: XXX, desc: "БДСМ"}
|
||||
- {id: 8, cat: XXX, desc: "Эротика"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
|
||||
settings:
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
default: date
|
||||
options:
|
||||
date: created
|
||||
title: title
|
||||
- name: type
|
||||
type: select
|
||||
label: Order requested from site
|
||||
default: desc
|
||||
options:
|
||||
desc: desc
|
||||
asc: asc
|
||||
|
||||
|
||||
download:
|
||||
selectors:
|
||||
- selector: a[href*="index.php?do=download&id="]
|
||||
attribute: href
|
||||
|
||||
search:
|
||||
headers:
|
||||
Referer: ["{{ .Config.sitelink }}"]
|
||||
paths:
|
||||
- path: index.php
|
||||
inputs:
|
||||
$raw: "{{ range .Categories }}catlist[]={{.}}&{{end}}"
|
||||
do: search
|
||||
subaction: search
|
||||
search_start: 0
|
||||
full_search: 1
|
||||
result_from: 1
|
||||
all_word_seach: 0
|
||||
showposts: 0
|
||||
# 0 in article 1 in comments 2 in static pages 3 in article titles
|
||||
titleonly: 3
|
||||
story: "{{ if .Keywords }}{{ .Keywords }}{{ else }}{{ .Today.Year }}{{ end }}"
|
||||
sortby: "{{ .Config.sort }}"
|
||||
resorder: "{{ .Config.type }}"
|
||||
|
||||
rows:
|
||||
selector: div.short-item
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: p a:last-child
|
||||
case:
|
||||
a[href$="/amateur/"]: 1
|
||||
a[href$="/pornstars/"]: 22
|
||||
a[href$="/hdvideo/"]: 27
|
||||
a[href$="/blonde/"]: 5
|
||||
a[href$="/hairy/"]: 28
|
||||
a[href$="/brunette/"]: 6
|
||||
a[href$="/russians/"]: 34
|
||||
a[href$="/asian/"]: 3
|
||||
a[href$="/redhead/"]: 23
|
||||
a[href$="/anal/"]: 2
|
||||
a[href$="/oral/"]: 20
|
||||
a[href$="/bdsm/"]: 4
|
||||
a[href$="/erotic/"]: 8
|
||||
a[href$="/hardcore/"]: 10
|
||||
a[href$="/uniforms/"]: 25
|
||||
a[href$="/masturbation/"]: 19
|
||||
a[href$="/big_boobs/"]: 32
|
||||
a[href$="/role-playing-game/"]: 33
|
||||
a[href$="/interracial/"]: 12
|
||||
a[href$="/lesbians/"]: 15
|
||||
a[href$="/young/"]: 7
|
||||
a[href$="/threesome/"]: 35
|
||||
a[href$="/kasting/"]: 11
|
||||
a[href$="/blowjob/"]: 13
|
||||
a[href$="/retro/"]: 24
|
||||
a[href$="/fetish/"]: 14
|
||||
a[href$="/mature/"]: 17
|
||||
a[href$="/drunk/"]: 18
|
||||
a[href$="/nudism/"]: 29
|
||||
a[href$="/pantyhose/"]: 21
|
||||
a[href$="/group/"]: 30
|
||||
a[href$="/cunnilingus/"]: 31
|
||||
a[href$="/first_person/"]: 36
|
||||
"*": 27
|
||||
title:
|
||||
selector: a.short-title
|
||||
details:
|
||||
selector: a.short-title
|
||||
attribute: href
|
||||
download:
|
||||
selector: a.short-title
|
||||
attribute: href
|
||||
poster:
|
||||
selector: img
|
||||
attribute: src
|
||||
size:
|
||||
text: "512 MB"
|
||||
seeders:
|
||||
text: 1
|
||||
leechers:
|
||||
text: 1
|
||||
cat_tags:
|
||||
selector: p.argcat
|
||||
description:
|
||||
selector: ul.short-list
|
||||
filters:
|
||||
- name: append
|
||||
args: "</br>{{ .Result.cat_tags }}"
|
||||
date:
|
||||
selector: div.short-meta-item:has(span.fa-calendar-alt)
|
||||
filters:
|
||||
# 28.10.2021
|
||||
- name: append
|
||||
args: " +03:00" # MSK
|
||||
- name: dateparse
|
||||
args: "02.01.2006 -07:00"
|
||||
downloadvolumefactor:
|
||||
text: 0
|
||||
uploadvolumefactor:
|
||||
text: 1
|
||||
# DataLife
|
||||
@@ -179,4 +179,4 @@ search:
|
||||
minimumseedtime:
|
||||
# 7 day (as seconds = 7 x 24 x 60 x 60)
|
||||
text: 604800
|
||||
# json UNIT3D 6.0.0
|
||||
# json UNIT3D 6.0.4
|
||||
|
||||
@@ -85,8 +85,8 @@ search:
|
||||
selector: meta.total
|
||||
|
||||
fields:
|
||||
categorydesc:
|
||||
selector: category
|
||||
category:
|
||||
selector: category_id
|
||||
title:
|
||||
selector: name
|
||||
details:
|
||||
@@ -136,4 +136,4 @@ search:
|
||||
minimumseedtime:
|
||||
# 7 days (as seconds = 7 x 24 x 60 x 60)
|
||||
text: 604800
|
||||
# json UNIT3D 6.0.0
|
||||
# json UNIT3D 6.0.6
|
||||
|
||||
@@ -140,4 +140,4 @@ search:
|
||||
minimumseedtime:
|
||||
# 7 days (as seconds = 2 x 24 x 60 x 60)
|
||||
text: 172800
|
||||
# json UNIT3D 6.0.4
|
||||
# json UNIT3D 6.0.5
|
||||
|
||||
@@ -41,7 +41,7 @@ download:
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: "{{ if .Keywords }}?do=search&subaction=search&search_start=0&full_search=1&result_from=1&story={{ .Keywords }}&titleonly=3catlist[]=0&searchdate=0&resorder=desc{{ else }}lastnews/{{ end }}"
|
||||
- path: "{{ if .Keywords }}?do=search&subaction=search&search_start=0&full_search=1&result_from=1&story={{ .Keywords }}&titleonly=3&catlist[]=0&searchdate=0&resorder=desc{{ else }}lastnews/{{ end }}"
|
||||
|
||||
rows:
|
||||
selector: tr.fr_viewn_in:has(td.frs:contains("B"))
|
||||
|
||||
@@ -9,6 +9,7 @@ links:
|
||||
- https://tasmanit.es/
|
||||
certificates:
|
||||
- 23C30AC9655A8A7351A549538062B8C6B0D01A78 # expired 24 Jan 2022
|
||||
- 4325e8f1f13f6074f2bed6a6186fe183791ab32d # expired 1 March 2022
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
|
||||
@@ -151,4 +151,4 @@ search:
|
||||
minimumseedtime:
|
||||
# 7 day (as seconds = 7 x 24 x 60 x 60)
|
||||
text: 604800
|
||||
# json UNIT3D 6.0.0
|
||||
# json UNIT3D 6.0.2
|
||||
|
||||
@@ -1,196 +0,0 @@
|
||||
---
|
||||
id: the-devils-lounge
|
||||
name: The-Devils-Lounge
|
||||
description: "The-Devils-Lounge is a Private torrent site for MOVIES / TV / GENERAL"
|
||||
language: en-US
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
testlinktorrent: false
|
||||
certificates:
|
||||
- be7852fc8f50130cb50984ef001dbe9c8788f377 # this is the Plesk self signed CA
|
||||
links:
|
||||
- https://the-devils-lounge.xyz/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 39, cat: Audio/Audiobook, desc: "Abook: Abook"}
|
||||
- {id: 1, cat: PC/0day, desc: "Application: 0-Day"}
|
||||
- {id: 2, cat: PC, desc: "Application: Pc"}
|
||||
- {id: 3, cat: PC/Mac, desc: "Application: Mac"}
|
||||
- {id: 38, cat: Books/EBook, desc: "Ebooks: Ebook"}
|
||||
- {id: 32, cat: TV/Anime, desc: "Episodes: Anime"}
|
||||
- {id: 33, cat: TV, desc: "Episodes: Classic"}
|
||||
- {id: 34, cat: TV/Foreign, desc: "Episodes: Foreign"}
|
||||
- {id: 35, cat: TV/HD, desc: "Episodes: TvHD"}
|
||||
- {id: 36, cat: TV/SD, desc: "Episodes: TvSD"}
|
||||
- {id: 37, cat: TV/Sport, desc: "Episodes: TVsports"}
|
||||
- {id: 22, cat: PC/Games, desc: "Games: Pc"}
|
||||
- {id: 23, cat: Console/PS4, desc: "Games: Ps4"}
|
||||
- {id: 24, cat: Console/PS3, desc: "Games: Ps3"}
|
||||
- {id: 25, cat: Console/PSP, desc: "Games: Ps1"}
|
||||
- {id: 26, cat: Console/PSP, desc: "Games: Ps2"}
|
||||
- {id: 27, cat: Console/PSP, desc: "Games: PsP"}
|
||||
- {id: 28, cat: Console/XBox, desc: "Games: xbox"}
|
||||
- {id: 29, cat: Console/Wii, desc: "Games: Wii"}
|
||||
- {id: 30, cat: Console/NDS, desc: "Games: Nintendo"}
|
||||
- {id: 31, cat: Console/Other, desc: "Games: Dreamcast"}
|
||||
- {id: 4, cat: Movies/HD, desc: "Movies: 1080P"}
|
||||
- {id: 5, cat: TV/Anime, desc: "Movies: Anime"}
|
||||
- {id: 6, cat: Movies/DVD, desc: "Movies: DvdR"}
|
||||
- {id: 7, cat: Movies/SD, desc: "Movies: Camer"}
|
||||
- {id: 8, cat: Movies/3D, desc: "Movies: 3D"}
|
||||
- {id: 9, cat: Movies/WEB-DL, desc: "Movies: WEBRip"}
|
||||
- {id: 10, cat: XXX, desc: "Movies: XxX"}
|
||||
- {id: 11, cat: Movies/UHD, desc: "Movies: Real-4K"}
|
||||
- {id: 12, cat: Movies, desc: "Movies: Classic"}
|
||||
- {id: 13, cat: Movies/Foreign, desc: "Movies: Foreign"}
|
||||
- {id: 14, cat: Movies, desc: "Movies: Remux"}
|
||||
- {id: 15, cat: Movies/HD, desc: "Movies: HD"}
|
||||
- {id: 16, cat: Movies/SD, desc: "Movies: SD"}
|
||||
- {id: 17, cat: Movies, desc: "Movies: Packs"}
|
||||
- {id: 18, cat: Movies, desc: "Movies: Animation"}
|
||||
- {id: 19, cat: Audio, desc: "Music: Audio"}
|
||||
- {id: 20, cat: Audio, desc: "Music: Packs"}
|
||||
- {id: 21, cat: Audio/Video, desc: "Music: Video"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
music-search: [q]
|
||||
book-search: [q]
|
||||
|
||||
settings:
|
||||
- name: username
|
||||
type: text
|
||||
label: Username
|
||||
- name: password
|
||||
type: password
|
||||
label: Password
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
default: id
|
||||
options:
|
||||
id: 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: account-login.php
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
returnto: /
|
||||
error:
|
||||
- selector: div.myFrame:contains("Access Denied")
|
||||
test:
|
||||
path: /
|
||||
selector: a[href="account-logout.php"]
|
||||
|
||||
download:
|
||||
before:
|
||||
path: thanks.php
|
||||
method: post
|
||||
inputs:
|
||||
torrent: "{{ .DownloadUri.Query.id }}"
|
||||
selectors:
|
||||
- selector: a[href^="download.php?id="]
|
||||
attribute: href
|
||||
|
||||
search:
|
||||
# https://the-devils-lounge.xyz/torrents.php?search=&cat=0&incldead=0&freeleech=0&inclexternal=0&lang=0
|
||||
paths:
|
||||
- path: torrents.php
|
||||
inputs:
|
||||
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
|
||||
search: "{{ .Keywords }}"
|
||||
cat: 0
|
||||
# 0 active, 1 incldead, 2 onlydead
|
||||
incldead: 1
|
||||
# 0 all, 1 notfree, 2 onlyfree
|
||||
freeleech: "{{ if .Config.freeleech }}2{{ else }}0{{ end }}"
|
||||
# 0 both, 1 local, 2 external
|
||||
inclexternal: 0
|
||||
# 0 all, 1 English, 2 etc...
|
||||
lang: 0
|
||||
sort: "{{ .Config.sort }}"
|
||||
order: "{{ .Config.type }}"
|
||||
# does not support imdbid searching or display imdbid links.
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
args: ["(\\w+)", " +$1"] # prepend + to each word
|
||||
|
||||
rows:
|
||||
selector: tr.t-row
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: td a[href^="torrents.php?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
title:
|
||||
selector: td a[href^="torrents-details.php?id="]
|
||||
details:
|
||||
selector: td a[href^="torrents-details.php?id="]
|
||||
attribute: href
|
||||
download:
|
||||
selector: td a[href^="torrents-details.php?id="]
|
||||
attribute: href
|
||||
poster:
|
||||
selector: td a[href^="torrents-details.php?id="]
|
||||
attribute: onmouseover
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "img\\ssrc=\\\\'(http.+?)\\\\'"
|
||||
date:
|
||||
selector: td a[href^="torrents-details.php?id="]
|
||||
attribute: onmouseover
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "Date\\sAdded\\s:(\\d{2}-\\d{2}-\\d{4})"
|
||||
- name: dateparse
|
||||
args: "02-01-2006"
|
||||
size:
|
||||
selector: td:nth-child(6)
|
||||
seeders:
|
||||
selector: td:nth-child(7) font:first-of-type
|
||||
filters:
|
||||
- name: replace
|
||||
args: [",", ""]
|
||||
leechers:
|
||||
selector: td:nth-child(7) font:last-of-type
|
||||
filters:
|
||||
- name: replace
|
||||
args: [",", ""]
|
||||
description:
|
||||
selector: td:last-of-type img
|
||||
attribute: title
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img[src$="/images/free.gif"]: 0
|
||||
td:last-of-type img[title="Extern"]: 0 # all external torrents are free
|
||||
"*": 1
|
||||
uploadvolumefactor:
|
||||
text: 1
|
||||
minimumratio:
|
||||
text: 1.0
|
||||
minimumseedtime:
|
||||
# 1 day (as seconds = 24 x 60 x 60)
|
||||
text: 86400
|
||||
# FMEDition 3 (TorrentTrader)
|
||||
@@ -7,7 +7,7 @@ type: public
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://www.tokyotosho.info/
|
||||
- https://tokyotosho.nocensor.biz/
|
||||
- https://tokyotosho.nocensor.sbs/
|
||||
legacylinks:
|
||||
- https://tokyotosho.black-mirror.xyz/
|
||||
- https://tokyotosho.unblocked.casa/
|
||||
@@ -21,6 +21,7 @@ legacylinks:
|
||||
- https://tokyotosho.unblocked.monster/
|
||||
- https://tokyotosho.nocensor.space/
|
||||
- https://tokyotosho.nocensor.work/
|
||||
- https://tokyotosho.nocensor.biz/
|
||||
|
||||
settings:
|
||||
- name: cat
|
||||
|
||||
@@ -11,10 +11,9 @@ links:
|
||||
- https://www.torlock2.com/
|
||||
- https://www.torlock.icu/
|
||||
- https://torlock.unblockit.day/
|
||||
- https://torlock.nocensor.biz/
|
||||
- https://torlock.nocensor.sbs/
|
||||
legacylinks:
|
||||
- https://torlock.com/
|
||||
- https://torlock.unblockit.lat/
|
||||
- https://torlock.unblockit.app/
|
||||
- https://torlock.unblockit.dev/
|
||||
- https://torlock.unblockit.ltd/
|
||||
@@ -33,6 +32,7 @@ legacylinks:
|
||||
- https://torlock.unblockit.tv/
|
||||
- https://torlock.unblockit.how/
|
||||
- https://torlock.unblockit.cam/
|
||||
- https://torlock.nocensor.biz/
|
||||
|
||||
caps:
|
||||
# dont forget to update the search fields category case block
|
||||
|
||||
@@ -5,8 +5,12 @@ description: "Torlook is a Russian Public torrent meta-search engine combining r
|
||||
language: en-US
|
||||
type: public
|
||||
encoding: UTF-8
|
||||
certificates:
|
||||
- 273066e4b30229dfb0bb99474269f58b6fa8971a # expired 5 April 2022
|
||||
links:
|
||||
- https://gw1.torlook.info/
|
||||
- https://torlook.nocensor.sbs/
|
||||
legacylinks:
|
||||
- https://torlook.nocensor.biz/
|
||||
|
||||
caps:
|
||||
|
||||
@@ -1,118 +0,0 @@
|
||||
---
|
||||
id: toros
|
||||
name: TOROS
|
||||
description: "TOROS is a Public torrent index"
|
||||
language: en-US
|
||||
type: public
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://www.toros.co/
|
||||
- https://toros.nocensor.biz/
|
||||
legacylinks:
|
||||
- https://toros.nocensor.space/
|
||||
- https://toros.nocensor.work/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: Movies, desc: Movies}
|
||||
- {id: 2, cat: Audio, desc: Music}
|
||||
- {id: 3, cat: TV, desc: Television}
|
||||
- {id: 4, cat: PC/Games, desc: Games}
|
||||
- {id: 5, cat: PC, desc: Software}
|
||||
- {id: 6, cat: TV/Anime, desc: Anime}
|
||||
- {id: 7, cat: XXX, desc: Adult}
|
||||
- {id: 8, cat: Books, desc: Ebooks}
|
||||
- {id: 9, cat: TV/Anime, desc: Animation}
|
||||
- {id: 10, cat: Other, desc: Other}
|
||||
- {id: 0, cat: Other, desc: TBC}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
music-search: [q]
|
||||
book-search: [q]
|
||||
|
||||
settings:
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
default: added
|
||||
options:
|
||||
added: created
|
||||
seeds: seeders
|
||||
size: size
|
||||
name: title
|
||||
- name: type
|
||||
type: select
|
||||
label: Order requested from site
|
||||
default: desc
|
||||
options:
|
||||
desc: desc
|
||||
asc: asc
|
||||
|
||||
download:
|
||||
selectors:
|
||||
- selector: a[href^="magnet:?xt="]
|
||||
attribute: href
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://www.toros.co/all/torrents/capital-hill.html?v=&smi=&sma=&i=100&sort=added&o=desc
|
||||
- path: "{{ if .Keywords }}all/torrents/{{ .Keywords }}.html?v=&smi=&sma=&i=100&sort={{ .Config.sort }}&o={{ .Config.type }}{{ else }}top100.html{{ end }}"
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
args: ["[\\s]+", "-"]
|
||||
- name: tolower
|
||||
|
||||
rows:
|
||||
selector: table.table-responsive tr:has(a[href^="/torrent/"])
|
||||
filters:
|
||||
- name: andmatch
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: td:nth-child(1)
|
||||
attribute: class
|
||||
filters:
|
||||
- name: regexp
|
||||
args: (\d+)
|
||||
title:
|
||||
selector: a[href^="/torrent/"]
|
||||
details:
|
||||
selector: a[href^="/torrent/"]
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href^="/torrent/"]
|
||||
attribute: href
|
||||
date_day:
|
||||
selector: td:nth-child(2):contains("day")
|
||||
optional: true
|
||||
filters:
|
||||
- name: fuzzytime
|
||||
date_ago:
|
||||
selector: td:nth-child(2):contains("ago")
|
||||
optional: true
|
||||
filters:
|
||||
- name: timeago
|
||||
date_year:
|
||||
selector: td:nth-child(2):not(:contains("ago")):not(:contains("day"))
|
||||
optional: true
|
||||
filters:
|
||||
- name: append
|
||||
args: " +01:00" # CET
|
||||
- name: dateparse
|
||||
args: "2 Jan -07:00"
|
||||
date:
|
||||
text: "{{ if or .Result.date_year .Result.date_ago .Result.date_day }}{{ or .Result.date_year .Result.date_ago .Result.date_day }}{{ else }}now{{ end }}"
|
||||
size:
|
||||
selector: td:nth-child(3)
|
||||
seeders:
|
||||
selector: td:nth-child(4)
|
||||
leechers:
|
||||
selector: td:nth-child(5)
|
||||
downloadvolumefactor:
|
||||
text: 0
|
||||
uploadvolumefactor:
|
||||
text: 1
|
||||
# engine n/a
|
||||
@@ -8,41 +8,12 @@ encoding: UTF-8
|
||||
followredirect: true
|
||||
links:
|
||||
- https://www.torrent9.nl/
|
||||
- https://torrent9.nocensor.biz/
|
||||
- https://torrent9.nocensor.sbs/
|
||||
legacylinks:
|
||||
- https://www.torrents9.pw/
|
||||
- https://www.torrent9.ch/
|
||||
- https://www1.torrent9.ch/
|
||||
- https://www2.torrent9.ch/
|
||||
- https://wwv.torrent9.vg/
|
||||
- https://www.torrent9.vc/
|
||||
- https://wvw.torrent9.vc/
|
||||
- https://www.torrent9.lol/
|
||||
- https://wvw.torrent9.lol/
|
||||
- https://wwv.torrent9.lol/
|
||||
- https://ww1.torrent9.lol/
|
||||
- https://ww5.torrent9.lol/
|
||||
- https://ww6.torrent9.lol/
|
||||
- https://www.torrent9.tw/
|
||||
- https://ww7.torrent9.lol/
|
||||
- https://www.torrent9.dev/
|
||||
- https://www.torrent9.sx/
|
||||
- https://ww1.torrent9.sx/
|
||||
- https://www.t9.re/
|
||||
- https://www.t9.vc/
|
||||
- https://www.torrent9.ai/
|
||||
- https://torrent9.black-mirror.xyz/
|
||||
- https://torrent9.unblocked.casa/
|
||||
- https://torrent9.proxyportal.fun/
|
||||
- https://torrent9.uk-unblock.xyz/
|
||||
- https://torrent9.ind-unblock.xyz/
|
||||
- https://www.torrent9.pl/
|
||||
- https://www.torrent9.ac/
|
||||
- https://torrent9.unblocked.bar/
|
||||
- https://torrent9.proxyportal.pw/
|
||||
- https://torrent9.uk-unblock.pro/
|
||||
- https://torrent9.unblockninja.com/ # this is a proxy for torrent9
|
||||
- https://torrent9.unblocked.rest/
|
||||
- https://www.torrent9.so/
|
||||
- https://wvw.torrent9.sh/
|
||||
- https://www.torrent9.sh/
|
||||
@@ -58,6 +29,7 @@ legacylinks:
|
||||
- https://torrent9.nocensor.work/
|
||||
- https://www.torrent9.pw/
|
||||
- https://www.torrent9.si/
|
||||
- https://torrent9.nocensor.biz/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
|
||||
@@ -9,9 +9,8 @@ followredirect: true
|
||||
links:
|
||||
- https://www.torrentdownload.info/
|
||||
- https://torrentdownload.unblockit.day/
|
||||
- https://torrentdownload.nocensor.biz/
|
||||
- https://torrentdownload.nocensor.sbs/
|
||||
legacylinks:
|
||||
- https://torrentdownload.unblockit.app/
|
||||
- https://torrentdownload.unblocked.rest/
|
||||
- https://torrentdownload.unblockit.dev/
|
||||
- https://torrentdownload.unblockit.ltd/
|
||||
@@ -31,6 +30,7 @@ legacylinks:
|
||||
- https://torrentdownload.unblockit.tv/
|
||||
- https://torrentdownload.unblockit.how/
|
||||
- https://torrentdownload.unblockit.cam/
|
||||
- https://torrentdownload.nocensor.biz/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
|
||||
@@ -10,9 +10,8 @@ links:
|
||||
- https://www.torrentdownloads.info/
|
||||
- https://www.torrentdownloads.pro/
|
||||
- https://torrentdownloads.unblockit.day/
|
||||
- https://torrentdownloads.nocensor.biz/
|
||||
- https://torrentdownloads.nocensor.sbs/
|
||||
legacylinks:
|
||||
- https://torrentdownloads.unblocked.rest/
|
||||
- https://torrentdownloads.unblockit.dev/
|
||||
- https://torrentdownloads.unblockit.ltd/
|
||||
- https://torrentdownloads.unblockit.link/
|
||||
@@ -32,6 +31,7 @@ legacylinks:
|
||||
- https://torrentdownloads.unblockit.tv/
|
||||
- https://torrentdownloads.unblockit.how/
|
||||
- https://torrentdownloads.unblockit.cam/
|
||||
- https://torrentdownloads.nocensor.biz/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
|
||||
@@ -10,9 +10,8 @@ links:
|
||||
- https://www.torrentfunk.com/
|
||||
- https://www.torrentfunk2.com/
|
||||
- https://torrentfunk.unblockit.day/
|
||||
- https://torrentfunk.nocensor.biz/
|
||||
- https://torrentfunk.nocensor.sbs/
|
||||
legacylinks:
|
||||
- https://torrentfunk.unblockit.top/
|
||||
- https://torrentfunk.unblockit.lat/
|
||||
- https://torrentfunk.unblockit.app/
|
||||
- https://torrentfunk.unblockit.dev/
|
||||
@@ -32,6 +31,7 @@ legacylinks:
|
||||
- https://torrentfunk.unblockit.tv/
|
||||
- https://torrentfunk.unblockit.how/
|
||||
- https://torrentfunk.unblockit.cam/
|
||||
- https://torrentfunk.nocensor.biz/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
|
||||
@@ -12,11 +12,10 @@ links:
|
||||
- https://torrentgalaxy.su/
|
||||
- https://torrentgalaxy.unblockninja.com/
|
||||
- https://torrentgalaxy.unblockit.day/
|
||||
- https://torrentgalaxy.nocensor.biz/
|
||||
- https://torrentgalaxy.nocensor.sbs/
|
||||
legacylinks:
|
||||
- https://torrentgalaxy.org/ # redirects to *.to
|
||||
- https://torrentgalaxy.pw/ # proxy list only
|
||||
- https://torrentgalaxy.unblockit.dev/
|
||||
- https://torrentgalaxy.unblockit.ltd/
|
||||
- https://torrentgalaxy.unblockit.link/
|
||||
- https://torrentgalaxy.unblockit.buzz/
|
||||
@@ -34,6 +33,7 @@ legacylinks:
|
||||
- https://torrentgalaxy.unblockit.tv/
|
||||
- https://torrentgalaxy.unblockit.how/
|
||||
- https://torrentgalaxy.unblockit.cam/
|
||||
- https://torrentgalaxy.nocensor.biz/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
@@ -75,8 +75,8 @@ caps:
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
tv-search: [q, season, ep, imdbid]
|
||||
movie-search: [q, imdbid]
|
||||
music-search: [q]
|
||||
book-search: [q]
|
||||
|
||||
@@ -119,7 +119,7 @@ search:
|
||||
path: torrents.php
|
||||
inputs:
|
||||
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
|
||||
search: "{{ .Keywords }}"
|
||||
search: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{ else }}{{ .Keywords }}{{ end }}"
|
||||
lang: 0
|
||||
sort: "{{ .Config.sort }}"
|
||||
order: "{{ .Config.type }}"
|
||||
@@ -157,6 +157,12 @@ search:
|
||||
magnet:
|
||||
selector: div a[href^="magnet:?"]
|
||||
attribute: href
|
||||
imdbid:
|
||||
selector: a[href^="/torrents.php?search=tt"]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: regexp
|
||||
args: tt(\d+)
|
||||
size:
|
||||
selector: div span[style^="border-radius"]
|
||||
seeders:
|
||||
|
||||
@@ -13,6 +13,7 @@ caps:
|
||||
- {id: 92, cat: Books/EBook, desc: "e-Book (ENG)"}
|
||||
- {id: 78, cat: Books/EBook, desc: "e-Book (HUN)"}
|
||||
- {id: 80, cat: Other, desc: "Egyéb"}
|
||||
- {id: 111, cat: Movies/SD, desc: "Film - Cam (HUN)"}
|
||||
- {id: 85, cat: Movies/DVD, desc: "Film - DVD/9 (ENG)"}
|
||||
- {id: 66, cat: Movies/DVD, desc: "Film - DVD/9 (HUN)"}
|
||||
- {id: 84, cat: Movies/HD, desc: "Film - HD (ENG)"}
|
||||
@@ -32,8 +33,8 @@ caps:
|
||||
- {id: 97, cat: TV/HD, desc: "Sorozat - HD (HUN)"}
|
||||
- {id: 86, cat: TV/SD, desc: "Sorozat - XviD (ENG)"}
|
||||
- {id: 90, cat: TV/SD, desc: "Sorozat - XviD (HUN)"}
|
||||
- {id: 98, cat: XXX/x264, desc: "XXX - HD"}
|
||||
- {id: 99, cat: XXX/DVD, desc: "XXX - DVD"}
|
||||
- {id: 98, cat: XXX/x264, desc: "XXX - HD"}
|
||||
- {id: 76, cat: XXX/ImageSet, desc: "XXX - Képek"}
|
||||
- {id: 69, cat: XXX/XviD, desc: "XXX - XviD"}
|
||||
- {id: 70, cat: Audio, desc: "Zene - HUN"}
|
||||
@@ -90,6 +91,11 @@ login:
|
||||
path: index.php
|
||||
selector: a[href^="logout.php"]
|
||||
|
||||
download:
|
||||
selectors:
|
||||
- selector: a[href^="download.php?id="]
|
||||
attribute: href
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: letoltes.php
|
||||
@@ -118,7 +124,7 @@ search:
|
||||
selector: a[href^="torrent_adatok.php?id="]
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href^="download.php?id="]
|
||||
selector: a[href^="torrent_adatok.php?id="]
|
||||
attribute: href
|
||||
description:
|
||||
selector: td:nth-child(3) font[color="gray"]
|
||||
@@ -149,6 +155,7 @@ search:
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"img[src=\"pic/orokos.gif\"]": 0
|
||||
"img[src=\"images/ellenorzes/ingyenes.gif\"]": 0
|
||||
"*": 1
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
|
||||
@@ -7,10 +7,8 @@ type: public
|
||||
encoding: UTF-8
|
||||
followredirect: true
|
||||
links:
|
||||
- https://torrentqq135.com/
|
||||
- https://torrentqq137.com/
|
||||
legacylinks:
|
||||
- https://torrentqq119.com/
|
||||
- https://torrentqq120.com/
|
||||
- https://torrentqq121.com/
|
||||
- https://torrentqq122.com/
|
||||
- https://torrentqq123.com/
|
||||
@@ -24,6 +22,8 @@ legacylinks:
|
||||
- https://torrentqq132.com/
|
||||
- https://torrentqq133.com/
|
||||
- https://torrentqq134.com/
|
||||
- https://torrentqq135.com/
|
||||
- https://torrentqq136.com/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
|
||||
@@ -7,9 +7,8 @@ type: public
|
||||
encoding: UTF-8
|
||||
followredirect: true
|
||||
links:
|
||||
- https://torrentsir51.com/
|
||||
- https://torrentsir53.com/
|
||||
legacylinks:
|
||||
- https://torrentsir36.com/
|
||||
- https://torrentsir37.com/
|
||||
- https://torrentsir38.com/
|
||||
- https://torrentsir39.com/
|
||||
@@ -24,6 +23,9 @@ legacylinks:
|
||||
- https://torrentsir48.com/
|
||||
- https://torrentsir49.com/
|
||||
- https://torrentsir50.com/
|
||||
- https://torrentsir51.com/
|
||||
- https://torrentsir52.com/
|
||||
- http://torrentsir52.com/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
|
||||
@@ -7,7 +7,7 @@ type: public
|
||||
encoding: UTF-8
|
||||
followredirect: true
|
||||
links:
|
||||
- https://torrentview53.com/
|
||||
- https://torrentview57.com/
|
||||
legacylinks:
|
||||
- https://torrentview.net/
|
||||
- https://torrentview.co/
|
||||
@@ -25,6 +25,7 @@ legacylinks:
|
||||
- https://torrentview49.com/
|
||||
- https://torrentview50.com/
|
||||
- https://torrentview52.com/
|
||||
- https://torrentview53.com/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
|
||||
@@ -7,9 +7,8 @@ type: public
|
||||
encoding: UTF-8
|
||||
followredirect: true
|
||||
links:
|
||||
- https://torrentwiz40.com/
|
||||
- https://torrentwiz41.com/
|
||||
legacylinks:
|
||||
- https://torrentwiz24.me/
|
||||
- https://torrentwiz25.me/
|
||||
- https://torrentwiz26.me/
|
||||
- https://torrentwiz27.me/
|
||||
@@ -25,6 +24,7 @@ legacylinks:
|
||||
- https://torrentwiz37.com/
|
||||
- https://torrentwiz38.com/
|
||||
- https://torrentwiz39.com/
|
||||
- https://torrentwiz40.com/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
|
||||
@@ -27,7 +27,7 @@ caps:
|
||||
- {id: 6300, cat: TV/Anime, desc: "Animations - Hentai"}
|
||||
- {id: 6900, cat: TV/Anime, desc: "Animations - Other"}
|
||||
- {id: 6120, cat: TV/Anime, desc: "Animations - Shoujo Ai"}
|
||||
- {id: 6330, cat: TV/Anime, desc: "Animations - Shounen Ai"}
|
||||
- {id: 6130, cat: TV/Anime, desc: "Animations - Shounen Ai"}
|
||||
- {id: 6320, cat: TV/Anime, desc: "Animations - Yaoi"}
|
||||
- {id: 6310, cat: TV/Anime, desc: "Animations - Yuri"}
|
||||
- {id: 14000, cat: PC, desc: "Applications - All"}
|
||||
|
||||
192
src/Jackett.Common/Definitions/xthor-api.yml
Normal file
192
src/Jackett.Common/Definitions/xthor-api.yml
Normal file
@@ -0,0 +1,192 @@
|
||||
---
|
||||
id: xthor-api
|
||||
name: Xthor (API)
|
||||
description: "General French Private Tracker"
|
||||
language: fr-FR
|
||||
type: private
|
||||
encoding: windows-1252
|
||||
requestDelay: 2.5
|
||||
links:
|
||||
- https://xthor.tk/
|
||||
legacylinks:
|
||||
- https://xthor.bz/
|
||||
- https://xthor.to/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
# Movies / Films
|
||||
- {id: 118, cat: Movies/BluRay, desc: "Films/2160p/Bluray"}
|
||||
- {id: 119, cat: Movies/UHD, desc: "Films/2160p/Remux"}
|
||||
- {id: 107, cat: Movies/UHD, desc: "Films/2160p/x265"}
|
||||
- {id: 1, cat: Movies/BluRay, desc: "Films/1080p/BluRay"}
|
||||
- {id: 2, cat: Movies/HD, desc: "Films/1080p/Remux"}
|
||||
- {id: 100, cat: Movies/HD, desc: "Films/1080p/x265"}
|
||||
- {id: 4, cat: Movies/HD, desc: "Films/1080p/x264"}
|
||||
- {id: 5, cat: Movies/HD, desc: "Films/720p/x264"}
|
||||
- {id: 7, cat: Movies/SD, desc: "Films/SD/x264"}
|
||||
- {id: 3, cat: Movies/3D, desc: "Films/3D"}
|
||||
- {id: 6, cat: Movies/SD, desc: "Films/XviD"}
|
||||
- {id: 8, cat: Movies/DVD, desc: "Films/DVD"}
|
||||
- {id: 122, cat: Movies/HD, desc: "Films/HDTV"}
|
||||
- {id: 94, cat: Movies/WEB-DL, desc: "Films/WEBDL"}
|
||||
- {id: 95, cat: Movies/WEB-DL, desc: "Films/WEBRiP"}
|
||||
- {id: 12, cat: TV/Documentary, desc: "Films/Documentaire"}
|
||||
- {id: 31, cat: Movies/Other, desc: "Films/Animation"}
|
||||
- {id: 33, cat: Movies/Other, desc: "Films/Spectacle"}
|
||||
- {id: 125, cat: TV/Sport, desc: "Films/Sports"}
|
||||
- {id: 20, cat: Audio/Video, desc: "Films/Concerts, Clips"}
|
||||
- {id: 9, cat: Movies/Other, desc: "Films/VOSTFR"}
|
||||
|
||||
# TV Series / Series TV
|
||||
- {id: 104, cat: TV/Other, desc: "Series/BluRay"}
|
||||
- {id: 13, cat: TV, desc: "Series/Pack VF"}
|
||||
- {id: 15, cat: TV/HD, desc: "Series/HD VF"}
|
||||
- {id: 14, cat: TV/SD, desc: "Series/SD VF"}
|
||||
- {id: 98, cat: TV/Other, desc: "Series/Pack VOSTFR"}
|
||||
- {id: 17, cat: TV/HD, desc: "Series/HD VOSTFR"}
|
||||
- {id: 16, cat: TV/SD, desc: "Series/SD VOSTFR"}
|
||||
- {id: 101, cat: TV/Anime, desc: "Series/Packs Anime"}
|
||||
- {id: 32, cat: TV/Anime, desc: "Series/Animes"}
|
||||
- {id: 110, cat: TV/Anime, desc: "Series/Anime VOSTFR"}
|
||||
- {id: 123, cat: TV/Other, desc: "Series/Animation"}
|
||||
- {id: 109, cat: TV/Documentary, desc: "Series/DOC"}
|
||||
- {id: 34, cat: TV/Sport, desc: "Series/Sport"}
|
||||
- {id: 30, cat: TV/Other, desc: "Series/Emission TV"}
|
||||
|
||||
# Porn / XxX
|
||||
- {id: 36, cat: XXX, desc: "MISC/XxX/Films"}
|
||||
- {id: 105, cat: XXX, desc: "MISC/XxX/Séries"}
|
||||
- {id: 114, cat: XXX, desc: "MISC/XxX/Lesbiennes"}
|
||||
- {id: 115, cat: XXX, desc: "MISC/XxX/Gays"}
|
||||
- {id: 113, cat: XXX, desc: "MISC/XxX/Hentai"}
|
||||
- {id: 120, cat: XXX, desc: "MISC/XxX/Magazines"}
|
||||
|
||||
# Books / Livres
|
||||
- {id: 24, cat: Books/EBook, desc: "Livres/Romans"}
|
||||
- {id: 124, cat: Audio/Audiobook, desc: "Livres/Audio Books"}
|
||||
- {id: 96, cat: Books/Mags, desc: "Livres/Magazines"}
|
||||
- {id: 99, cat: Books/Other, desc: "Livres/Bandes dessinées"}
|
||||
- {id: 116, cat: Books/EBook, desc: "Livres/Romans Jeunesse"}
|
||||
- {id: 102, cat: Books/Comics, desc: "Livres/Comics"}
|
||||
- {id: 103, cat: Books/Other, desc: "Livres/Mangas"}
|
||||
|
||||
# Softwares / Logiciels
|
||||
- {id: 25, cat: PC/Games, desc: "Logiciels/Jeux PC"}
|
||||
- {id: 27, cat: Console/PS3, desc: "Logiciels/Playstation"}
|
||||
- {id: 111, cat: PC/Mac, desc: "Logiciels/Jeux MAC"}
|
||||
- {id: 26, cat: Console/XBox 360, desc: "Logiciels/XboX"}
|
||||
- {id: 112, cat: PC, desc: "Logiciels/Jeux Linux"}
|
||||
- {id: 28, cat: Console/Wii, desc: "Logiciels/Nintendo"}
|
||||
- {id: 29, cat: Console/NDS, desc: "Logiciels/NDS"}
|
||||
- {id: 117, cat: PC, desc: "Logiciels/ROM"}
|
||||
- {id: 21, cat: PC, desc: "Logiciels/Applis PC"}
|
||||
- {id: 22, cat: PC/Mac, desc: "Logiciels/Applis Mac"}
|
||||
- {id: 23, cat: PC/Mobile-Android, desc: "Logiciels/Smartphone"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
movie-search: [q, tmdbid]
|
||||
tv-search: [q, season, ep]
|
||||
book-search: [q]
|
||||
|
||||
settings:
|
||||
- name: passkey
|
||||
type: text
|
||||
label: Passkey
|
||||
- name: info_key
|
||||
type: info
|
||||
label: About your Passkey
|
||||
default: "Find your Passkey on <a href=\"https://xthor.tk/api_doc.php\" target =_blank>Xthor > API page</a>."
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: multilanguage
|
||||
type: text
|
||||
label: Replace MULTI by
|
||||
default: MULTI
|
||||
- name: subfrench
|
||||
type: text
|
||||
label: Replace "VOSTFR/SUBFRENCH" by
|
||||
default: ""
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://api.xthor.tk/?passkey=<redacted>&search=&category=&freeleech=&tmdbid=&size=&accent=&price=&page=
|
||||
- path: "https://api.xthor.tk/"
|
||||
inputs:
|
||||
passkey: "{{ .Config.passkey }}"
|
||||
category: "{{ if .Categories }}{{ range .Categories }}{{.}}+{{end}}{{ else }}{{ end }}"
|
||||
search: "{{ if .Query.TMDBID }}{{ else }}{{ .Keywords }}{{ end }}"
|
||||
tmdbid: "{{ .Query.TMDBID }}"
|
||||
freeleech: "{{ if .Config.freeleech }}1{{ else }}{{ end }}"
|
||||
response:
|
||||
type: json
|
||||
|
||||
rows:
|
||||
selector: torrents
|
||||
# jackett yml json does not currently support andmatch #13083
|
||||
# filters:
|
||||
# - name: andmatch
|
||||
|
||||
fields:
|
||||
id:
|
||||
selector: id
|
||||
category:
|
||||
selector: category
|
||||
title_original:
|
||||
selector: name
|
||||
title_multi:
|
||||
text: "{{ .Result.title_original }}"
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["(?i)[\\.\\s\\[\\-]multi[\\.\\s\\]\\-]", ".{{ .Config.multilanguage }}."]
|
||||
title_multi_out:
|
||||
text: "{{ if .Config.multilanguage }}{{ .Result.title_multi }}{{ else }}{{ .Result.title_original }}{{ end }}"
|
||||
title_vostfr:
|
||||
text: "{{ .Result.title_multi_out }}"
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["(?i)[\\.\\s\\[\\-]vostfr[\\.\\s\\]\\-]", ".{{ .Config.subfrench }}."]
|
||||
- name: re_replace
|
||||
args: ["(?i)[\\.\\s\\[\\-]subfrench[\\.\\s\\]\\-]", ".{{ .Config.subfrench }}."]
|
||||
title:
|
||||
text: "{{ if .Config.subfrench }}{{ .Result.title_vostfr }}{{ else }}{{ .Result.title_multi_out }}{{ end }}"
|
||||
details:
|
||||
text: "{{ .Config.sitelink }}details.php?id={{ .Result.id }}"
|
||||
download:
|
||||
selector: download_link
|
||||
poster:
|
||||
selector: descr
|
||||
filters:
|
||||
- name: regexp
|
||||
args: ["({{ .Config.sitelink }}info_images\\/allocine\\/covers\\/film\\/small_\\d+?\\.jpg)"]
|
||||
tmdbid:
|
||||
selector: tmdb_id
|
||||
files:
|
||||
selector: numfiles
|
||||
date:
|
||||
selector: added
|
||||
size:
|
||||
selector: size
|
||||
seeders:
|
||||
selector: seeders
|
||||
leechers:
|
||||
selector: leechers
|
||||
grabs:
|
||||
selector: times_completed
|
||||
downloadvolumefactor:
|
||||
# api returns 0=false, 1=true
|
||||
selector: freeleech
|
||||
case:
|
||||
0: 1 # not free
|
||||
1: 0 # freeleech
|
||||
uploadvolumefactor:
|
||||
text: 1
|
||||
minimumseedtime:
|
||||
# 24 hours (as seconds = 1 x 24 x 60 x 60)
|
||||
text: 86400
|
||||
minimumratio:
|
||||
# minimum ratio per torrent is 0.8
|
||||
text: 0.8
|
||||
# json api
|
||||
@@ -8,11 +8,12 @@ encoding: UTF-8
|
||||
links:
|
||||
- https://yourbittorrent.com/
|
||||
- https://yourbittorrent2.com/
|
||||
- https://yourbittorrent.nocensor.biz/
|
||||
- https://yourbittorrent.nocensor.sbs/
|
||||
legacylinks:
|
||||
- https://yourbittorrent.host/
|
||||
- https://yourbittorrent.nocensor.space/
|
||||
- https://yourbittorrent.nocensor.work/
|
||||
- https://yourbittorrent.nocensor.biz/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
|
||||
@@ -11,12 +11,11 @@ links:
|
||||
- https://yts.mx/
|
||||
- https://yts.unblockit.day/
|
||||
- https://yts.unblockninja.com/
|
||||
- https://yts.nocensor.biz/
|
||||
- https://yts.nocensor.sbs/
|
||||
legacylinks:
|
||||
- https://yts.ag/
|
||||
- https://yts.am/
|
||||
- https://yts.lt/
|
||||
- https://yts.root.yt/
|
||||
- https://yts.unblockit.ltd/
|
||||
- https://yts.unblockit.buzz/
|
||||
- https://yts.unblockit.club/
|
||||
@@ -33,6 +32,7 @@ legacylinks:
|
||||
- https://yts.unblockit.tv/
|
||||
- https://yts.unblockit.how/
|
||||
- https://yts.unblockit.cam/
|
||||
- https://yts.nocensor.biz/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
|
||||
@@ -120,7 +120,8 @@ search:
|
||||
inputs:
|
||||
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
|
||||
search: "{{ .Keywords }}"
|
||||
incldead: 1
|
||||
# blank = incldead
|
||||
incldead: ""
|
||||
sort: "{{ .Config.sort }}"
|
||||
type: "{{ .Config.type }}"
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ language: fr-FR
|
||||
type: public
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://www.zetorrents.bz/
|
||||
- https://www.zetorrents.nl/
|
||||
legacylinks:
|
||||
- https://www.zetorrents.co/
|
||||
- https://www.zetorrents.io/
|
||||
@@ -18,6 +18,7 @@ legacylinks:
|
||||
- https://wvw.zetorrents.org/
|
||||
- https://www.zetorrents.cc/
|
||||
- https://www.zetorrents.tv/
|
||||
- https://www.zetorrents.bz/
|
||||
|
||||
caps:
|
||||
categories:
|
||||
|
||||
@@ -10,9 +10,8 @@ links:
|
||||
- https://zooqle.com/
|
||||
- https://zooqle.unblockninja.com/
|
||||
- https://zooqle.unblockit.day/
|
||||
- https://zooqle.nocensor.biz/
|
||||
- https://zooqle.nocensor.sbs/
|
||||
legacylinks:
|
||||
- https://zooqle.unblockit.app/
|
||||
- https://zooqle.unblocked.rest/
|
||||
- https://zooqle.unblockit.dev/
|
||||
- https://zooqle.unblockit.ltd/
|
||||
@@ -32,6 +31,7 @@ legacylinks:
|
||||
- https://zooqle.unblockit.tv/
|
||||
- https://zooqle.unblockit.how/
|
||||
- https://zooqle.unblockit.cam/
|
||||
- https://zooqle.nocensor.biz/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
@@ -83,6 +83,10 @@ search:
|
||||
title:
|
||||
selector: td:nth-child(2) a
|
||||
category:
|
||||
text: other
|
||||
category|noappend:
|
||||
# cat may be missing
|
||||
optional: true
|
||||
selector: td:nth-child(2) > i
|
||||
attribute: class
|
||||
filters:
|
||||
|
||||
@@ -252,7 +252,7 @@ namespace Jackett.Common.Indexers
|
||||
var completed = torrent.QuerySelector("td:nth-of-type(3)").TextContent; // Completed
|
||||
var seeders = torrent.QuerySelector("td.text-green").TextContent; // Seeders
|
||||
var leechers = torrent.QuerySelector("td.text-red").TextContent; // Leechers
|
||||
var size = torrent.QuerySelector("td:nth-of-type(5)").TextContent; // Size
|
||||
var size = torrent.QuerySelector("td:nth-of-type(6)").TextContent; // Size
|
||||
|
||||
var release = new ReleaseInfo
|
||||
{
|
||||
|
||||
@@ -33,6 +33,7 @@ namespace Jackett.Common.Indexers
|
||||
"https://cinecalidad.unbl0ck.xyz/",
|
||||
"https://cinecalidad.u4m.club/",
|
||||
"https://cinecalidad.mrunblock.icu/",
|
||||
"https://www.cinecalidad.lat/",
|
||||
"https://www.cine-calidad.com/"
|
||||
};
|
||||
|
||||
@@ -41,7 +42,7 @@ namespace Jackett.Common.Indexers
|
||||
: base(id: "cinecalidad",
|
||||
name: "Cinecalidad",
|
||||
description: "Películas Full HD en Latino Dual.",
|
||||
link: "https://www.cinecalidad.lat/",
|
||||
link: "https://cinecalidad3.com/",
|
||||
caps: new TorznabCapabilities
|
||||
{
|
||||
MovieSearchParams = new List<MovieSearchParam> { MovieSearchParam.Q }
|
||||
|
||||
@@ -39,7 +39,7 @@ namespace Jackett.Common.Indexers
|
||||
private const string SearchUrl = "buscar/";
|
||||
|
||||
public override string[] AlternativeSiteLinks { get; protected set; } = {
|
||||
"https://dontorrent.re/",
|
||||
"https://dontorrent.cat/",
|
||||
"https://todotorrents.net/",
|
||||
"https://tomadivx.net/",
|
||||
"https://seriesblanco.one/",
|
||||
@@ -55,6 +55,9 @@ namespace Jackett.Common.Indexers
|
||||
"https://dontorrent.li/",
|
||||
"https://dontorrent.top/",
|
||||
"https://dontorrent.pm/",
|
||||
"https://dontorrent.re/",
|
||||
"https://dontorrent.wf/",
|
||||
"https://dontorrent.run/",
|
||||
"https://dontorrent.eu/"
|
||||
};
|
||||
|
||||
@@ -73,7 +76,7 @@ namespace Jackett.Common.Indexers
|
||||
: base(id: "dontorrent",
|
||||
name: "DonTorrent",
|
||||
description: "DonTorrent is a SPANISH public tracker for MOVIES / TV / GENERAL",
|
||||
link: "https://dontorrent.re/",
|
||||
link: "https://dontorrent.cat/",
|
||||
caps: new TorznabCapabilities
|
||||
{
|
||||
TvSearchParams = new List<TvSearchParam>
|
||||
|
||||
@@ -21,12 +21,13 @@ namespace Jackett.Common.Indexers
|
||||
public override string[] AlternativeSiteLinks { get; protected set; } = {
|
||||
"https://www.erai-raws.info/",
|
||||
"https://beta.erai-raws.info/",
|
||||
"https://erairaws.nocensor.biz/"
|
||||
"https://erairaws.nocensor.sbs/"
|
||||
};
|
||||
|
||||
public override string[] LegacySiteLinks { get; protected set; } = {
|
||||
"https://erairaws.nocensor.space/",
|
||||
"https://erairaws.nocensor.work/"
|
||||
"https://erairaws.nocensor.work/",
|
||||
"https://erairaws.nocensor.biz/"
|
||||
};
|
||||
|
||||
public EraiRaws(IIndexerConfigurationService configService, Utils.Clients.WebClient wc, Logger l,
|
||||
|
||||
@@ -39,14 +39,14 @@ namespace Jackett.Common.Indexers
|
||||
cs: cs
|
||||
)
|
||||
{
|
||||
AddCategoryMapping(1, TorznabCatType.XXXx264);
|
||||
AddCategoryMapping(2, TorznabCatType.XXXPack);
|
||||
AddCategoryMapping(3, TorznabCatType.XXXPack);
|
||||
AddCategoryMapping(4, TorznabCatType.XXXPack);
|
||||
AddCategoryMapping(5, TorznabCatType.XXXDVD);
|
||||
AddCategoryMapping(6, TorznabCatType.XXXx264);
|
||||
AddCategoryMapping(7, TorznabCatType.XXXImageSet);
|
||||
AddCategoryMapping(8, TorznabCatType.XXXImageSet);
|
||||
AddCategoryMapping(1, TorznabCatType.XXXx264, "Video Clip");
|
||||
AddCategoryMapping(2, TorznabCatType.XXXPack, "Video Pack");
|
||||
AddCategoryMapping(3, TorznabCatType.XXXPack, "Siterip Pack");
|
||||
AddCategoryMapping(4, TorznabCatType.XXXPack, "Pornstar Pack");
|
||||
AddCategoryMapping(5, TorznabCatType.XXXDVD, "DVD");
|
||||
AddCategoryMapping(6, TorznabCatType.XXXx264, "BluRay");
|
||||
AddCategoryMapping(7, TorznabCatType.XXXImageSet, "Photo Pack");
|
||||
AddCategoryMapping(8, TorznabCatType.XXXImageSet, "Books & Magazines");
|
||||
}
|
||||
|
||||
protected override List<KeyValuePair<string, string>> GetSearchQueryParameters(TorznabQuery query)
|
||||
|
||||
@@ -184,9 +184,10 @@ namespace Jackett.Common.Indexers
|
||||
var qLink = row.QuerySelector("td:nth-of-type(3) a");
|
||||
release.Link = new Uri(SiteLink + qLink.GetAttribute("href"));
|
||||
|
||||
// <td align=center> 2022-04-05 19:04:38 <br><font size=1>(2 hours ago)</font></td>
|
||||
var added = row.QuerySelector("td:nth-of-type(7)").TextContent.Trim();
|
||||
var date = added.Substring(0, 10);
|
||||
var time = added.Substring(11, 8); //date layout wasn't quite right
|
||||
var time = added.Substring(12, 8);
|
||||
var dateTime = date + time;
|
||||
release.PublishDate = DateTime.ParseExact(dateTime, "yyyy-MM-ddHH:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal).ToLocalTime();
|
||||
|
||||
|
||||
@@ -132,7 +132,7 @@ namespace Jackett.Common.Indexers
|
||||
Language = "ru-RU";
|
||||
Type = "semi-private";
|
||||
|
||||
webclient.AddTrustedCertificate(new Uri(SiteLink).Host, "25234600906DF82792DE9F4AA75A5AED2F226577"); // for *.run expired 07/Jun/21
|
||||
webclient.AddTrustedCertificate(new Uri(SiteLink).Host, "98D43B6E740B42C02A9BD1A9D1A813E4350BE332"); // for *.win expired 26/Mar/22
|
||||
webclient.AddTrustedCertificate(new Uri(SiteLink).Host, "34287FB53A58EC6AE590E7DD7E03C70C0263CADC"); // for *.tw expired 01/Apr/21
|
||||
|
||||
// TODO: review if there is only this category (movie search is enabled)
|
||||
|
||||
@@ -37,8 +37,8 @@ namespace Jackett.Common.Indexers
|
||||
|
||||
public override string[] AlternativeSiteLinks { get; protected set; } = {
|
||||
"https://www.mejortorrentes.org/",
|
||||
"https://mejortorrent.nocensor.biz/",
|
||||
"https://mejortorrent.unblockit.day/"
|
||||
"https://mejortorrent.unblockit.day/",
|
||||
"https://mejortorrent.nocensor.sbs/"
|
||||
};
|
||||
|
||||
public override string[] LegacySiteLinks { get; protected set; } = {
|
||||
@@ -62,7 +62,8 @@ namespace Jackett.Common.Indexers
|
||||
"https://www.mejortorrentes.net/",
|
||||
"https://mejortorrent.unblockit.how/",
|
||||
"https://mejortorrent.unblockit.tv/",
|
||||
"https://mejortorrent.unblockit.cam/"
|
||||
"https://mejortorrent.unblockit.cam/",
|
||||
"https://mejortorrent.nocensor.biz/"
|
||||
};
|
||||
|
||||
public MejorTorrent(IIndexerConfigurationService configService, WebClient w, Logger l, IProtectionService ps,
|
||||
|
||||
@@ -22,7 +22,7 @@ using static Jackett.Common.Models.IndexerConfig.ConfigurationData;
|
||||
|
||||
namespace Jackett.Common.Indexers
|
||||
{
|
||||
// This tracker uses a hybrid Luminance (based on GazelleTracker)
|
||||
// This tracker uses a hybrid Luminance (based on GazelleTracker)
|
||||
[ExcludeFromCodeCoverage]
|
||||
public class MoreThanTV : BaseWebIndexer
|
||||
{
|
||||
@@ -31,7 +31,8 @@ namespace Jackett.Common.Indexers
|
||||
};
|
||||
|
||||
private string LoginUrl => SiteLink + "login";
|
||||
private string BrowseUrl => SiteLink + "torrents.php";
|
||||
private string BrowseUrl => SiteLink + "torrents/browse";
|
||||
private string DownloadUrl => SiteLink + "torrents.php";
|
||||
private string DetailsUrl => SiteLink + "details.php";
|
||||
|
||||
private string _sort;
|
||||
@@ -230,7 +231,7 @@ namespace Jackett.Common.Indexers
|
||||
|
||||
if (query.Categories.Contains(TorznabCatType.TV.ID))
|
||||
{
|
||||
qc.Add("filter_cat[3]", "1"); // HD EPISODE
|
||||
qc.Add("filter_cat[3]", "1"); // HD Episode
|
||||
qc.Add("filter_cat[4]", "1"); // SD Episode
|
||||
qc.Add("filter_cat[5]", "1"); // HD Season
|
||||
qc.Add("filter_cat[6]", "1"); // SD Season
|
||||
@@ -262,23 +263,20 @@ namespace Jackett.Common.Indexers
|
||||
foreach (var torrent in torrents)
|
||||
{
|
||||
// Parse required data
|
||||
var torrentGroup = torrent.QuerySelectorAll("table a[href^=\"/torrents.php?action=download\"]");
|
||||
foreach (var downloadAnchor in torrentGroup)
|
||||
{
|
||||
var title = downloadAnchor.ParentElement.ParentElement.ParentElement.TextContent.Trim();
|
||||
title = CleanUpTitle(title);
|
||||
var downloadAnchor = torrent.QuerySelector("span a[href^=\"/torrents.php?action=download\"]");
|
||||
var title = downloadAnchor.ParentElement.ParentElement.ParentElement.QuerySelector("a[class=\"overlay_torrent\"]").TextContent.Trim();
|
||||
title = CleanUpTitle(title);
|
||||
|
||||
var category = torrent.QuerySelector(".cats_col div").GetAttribute("title");
|
||||
// default to Other
|
||||
var categoryId = TorznabCatType.Other.ID;
|
||||
var category = torrent.QuerySelector(".cats_col div").GetAttribute("title");
|
||||
// default to Other
|
||||
var categoryId = TorznabCatType.Other.ID;
|
||||
|
||||
if (movies.Any(category.Contains))
|
||||
categoryId = TorznabCatType.Movies.ID;
|
||||
else if (tv.Any(category.Contains))
|
||||
categoryId = TorznabCatType.TV.ID;
|
||||
if (movies.Any(category.Contains))
|
||||
categoryId = TorznabCatType.Movies.ID;
|
||||
else if (tv.Any(category.Contains))
|
||||
categoryId = TorznabCatType.TV.ID;
|
||||
|
||||
releases.Add(GetReleaseInfo(torrent, downloadAnchor, title, categoryId));
|
||||
}
|
||||
releases.Add(GetReleaseInfo(torrent, downloadAnchor, title, categoryId));
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
@@ -299,7 +297,7 @@ namespace Jackett.Common.Indexers
|
||||
{
|
||||
|
||||
// count from bottom
|
||||
const int FILES_COL = 8;
|
||||
const int FILES_COL = 7;
|
||||
/*const int COMMENTS_COL = 7;*/
|
||||
const int DATE_COL = 6;
|
||||
const int FILESIZE_COL = 5;
|
||||
@@ -337,7 +335,7 @@ namespace Jackett.Common.Indexers
|
||||
var seeders = int.Parse(seeds, NumberStyles.AllowThousands, CultureInfo.InvariantCulture);
|
||||
var leechers = int.Parse(leechs, NumberStyles.AllowThousands, CultureInfo.InvariantCulture);
|
||||
var detailsUri = new Uri(DetailsUrl + "?torrentid=" + torrentId);
|
||||
var downloadLink = new Uri(BrowseUrl + "?action=download&id=" + torrentId);
|
||||
var downloadLink = new Uri(DownloadUrl + "?action=download&id=" + torrentId);
|
||||
|
||||
return new ReleaseInfo
|
||||
{
|
||||
|
||||
@@ -22,12 +22,13 @@ namespace Jackett.Common.Indexers
|
||||
{
|
||||
public override string[] AlternativeSiteLinks { get; protected set; } = {
|
||||
"https://subsplease.org/",
|
||||
"https://subsplease.nocensor.biz/"
|
||||
"https://subsplease.nocensor.sbs/"
|
||||
};
|
||||
|
||||
public override string[] LegacySiteLinks { get; protected set; } = {
|
||||
"https://subsplease.nocensor.space/",
|
||||
"https://subsplease.nocensor.work/"
|
||||
"https://subsplease.nocensor.work/",
|
||||
"https://subsplease.nocensor.biz/"
|
||||
};
|
||||
|
||||
private string ApiEndpoint => SiteLink + "/api/?";
|
||||
|
||||
@@ -1,659 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.Specialized;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using System.Linq;
|
||||
using System.Net;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Threading.Tasks;
|
||||
using Jackett.Common.Models;
|
||||
using Jackett.Common.Models.IndexerConfig;
|
||||
using Jackett.Common.Services.Interfaces;
|
||||
using Jackett.Common.Utils;
|
||||
using Jackett.Common.Utils.Clients;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using NLog;
|
||||
using static Jackett.Common.Models.IndexerConfig.ConfigurationData;
|
||||
using WebRequest = Jackett.Common.Utils.Clients.WebRequest;
|
||||
|
||||
namespace Jackett.Common.Indexers
|
||||
{
|
||||
[ExcludeFromCodeCoverage]
|
||||
public class Xthor : BaseCachingWebIndexer
|
||||
{
|
||||
private static string ApiEndpoint => "https://api.xthor.tk/";
|
||||
private int MaxPagesHardLimit => 4;
|
||||
private string TorrentDetailsUrl => SiteLink + "details.php?id={id}";
|
||||
private string WebRequestDelay => ((SingleSelectConfigurationItem)configData.GetDynamic("webRequestDelay")).Value;
|
||||
private int MaxPages => Convert.ToInt32(((SingleSelectConfigurationItem)configData.GetDynamic("maxPages")).Value);
|
||||
private bool MaxPagesBypassForTMDB => ((BoolConfigurationItem)configData.GetDynamic("maxPagesBypassForTMDB")).Value;
|
||||
private int DropCategories => Convert.ToInt32(((SingleSelectConfigurationItem)configData.GetDynamic("dropCategories")).Value);
|
||||
private string MultiReplacement => ((StringConfigurationItem)configData.GetDynamic("multiReplacement")).Value;
|
||||
private bool SubReplacement => ((BoolConfigurationItem)configData.GetDynamic("subReplacement")).Value;
|
||||
private bool EnhancedAnimeSearch => ((BoolConfigurationItem)configData.GetDynamic("enhancedAnimeSearch")).Value;
|
||||
private string SpecificLanguageAccent => ((SingleSelectConfigurationItem)configData.GetDynamic("specificLanguageAccent")).Value;
|
||||
private bool FreeleechOnly => ((BoolConfigurationItem)configData.GetDynamic("freeleechOnly")).Value;
|
||||
|
||||
public override string[] LegacySiteLinks { get; protected set; } = {
|
||||
"https://xthor.bz/",
|
||||
"https://xthor.to"
|
||||
};
|
||||
private ConfigurationDataPasskey ConfigData => (ConfigurationDataPasskey)configData;
|
||||
|
||||
public Xthor(IIndexerConfigurationService configService, Utils.Clients.WebClient w, Logger l,
|
||||
IProtectionService ps, ICacheService cs)
|
||||
: base(id: "xthor-api",
|
||||
name: "Xthor API",
|
||||
description: "General French Private Tracker",
|
||||
link: "https://xthor.tk/",
|
||||
caps: new TorznabCapabilities
|
||||
{
|
||||
TvSearchParams = new List<TvSearchParam>
|
||||
{
|
||||
TvSearchParam.Q, TvSearchParam.Season, TvSearchParam.Ep
|
||||
},
|
||||
MovieSearchParams = new List<MovieSearchParam>
|
||||
{
|
||||
MovieSearchParam.Q, MovieSearchParam.TmdbId
|
||||
},
|
||||
MusicSearchParams = new List<MusicSearchParam>
|
||||
{
|
||||
MusicSearchParam.Q
|
||||
},
|
||||
BookSearchParams = new List<BookSearchParam>
|
||||
{
|
||||
BookSearchParam.Q
|
||||
}
|
||||
},
|
||||
configService: configService,
|
||||
client: w,
|
||||
logger: l,
|
||||
p: ps,
|
||||
cacheService: cs,
|
||||
downloadBase: "https://xthor.tk/download.php?torrent=",
|
||||
configData: new ConfigurationDataPasskey()
|
||||
)
|
||||
{
|
||||
Encoding = Encoding.UTF8;
|
||||
Language = "fr-FR";
|
||||
Type = "private";
|
||||
|
||||
// Movies / Films
|
||||
AddCategoryMapping(118, TorznabCatType.MoviesBluRay, "Films 2160p/Bluray");
|
||||
AddCategoryMapping(119, TorznabCatType.MoviesBluRay, "Films 2160p/Remux");
|
||||
AddCategoryMapping(107, TorznabCatType.MoviesUHD, "Films 2160p/x265");
|
||||
AddCategoryMapping(1, TorznabCatType.MoviesBluRay, "Films 1080p/BluRay");
|
||||
AddCategoryMapping(2, TorznabCatType.MoviesBluRay, "Films 1080p/Remux");
|
||||
AddCategoryMapping(100, TorznabCatType.MoviesHD, "Films 1080p/x265");
|
||||
AddCategoryMapping(4, TorznabCatType.MoviesHD, "Films 1080p/x264");
|
||||
AddCategoryMapping(5, TorznabCatType.MoviesHD, "Films 720p/x264");
|
||||
AddCategoryMapping(7, TorznabCatType.MoviesSD, "Films SD/x264");
|
||||
AddCategoryMapping(3, TorznabCatType.Movies3D, "Films 3D");
|
||||
AddCategoryMapping(6, TorznabCatType.MoviesSD, "Films XviD");
|
||||
AddCategoryMapping(8, TorznabCatType.MoviesDVD, "Films DVD");
|
||||
AddCategoryMapping(122, TorznabCatType.MoviesHD, "Films HDTV");
|
||||
AddCategoryMapping(94, TorznabCatType.MoviesWEBDL, "Films WEBDL");
|
||||
AddCategoryMapping(95, TorznabCatType.MoviesWEBDL, "Films WEBRiP");
|
||||
AddCategoryMapping(12, TorznabCatType.TVDocumentary, "Films Documentaire");
|
||||
AddCategoryMapping(31, TorznabCatType.MoviesOther, "Films Animation");
|
||||
AddCategoryMapping(33, TorznabCatType.MoviesOther, "Films Spectacle");
|
||||
AddCategoryMapping(125, TorznabCatType.TVSport, "Films Sports");
|
||||
AddCategoryMapping(20, TorznabCatType.AudioVideo, "Films Concerts, Clips");
|
||||
AddCategoryMapping(9, TorznabCatType.MoviesOther, "Films VOSTFR");
|
||||
|
||||
// TV / Series
|
||||
AddCategoryMapping(104, TorznabCatType.TVOther, "Series BluRay");
|
||||
AddCategoryMapping(13, TorznabCatType.TVOther, "Series Pack VF");
|
||||
AddCategoryMapping(15, TorznabCatType.TVHD, "Series HD VF");
|
||||
AddCategoryMapping(14, TorznabCatType.TVSD, "Series SD VF");
|
||||
AddCategoryMapping(98, TorznabCatType.TVOther, "Series Pack VOSTFR");
|
||||
AddCategoryMapping(17, TorznabCatType.TVHD, "Series HD VOSTFR");
|
||||
AddCategoryMapping(16, TorznabCatType.TVSD, "Series SD VOSTFR");
|
||||
AddCategoryMapping(101, TorznabCatType.TVAnime, "Series Packs Anime");
|
||||
AddCategoryMapping(32, TorznabCatType.TVAnime, "Series Animes");
|
||||
AddCategoryMapping(110, TorznabCatType.TVAnime, "Series Anime VOSTFR");
|
||||
AddCategoryMapping(123, TorznabCatType.TVOther, "Series Animation");
|
||||
AddCategoryMapping(109, TorznabCatType.TVDocumentary, "Series DOC");
|
||||
AddCategoryMapping(34, TorznabCatType.TVOther, "Series Sport");
|
||||
AddCategoryMapping(30, TorznabCatType.TVOther, "Series Emission TV");
|
||||
|
||||
// XxX / MISC
|
||||
AddCategoryMapping(36, TorznabCatType.XXX, "MISC XxX/Films");
|
||||
AddCategoryMapping(105, TorznabCatType.XXX, "MISC XxX/Séries");
|
||||
AddCategoryMapping(114, TorznabCatType.XXX, "MISC XxX/Lesbiennes");
|
||||
AddCategoryMapping(115, TorznabCatType.XXX, "MISC XxX/Gays");
|
||||
AddCategoryMapping(113, TorznabCatType.XXX, "MISC XxX/Hentai");
|
||||
AddCategoryMapping(120, TorznabCatType.XXX, "MISC XxX/Magazines");
|
||||
|
||||
// Books / Livres
|
||||
AddCategoryMapping(24, TorznabCatType.BooksEBook, "Livres Romans");
|
||||
AddCategoryMapping(124, TorznabCatType.AudioAudiobook, "Livres Audio Books");
|
||||
AddCategoryMapping(96, TorznabCatType.BooksMags, "Livres Magazines");
|
||||
AddCategoryMapping(99, TorznabCatType.BooksOther, "Livres Bandes dessinées");
|
||||
AddCategoryMapping(116, TorznabCatType.BooksEBook, "Livres Romans Jeunesse");
|
||||
AddCategoryMapping(102, TorznabCatType.BooksComics, "Livres Comics");
|
||||
AddCategoryMapping(103, TorznabCatType.BooksOther, "Livres Mangas");
|
||||
|
||||
// SOFTWARE / Logiciels
|
||||
AddCategoryMapping(25, TorznabCatType.PCGames, "Logiciels Jeux PC");
|
||||
AddCategoryMapping(27, TorznabCatType.ConsolePS3, "Logiciels Playstation");
|
||||
AddCategoryMapping(111, TorznabCatType.PCMac, "Logiciels Jeux MAC");
|
||||
AddCategoryMapping(26, TorznabCatType.ConsoleXBox360, "Logiciels XboX");
|
||||
AddCategoryMapping(112, TorznabCatType.PC, "Logiciels Jeux Linux");
|
||||
AddCategoryMapping(28, TorznabCatType.ConsoleWii, "Logiciels Nintendo");
|
||||
AddCategoryMapping(29, TorznabCatType.ConsoleNDS, "Logiciels NDS");
|
||||
AddCategoryMapping(117, TorznabCatType.PC, "Logiciels ROM");
|
||||
AddCategoryMapping(21, TorznabCatType.PC, "Logiciels Applis PC");
|
||||
AddCategoryMapping(22, TorznabCatType.PCMac, "Logiciels Applis Mac");
|
||||
AddCategoryMapping(23, TorznabCatType.PCMobileAndroid, "Logiciels Smartphone");
|
||||
|
||||
// Dynamic Configuration
|
||||
ConfigData.AddDynamic("optionsConfigurationWarning", new DisplayInfoConfigurationItem(string.Empty, "<center><b>Available Options</b></center>,<br /><br /> <ul><li><b>Freeleech Only</b>: (<i>Restrictive</i>) If you want to discover only freeleech torrents to not impact your ratio, check the related box. So only torrents marked as freeleech will be returned instead of all.</li><br /><li><b>Specific Language</b>: (<i>Restrictive</i>) You can scope your searches with a specific language / accent.</li></ul>"));
|
||||
|
||||
var ConfigFreeleechOnly = new BoolConfigurationItem("Do you want to discover only freeleech tagged torrents ?");
|
||||
ConfigData.AddDynamic("freeleechOnly", ConfigFreeleechOnly);
|
||||
|
||||
var ConfigSpecificLanguageAccent = new SingleSelectConfigurationItem("Do you want to scope your searches with a specific language ? (Accent)", new Dictionary<string, string>
|
||||
{
|
||||
{"0", "All Voices (default)"},
|
||||
{"1", "Françaises"},
|
||||
{"2", "Quebecoises"},
|
||||
{"47", "Françaises et Québécoises"},
|
||||
{"3", "Anglaises"},
|
||||
{"4", "Japonaises"},
|
||||
{"5", "Espagnoles"},
|
||||
{"6", "Allemandes"},
|
||||
{"7", "Chinoises"},
|
||||
{"8", "Italiennes"},
|
||||
{"9", "Coréennes"},
|
||||
{"10", "Danoises"},
|
||||
{"11", "Russes"},
|
||||
{"12", "Portugaises"},
|
||||
{"13", "Hindi"},
|
||||
{"14", "Hollandaises"},
|
||||
{"15", "Suédoises"},
|
||||
{"16", "Norvégiennes"},
|
||||
{"17", "Thaïlandaises"},
|
||||
{"18", "Hébreu"},
|
||||
{"19", "Persanes"},
|
||||
{"20", "Arabes"},
|
||||
{"21", "Turques"},
|
||||
{"22", "Hongroises"},
|
||||
{"23", "Polonaises"},
|
||||
{"24", "Finnoises"},
|
||||
{"25", "Indonésiennes"},
|
||||
{"26", "Roumaines"},
|
||||
{"27", "Malaisiennes"},
|
||||
{"28", "Estoniennes"},
|
||||
{"29", "Islandaises"},
|
||||
{"30", "Grecques"},
|
||||
{"31", "Serbes"},
|
||||
{"32", "Norvégiennes"},
|
||||
{"33", "Ukrainiennes"},
|
||||
{"34", "Bulgares"},
|
||||
{"35", "Tagalogues"},
|
||||
{"36", "Xhosa"},
|
||||
{"37", "Kurdes"},
|
||||
{"38", "Bengali"},
|
||||
{"39", "Amhariques"},
|
||||
{"40", "Bosniaques"},
|
||||
{"41", "Malayalam"},
|
||||
{"42", "Télougou"},
|
||||
{"43", "Bambara"},
|
||||
{"44", "Catalanes"},
|
||||
{"45", "Tchèques"},
|
||||
{"46", "Afrikaans"}
|
||||
})
|
||||
{ Value = "0" };
|
||||
ConfigData.AddDynamic("specificLanguageAccent", ConfigSpecificLanguageAccent);
|
||||
|
||||
ConfigData.AddDynamic("advancedConfigurationWarning", new DisplayInfoConfigurationItem(string.Empty, "<center><b>Advanced Configuration</b></center>,<br /><br /> <center><b><u>WARNING !</u></b> <i>Be sure to read instructions before editing options bellow, you can <b>drastically reduce performance</b> of queries or have <b>non-accurate results</b>.</i></center><br/><br/><ul><li><b>Delay betwwen Requests</b>: (<i>not recommended</i>) you can increase delay to requests made to the tracker, but a minimum of 2.1s is enforced as there is an anti-spam protection.</li><br /><li><b>Max Pages</b>: (<i>not recommended</i>) you can increase max pages to follow when making a request. But be aware that others apps can consider this indexer not working if jackett take too many times to return results. Another thing is that API is very buggy on tracker side, most of time, results of next pages are same ... as the first page. Even if we deduplicate rows, you will loose performance for the same results. You can check logs to see if an higher pages following is not benefical, you will see an error percentage (duplicates) with recommandations.</li><br /><li><b>Bypass for TMDB</b>: (<i>recommended</i>) this indexer is compatible with TMDB queries (<i>for movies only</i>), so when requesting content with an TMDB ID, we will search directly ID on API instead of name. Results will be more accurate, so you can enable a max pages bypass for this query type. You will be at least limited by the hard limit of 4 pages.</li><br /><li><b>Drop categories</b>: (<i>recommended</i>) this indexer has some problems when too many categories are requested for filtering, so you will have better results by dropping categories from TMDB queries or selecting fewer categories in 3rd apps.</li><br /><li><b>Enhanced Anime</b>: if you have \"Anime\", this will improve queries made to this tracker related to this type when making searches.</li><br /><li><b>Multi Replacement</b>: you can dynamically replace the word \"MULTI\" with another of your choice like \"MULTI.FRENCH\" for better analysis of 3rd party softwares.</li><br /><li><b>Sub Replacement</b>: you can dynamically replace the word \"VOSTFR\" or \"SUBFRENCH\" with the word \"ENGLISH\" for better analysis of 3rd party softwares.</li></ul>"));
|
||||
|
||||
var ConfigWebRequestDelay = new SingleSelectConfigurationItem("Which delay do you want to apply between each requests made to tracker ?", new Dictionary<string, string>
|
||||
{
|
||||
{"2.1", "2.1s (minimum)"},
|
||||
{"2.2", "2.2s"},
|
||||
{"2.3", "2.3s"},
|
||||
{"2.4", "2.4s" },
|
||||
{"2.5", "2.5s"},
|
||||
{"2.6", "2.6s"}
|
||||
})
|
||||
{ Value = "2.1" };
|
||||
ConfigData.AddDynamic("webRequestDelay", ConfigWebRequestDelay);
|
||||
|
||||
var ConfigMaxPages = new SingleSelectConfigurationItem("How many pages do you want to follow ?", new Dictionary<string, string>
|
||||
{
|
||||
{"1", "1 (32 results - default / best perf.)"},
|
||||
{"2", "2 (64 results)"},
|
||||
{"3", "3 (96 results)"},
|
||||
{"4", "4 (128 results - hard limit max)" },
|
||||
})
|
||||
{ Value = "1" };
|
||||
ConfigData.AddDynamic("maxPages", ConfigMaxPages);
|
||||
|
||||
var ConfigMaxPagesBypassForTMDB = new BoolConfigurationItem("Do you want to bypass max pages for TMDB searches ? (Radarr) - Hard limit of 4") { Value = true };
|
||||
ConfigData.AddDynamic("maxPagesBypassForTMDB", ConfigMaxPagesBypassForTMDB);
|
||||
|
||||
var ConfigDropCategories = new SingleSelectConfigurationItem("Drop requested categories", new Dictionary<string, string>
|
||||
{
|
||||
{"0", "Disabled"},
|
||||
{"1", "Yes, only for TMDB requests (default)"},
|
||||
{"2", "Yes, for all requests"},
|
||||
})
|
||||
{ Value = "1" };
|
||||
ConfigData.AddDynamic("dropCategories", ConfigDropCategories);
|
||||
|
||||
var ConfigEnhancedAnimeSearch = new BoolConfigurationItem("Do you want to use enhanced ANIME search ?") { Value = false };
|
||||
ConfigData.AddDynamic("enhancedAnimeSearch", ConfigEnhancedAnimeSearch);
|
||||
|
||||
var ConfigMultiReplacement = new StringConfigurationItem("Do you want to replace \"MULTI\" keyword in release title by another word ?") { Value = "MULTI.FRENCH" };
|
||||
ConfigData.AddDynamic("multiReplacement", ConfigMultiReplacement);
|
||||
|
||||
var ConfigSubReplacement = new BoolConfigurationItem("Do you want to replace \"VOSTFR\" and \"SUBFRENCH\" with \"ENGLISH\" word ?") { Value = false };
|
||||
ConfigData.AddDynamic("subReplacement", ConfigSubReplacement);
|
||||
|
||||
// Api has 1req/2s limit (minimum)
|
||||
webclient.requestDelay = Convert.ToDouble(WebRequestDelay);
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Configure our Provider
|
||||
/// </summary>
|
||||
/// <param name="configJson">Our params in Json</param>
|
||||
/// <returns>Configuration state</returns>
|
||||
|
||||
// Warning 1998 is async method with no await calls inside
|
||||
// TODO: Remove pragma by wrapping return in Task.FromResult and removing async
|
||||
|
||||
#pragma warning disable CS1998 // Async method lacks 'await' operators and will run synchronously
|
||||
public override async Task<IndexerConfigurationStatus> ApplyConfiguration(JToken configJson)
|
||||
#pragma warning restore CS1998 // Async method lacks 'await' operators and will run synchronously
|
||||
{
|
||||
// Provider not yet configured
|
||||
IsConfigured = false;
|
||||
|
||||
// Retrieve config values set by Jackett's user
|
||||
LoadValuesFromJson(configJson);
|
||||
|
||||
logger.Debug("\nXthor - Validating Settings ... \n");
|
||||
|
||||
// Check Passkey Setting
|
||||
if (string.IsNullOrEmpty(ConfigData.Passkey.Value))
|
||||
{
|
||||
throw new ExceptionWithConfigData("You must provide your passkey for this tracker to be allowed to use API !", ConfigData);
|
||||
}
|
||||
else
|
||||
{
|
||||
logger.Debug("Xthor - Validated Setting -- PassKey (auth) => " + ConfigData.Passkey.Value);
|
||||
}
|
||||
|
||||
|
||||
// Tracker is now configured
|
||||
IsConfigured = true;
|
||||
|
||||
// Saving data
|
||||
SaveConfig();
|
||||
|
||||
return IndexerConfigurationStatus.RequiresTesting;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Execute our search query
|
||||
/// </summary>
|
||||
/// <param name="query">Query</param>
|
||||
/// <returns>Releases</returns>
|
||||
protected override async Task<IEnumerable<ReleaseInfo>> PerformQuery(TorznabQuery query)
|
||||
{
|
||||
var releases = new List<ReleaseInfo>();
|
||||
var searchTerm = query.SanitizedSearchTerm + " " + query.GetEpisodeSearchString();
|
||||
|
||||
if (EnhancedAnimeSearch && query.HasSpecifiedCategories && (query.Categories.Contains(TorznabCatType.TVAnime.ID) || query.Categories.Contains(100032) || query.Categories.Contains(100101) || query.Categories.Contains(100110)))
|
||||
{
|
||||
var regex = new Regex(" ([0-9]+)");
|
||||
searchTerm = regex.Replace(searchTerm, " E$1");
|
||||
}
|
||||
|
||||
searchTerm = searchTerm.Trim();
|
||||
searchTerm = searchTerm.ToLower();
|
||||
searchTerm = searchTerm.Replace(" ", ".");
|
||||
|
||||
// Multiple page support
|
||||
var nextPage = 1;
|
||||
var followingPages = true;
|
||||
do
|
||||
{
|
||||
|
||||
// Build our query
|
||||
var request = BuildQuery(searchTerm, query, ApiEndpoint, nextPage);
|
||||
|
||||
// Getting results
|
||||
logger.Info("\nXthor - Querying API page " + nextPage);
|
||||
var results = await QueryTrackerAsync(request);
|
||||
|
||||
// Torrents Result Count
|
||||
var torrentsCount = 0;
|
||||
|
||||
try
|
||||
{
|
||||
// Deserialize our Json Response
|
||||
var xthorResponse = JsonConvert.DeserializeObject<XthorResponse>(results);
|
||||
|
||||
// Check Tracker's State
|
||||
CheckApiState(xthorResponse.Error);
|
||||
|
||||
// If contains torrents
|
||||
if (xthorResponse.Torrents != null)
|
||||
{
|
||||
// Store torrents rows count result
|
||||
torrentsCount = xthorResponse.Torrents.Count();
|
||||
logger.Info("\nXthor - Found " + torrentsCount + " torrents on current page.");
|
||||
|
||||
// Adding each torrent row to releases
|
||||
// Exclude hidden torrents (category 106, example => search 'yoda' in the API) #10407
|
||||
releases.AddRange(xthorResponse.Torrents
|
||||
.Where(torrent => torrent.Category != 106).Select(torrent =>
|
||||
{
|
||||
//issue #3847 replace multi keyword
|
||||
if (!string.IsNullOrEmpty(MultiReplacement))
|
||||
{
|
||||
var regex = new Regex("(?i)([\\.\\- ])MULTI([\\.\\- ])");
|
||||
torrent.Name = regex.Replace(torrent.Name, "$1" + MultiReplacement + "$2");
|
||||
}
|
||||
|
||||
// issue #8759 replace vostfr and subfrench with English
|
||||
if (SubReplacement)
|
||||
torrent.Name = torrent.Name.Replace("VOSTFR", "ENGLISH").Replace("SUBFRENCH", "ENGLISH");
|
||||
|
||||
var publishDate = DateTimeUtil.UnixTimestampToDateTime(torrent.Added);
|
||||
//TODO replace with download link?
|
||||
var guid = new Uri(TorrentDetailsUrl.Replace("{id}", torrent.Id.ToString()));
|
||||
var details = new Uri(TorrentDetailsUrl.Replace("{id}", torrent.Id.ToString()));
|
||||
var link = new Uri(torrent.Download_link);
|
||||
var release = new ReleaseInfo
|
||||
{
|
||||
// Mapping data
|
||||
Category = MapTrackerCatToNewznab(torrent.Category.ToString()),
|
||||
Title = torrent.Name,
|
||||
Seeders = torrent.Seeders,
|
||||
Peers = torrent.Seeders + torrent.Leechers,
|
||||
MinimumRatio = 1,
|
||||
MinimumSeedTime = 345600,
|
||||
PublishDate = publishDate,
|
||||
Size = torrent.Size,
|
||||
Grabs = torrent.Times_completed,
|
||||
Files = torrent.Numfiles,
|
||||
UploadVolumeFactor = 1,
|
||||
DownloadVolumeFactor = (torrent.Freeleech == 1 ? 0 : 1),
|
||||
Guid = guid,
|
||||
Details = details,
|
||||
Link = link,
|
||||
TMDb = torrent.Tmdb_id
|
||||
};
|
||||
|
||||
return release;
|
||||
}));
|
||||
nextPage++;
|
||||
}
|
||||
else
|
||||
{
|
||||
logger.Info("\nXthor - No results found on page " + nextPage + ", stopping follow of next page.");
|
||||
// No results or no more results available
|
||||
followingPages = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
OnParseError("Unable to parse result \n" + ex.StackTrace, ex);
|
||||
}
|
||||
|
||||
// Stop ?
|
||||
if (query.IsTmdbQuery && MaxPagesBypassForTMDB)
|
||||
{
|
||||
if (nextPage > MaxPagesHardLimit)
|
||||
{
|
||||
logger.Info("\nXthor - Stopping follow of next page " + nextPage + " due to page hard limit reached.");
|
||||
break;
|
||||
}
|
||||
logger.Info("\nXthor - Continue to next page " + nextPage + " due to TMDB request and activated max page bypass for this type of query. Max page hard limit: 4.");
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (torrentsCount < 32)
|
||||
{
|
||||
logger.Info("\nXthor - Stopping follow of next page " + nextPage + " due max available results reached.");
|
||||
break;
|
||||
}
|
||||
else if (nextPage > MaxPages)
|
||||
{
|
||||
logger.Info("\nXthor - Stopping follow of next page " + nextPage + " due to page limit reached.");
|
||||
break;
|
||||
}
|
||||
else if (query.IsTest)
|
||||
{
|
||||
logger.Info("\nXthor - Stopping follow of next page " + nextPage + " due to index test query.");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
} while (followingPages);
|
||||
|
||||
// Check if there is duplicate and return unique rows - Xthor API can be very buggy !
|
||||
var uniqReleases = releases.GroupBy(x => x.Guid).Select(x => x.First()).ToList();
|
||||
var errorPercentage = 1 - ((double)uniqReleases.Count() / releases.Count());
|
||||
if (errorPercentage >= 0.25)
|
||||
{
|
||||
logger.Warn("\nXthor - High percentage error detected: " + string.Format("{0:0.0%}", errorPercentage) + "\nWe strongly recommend that you lower max page to 1, as there is no benefit to grab additionnals.\nTracker API sent us duplicated pages with same results, even if we deduplicate returned rows, please consider to lower as it's unnecessary and increase time used for query for the same result.");
|
||||
}
|
||||
// Return found releases
|
||||
return uniqReleases;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Response from Tracker's API
|
||||
/// </summary>
|
||||
public class XthorResponse
|
||||
{
|
||||
public XthorError Error { get; set; }
|
||||
public XthorUser User { get; set; }
|
||||
public List<XthorTorrent> Torrents { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// State of API
|
||||
/// </summary>
|
||||
public class XthorError
|
||||
{
|
||||
public int Code { get; set; }
|
||||
public string Descr { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// User Informations
|
||||
/// </summary>
|
||||
public class XthorUser
|
||||
{
|
||||
public int Id { get; set; }
|
||||
public string Username { get; set; }
|
||||
public long Uploaded { get; set; }
|
||||
public long Downloaded { get; set; }
|
||||
public int Uclass { get; set; } // Class is a reserved keyword.
|
||||
public decimal Bonus_point { get; set; }
|
||||
public int Hits_and_run { get; set; }
|
||||
public string Avatar_url { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Torrent Informations
|
||||
/// </summary>
|
||||
public class XthorTorrent
|
||||
{
|
||||
public int Id { get; set; }
|
||||
public int Category { get; set; }
|
||||
public int Seeders { get; set; }
|
||||
public int Leechers { get; set; }
|
||||
public string Name { get; set; }
|
||||
public int Times_completed { get; set; }
|
||||
public long Size { get; set; }
|
||||
public int Added { get; set; }
|
||||
public int Freeleech { get; set; }
|
||||
public int Numfiles { get; set; }
|
||||
public string Release_group { get; set; }
|
||||
public string Download_link { get; set; }
|
||||
public int Tmdb_id { get; set; }
|
||||
|
||||
public override string ToString() => string.Format("[XthorTorrent: id={0}, category={1}, seeders={2}, leechers={3}, name={4}, times_completed={5}, size={6}, added={7}, freeleech={8}, numfiles={9}, release_group={10}, download_link={11}, tmdb_id={12}]", Id, Category, Seeders, Leechers, Name, Times_completed, Size, Added, Freeleech, Numfiles, Release_group, Download_link, Tmdb_id);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Build query to process
|
||||
/// </summary>
|
||||
/// <param name="term">Term to search</param>
|
||||
/// <param name="query">Torznab Query for categories mapping</param>
|
||||
/// <param name="url">Search url for provider</param>
|
||||
/// <returns>URL to query for parsing and processing results</returns>
|
||||
private string BuildQuery(string term, TorznabQuery query, string url, int page = 1)
|
||||
{
|
||||
var parameters = new NameValueCollection();
|
||||
var categoriesList = MapTorznabCapsToTrackers(query);
|
||||
|
||||
// Passkey
|
||||
parameters.Add("passkey", ConfigData.Passkey.Value);
|
||||
|
||||
if (query.IsTmdbQuery)
|
||||
{
|
||||
logger.Info("\nXthor - Search requested for movie with TMDB ID n°" + query.TmdbID.ToString());
|
||||
parameters.Add("tmdbid", query.TmdbID.ToString());
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!string.IsNullOrWhiteSpace(term))
|
||||
{
|
||||
// Add search term
|
||||
logger.Info("\nXthor - Search requested for movie with title \"" + term + "\"");
|
||||
parameters.Add("search", WebUtility.UrlEncode(term));
|
||||
}
|
||||
}
|
||||
|
||||
// Loop on categories needed
|
||||
if (categoriesList.Count > 0)
|
||||
{
|
||||
switch (DropCategories)
|
||||
{
|
||||
case 1:
|
||||
// Drop categories for TMDB query only.
|
||||
if (!query.IsTmdbQuery)
|
||||
{ goto default; }
|
||||
break;
|
||||
case 2:
|
||||
// Drop categories enabled for all requests
|
||||
break;
|
||||
default:
|
||||
// Default or disabled state (0 value of config switch)
|
||||
parameters.Add("category", string.Join("+", categoriesList));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// If Only Freeleech Enabled
|
||||
if (FreeleechOnly)
|
||||
{
|
||||
parameters.Add("freeleech", "1");
|
||||
}
|
||||
|
||||
// If Specific Language Accent Requested
|
||||
if (!string.IsNullOrEmpty(SpecificLanguageAccent) && SpecificLanguageAccent != "0")
|
||||
{
|
||||
parameters.Add("accent", SpecificLanguageAccent);
|
||||
}
|
||||
|
||||
// Pages handling
|
||||
if (page > 1 && !query.IsTest)
|
||||
{
|
||||
parameters.Add("page", page.ToString());
|
||||
}
|
||||
|
||||
// Building our query -- Cannot use GetQueryString due to UrlEncode (generating wrong category param)
|
||||
url += "?" + string.Join("&", parameters.AllKeys.Select(a => a + "=" + parameters[a]));
|
||||
|
||||
logger.Info("\nXthor - Builded query: " + url);
|
||||
|
||||
// Return our search url
|
||||
return url;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get Torrents Page from Tracker by Query Provided
|
||||
/// </summary>
|
||||
/// <param name="request">URL created by Query Builder</param>
|
||||
/// <returns>Results from query</returns>
|
||||
private async Task<string> QueryTrackerAsync(string request)
|
||||
{
|
||||
// Cache mode not enabled or cached file didn't exist for our query
|
||||
logger.Debug("\nQuerying tracker for results....");
|
||||
|
||||
// Build WebRequest for index
|
||||
var myIndexRequest = new WebRequest
|
||||
{
|
||||
Type = RequestType.GET,
|
||||
Url = request,
|
||||
Encoding = Encoding
|
||||
};
|
||||
|
||||
// Request our first page
|
||||
var results = await webclient.GetResultAsync(myIndexRequest);
|
||||
if (results.Status == HttpStatusCode.InternalServerError) // See issue #2110
|
||||
throw new Exception("Internal Server Error (" + results.ContentString + "), probably you reached the API limits, please reduce the number of queries");
|
||||
|
||||
// Return results from tracker
|
||||
return results.ContentString;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Check API's state
|
||||
/// </summary>
|
||||
/// <param name="state">State of API</param>
|
||||
private void CheckApiState(XthorError state)
|
||||
{
|
||||
// Switch on state
|
||||
switch (state.Code)
|
||||
{
|
||||
case 0:
|
||||
// Everything OK
|
||||
logger.Debug("\nXthor - API State : Everything OK ... -> " + state.Descr);
|
||||
break;
|
||||
|
||||
case 1:
|
||||
// Passkey not found
|
||||
logger.Error("\nXthor - API State : Error, Passkey not found in tracker's database, aborting... -> " + state.Descr);
|
||||
throw new Exception("Passkey not found in tracker's database");
|
||||
case 2:
|
||||
// No results
|
||||
logger.Info("\nXthor - API State : No results for query ... -> " + state.Descr);
|
||||
break;
|
||||
|
||||
case 3:
|
||||
// Power Saver
|
||||
logger.Warn("\nXthor - API State : Power Saver mode, only cached query with no parameters available ... -> " + state.Descr);
|
||||
break;
|
||||
|
||||
case 4:
|
||||
// DDOS Attack, API disabled
|
||||
logger.Error("\nXthor - API State : Tracker is under DDOS attack, API disabled, aborting ... -> " + state.Descr);
|
||||
throw new Exception("Tracker is under DDOS attack, API disabled");
|
||||
case 8:
|
||||
// AntiSpam Protection
|
||||
logger.Warn("\nXthor - API State : Triggered AntiSpam Protection -> " + state.Descr);
|
||||
throw new Exception("Triggered AntiSpam Protection, please delay your requests !");
|
||||
default:
|
||||
// Unknown state
|
||||
logger.Error("\nXthor - API State : Unknown state, aborting querying ... -> " + state.Descr);
|
||||
throw new Exception("Unknown state, aborting querying");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -267,9 +267,6 @@ namespace Jackett.Common.Services
|
||||
|| variant == Variants.JackettVariant.CoreLinuxAmdx64 || variant == Variants.JackettVariant.CoreLinuxArm32
|
||||
|| variant == Variants.JackettVariant.CoreLinuxArm64 || variant == Variants.JackettVariant.Mono)
|
||||
{
|
||||
//Calling the file permission service to limit usage to netcoreapp. The Mono.Posix.NETStandard library causes issues outside of .NET Core
|
||||
//https://github.com/xamarin/XamarinComponents/issues/282
|
||||
|
||||
// When the files get extracted, the execute permission for jackett and JackettUpdater don't get carried across
|
||||
|
||||
var jackettPath = tempDir + "/Jackett/jackett";
|
||||
|
||||
@@ -33,7 +33,6 @@
|
||||
|
||||
<!-- Conditionally obtain references for the .NET 6.0 target -->
|
||||
<ItemGroup Condition=" '$(TargetFramework)' == 'net6.0' ">
|
||||
<PackageReference Include="Mono.Posix.NETStandard" Version="1.0.0" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="6.0.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.Configuration" Version="6.0.0" />
|
||||
<PackageReference Include="System.Security.Cryptography.ProtectedData" Version="6.0.0" />
|
||||
@@ -57,6 +56,7 @@
|
||||
<PackageReference Include="Autofac.Extensions.DependencyInjection" Version="7.2.0" />
|
||||
<PackageReference Include="AutoMapper" Version="10.1.1" />
|
||||
<PackageReference Include="CommandLineParser" Version="2.8.0" />
|
||||
<PackageReference Include="Mono.Posix" Version="7.1.0-final.1.21458.1" />
|
||||
<PackageReference Include="NLog" Version="4.7.12" />
|
||||
<PackageReference Include="NLog.Web.AspNetCore" Version="4.14.0" />
|
||||
<PackageReference Include="System.ServiceProcess.ServiceController" Version="6.0.0" />
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
using Jackett.Common.Services.Interfaces;
|
||||
using NLog;
|
||||
#if !NET461
|
||||
using System;
|
||||
using Jackett.Common.Services.Interfaces;
|
||||
using Mono.Unix;
|
||||
#endif
|
||||
using NLog;
|
||||
|
||||
namespace Jackett.Server.Services
|
||||
{
|
||||
@@ -15,11 +13,6 @@ namespace Jackett.Server.Services
|
||||
|
||||
public void MakeFileExecutable(string path)
|
||||
{
|
||||
#if !NET461
|
||||
|
||||
//Calling the file permission service to limit usage to netcoreapp. The Mono.Posix.NETStandard library causes issues outside of .NET Core
|
||||
//https://github.com/xamarin/XamarinComponents/issues/282
|
||||
|
||||
logger.Debug($"Attempting to give execute permission to: {path}");
|
||||
try
|
||||
{
|
||||
@@ -32,7 +25,6 @@ namespace Jackett.Server.Services
|
||||
{
|
||||
logger.Error(ex);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -280,6 +280,7 @@ namespace Jackett.Updater
|
||||
"Definitions/beyond-hd-oneurl.yml", // #12993
|
||||
"Definitions/baibako.yml", // renamed rudub #5673
|
||||
"Definitions/bithq.yml",
|
||||
"Definitions/bit-titan.yml",
|
||||
"Definitions/bigtorrent.yml", // merged with eStone #12352
|
||||
"Definitions/bigtower.yml",
|
||||
"Definitions/bitme.yml",
|
||||
@@ -392,6 +393,7 @@ namespace Jackett.Updater
|
||||
"Definitions/latinop2p.yml",
|
||||
"Definitions/leaguehd.yml", // renamed to lemonhd
|
||||
"Definitions/lechaudron.yml",
|
||||
"Definitions/legacyhd.yml", // renamed realflix
|
||||
"Definitions/lemencili.yml",
|
||||
"Definitions/leparadisdunet.yml",
|
||||
"Definitions/leporno.yml",
|
||||
@@ -454,6 +456,7 @@ namespace Jackett.Updater
|
||||
"Definitions/sdkino.yml",
|
||||
"Definitions/secretcinema.yml", // migrated to C# gazelle base tracker
|
||||
"Definitions/seedpeer.yml",
|
||||
"Definitions/sexxi.yml",
|
||||
"Definitions/sharefiles.yml",
|
||||
"Definitions/shareisland.yml", // switch to *-API #8682
|
||||
"Definitions/sharespacedb.yml",
|
||||
@@ -480,6 +483,7 @@ namespace Jackett.Updater
|
||||
"Definitions/tehconnection.yml",
|
||||
"Definitions/tellytorrent.yml", // switch to *-API #8682
|
||||
"Definitions/tfile.yml",
|
||||
"Definitions/the-devils-lounge.yml",
|
||||
"Definitions/the-madhouse.yml",
|
||||
"Definitions/themoviecave.yml",
|
||||
"Definitions/theresurrection.yml",
|
||||
@@ -491,6 +495,7 @@ namespace Jackett.Updater
|
||||
"Definitions/tntfork.yml",
|
||||
"Definitions/tntvillage.yml",
|
||||
"Definitions/topnow.yml",
|
||||
"Definitions/toros.yml",
|
||||
"Definitions/torrent-paradise-ml.yml",
|
||||
"Definitions/torrent4you.yml",
|
||||
"Definitions/torrentbomb.yml",
|
||||
|
||||
Reference in New Issue
Block a user