Add a Readarr mock instance to the demo
Adds darkalex17/readarr-mock, built from ghcr.io/pennydreadful/bookshelf:softcover (the maintained Readarr continuation; the LinuxServer image is discontinued and its metadata endpoint no longer resolves). The captured config carries 6 authors, 327 books, 39 book files, 4 tags, 7 indexers, 193 history rows and one root folder at /books, with minimal EPUBs under mock-htpc/books so the files show as imported. Prowlarr now registers Readarr as a synced application, so its config is recaptured and the prowlarr-mock image must be rebuilt and pushed alongside. The compose file, managarr config, justfile recipes and README gain the fourth instance. The demo script needs no change; it fetches the compose file and config from main at run time. Requires a Managarr release with Readarr support, since the demo script runs the published darkalex17/managarr image against these files.
This commit is contained in:
483 files changed
+55515
-15966
No files matched your search
@@ -0,0 +1,216 @@
|
||||
---
|
||||
id: 0dayfiles-api
|
||||
name: 0DayFiles (API)
|
||||
description: "0DayFiles is a Private Torrent Tracker for 0DAY / GENERAL"
|
||||
language: en-US
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://0dayfiles.net/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 9, cat: Movies/SD, desc: "Movies/480p"}
|
||||
- {id: 10, cat: Movies/UHD, desc: "Movies/4K"}
|
||||
- {id: 11, cat: Movies/BluRay, desc: "Movies/Bluray"}
|
||||
- {id: 12, cat: Movies/BluRay, desc: "Movies/Bluray-Full"}
|
||||
- {id: 13, cat: Movies/SD, desc: "Movies/Cam"}
|
||||
- {id: 14, cat: Movies/DVD, desc: "Movies/DVD-R"}
|
||||
- {id: 17, cat: Movies, desc: "Movies/Packs"}
|
||||
- {id: 18, cat: Movies/HD, desc: "Movies/x264"}
|
||||
- {id: 19, cat: Movies/HD, desc: "Movies/x265"}
|
||||
- {id: 20, cat: Movies/SD, desc: "Movies/XviD"}
|
||||
- {id: 21, cat: TV/SD, desc: "TV/480p"}
|
||||
- {id: 22, cat: TV/UHD, desc: "TV/4K"}
|
||||
- {id: 23, cat: TV/HD, desc: "TV/Bluray"}
|
||||
- {id: 25, cat: TV/SD, desc: "TV/DVD-Rip"}
|
||||
- {id: 26, cat: TV/Other, desc: "TV/Mobile"}
|
||||
- {id: 28, cat: TV, desc: "TV/Packs"}
|
||||
- {id: 29, cat: TV/SD, desc: "TV/SD/x264"}
|
||||
- {id: 30, cat: TV/HD, desc: "TV/x264"}
|
||||
- {id: 31, cat: TV/HD, desc: "TV/x265"}
|
||||
- {id: 32, cat: TV/SD, desc: "TV/XviD"}
|
||||
- {id: 33, cat: Console, desc: "Nintendo"}
|
||||
- {id: 34, cat: PC/Games, desc: "PC/Games"}
|
||||
- {id: 38, cat: Audio, desc: "Music/Audio"}
|
||||
- {id: 39, cat: Audio/Lossless, desc: "Music/Flac"}
|
||||
- {id: 41, cat: Audio, desc: "Music/Packs"}
|
||||
- {id: 42, cat: Audio/Video, desc: "Music/Video"}
|
||||
- {id: 43, cat: TV/Anime, desc: "Anime"}
|
||||
- {id: 44, cat: Audio/Audiobook, desc: "Audio Books"}
|
||||
- {id: 46, cat: Books, desc: "Books"}
|
||||
- {id: 48, cat: TV/Documentary, desc: "Documentary"}
|
||||
- {id: 49, cat: Other, desc: "Educational"}
|
||||
- {id: 51, cat: PC/Mac, desc: "Mac"}
|
||||
- {id: 1, cat: PC/0day, desc: "Software"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid, tvdbid, tmdbid]
|
||||
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://0dayfiles.net/\" target=\"_blank\">0DayFiles</a> account <i>My Settings</i> page and clicking on the <b>API Key</b> tab."
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: single_file_release_use_filename
|
||||
type: checkbox
|
||||
label: Use filename as title for single file releases
|
||||
default: true
|
||||
- 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
|
||||
error:
|
||||
- selector: a[href*="/login"]
|
||||
message:
|
||||
text: "The API key was not accepted by {{ .Config.sitelink }}."
|
||||
- selector: :root:contains("Account is Banned")
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://hdinnovations.github.io/UNIT3D/torrent_api.html
|
||||
# https://github.com/HDInnovations/UNIT3D/blob/master/app/Http/Controllers/API/TorrentController.php#L657
|
||||
- path: api/torrents/filter
|
||||
response:
|
||||
type: json
|
||||
|
||||
headers:
|
||||
Authorization: ["Bearer {{ .Config.apikey }}"]
|
||||
|
||||
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
|
||||
$raw: "{{ range .Categories }}&categories[]={{.}}{{end}}"
|
||||
name: "{{ .Keywords }}"
|
||||
seasonNumber: "{{ .Query.Season }}"
|
||||
episodeNumber: "{{ .Query.Ep }}"
|
||||
imdbId: "{{ .Query.IMDBIDShort }}"
|
||||
tmdbId: "{{ .Query.TMDBID }}"
|
||||
tvdbId: "{{ .Query.TVDBID }}"
|
||||
"free[]": "{{ if .Config.freeleech }}100{{ else }}{{ end }}"
|
||||
sortField: "{{ .Config.sort }}"
|
||||
sortDirection: "{{ .Config.type }}"
|
||||
perPage: 100
|
||||
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
args: ["\\.", " "]
|
||||
|
||||
rows:
|
||||
selector: data
|
||||
attribute: attributes
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: category_id
|
||||
title_optional:
|
||||
selector: name
|
||||
title_filename:
|
||||
selector: "files[0].name"
|
||||
optional: true
|
||||
files:
|
||||
selector: num_file
|
||||
title:
|
||||
text: "{{ if and (.Config.single_file_release_use_filename) (eq .Result.files \"1\") (.Result.title_filename) }}{{ .Result.title_filename }}{{ else }}{{ .Result.title_optional }}{{ end }}"
|
||||
details:
|
||||
selector: details_link
|
||||
download:
|
||||
selector: download_link
|
||||
poster:
|
||||
selector: meta.poster
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["https://via.placeholder.com/90x135", ""]
|
||||
imdbid:
|
||||
selector: imdb_id
|
||||
tmdbid:
|
||||
selector: tmdb_id
|
||||
tvdbid:
|
||||
selector: tvdb_id
|
||||
genre:
|
||||
selector: meta.genres
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["(?i)(Science Fiction)", "Science_Fiction"]
|
||||
- name: re_replace
|
||||
args: [" & ", "_&_"]
|
||||
_internal:
|
||||
selector: internal
|
||||
case:
|
||||
False: "{{ .False }}"
|
||||
True: "{{ .True }}"
|
||||
description:
|
||||
text: "{{ if .Result._internal }}Internal{{ else }}{{ end }}{{ if and .Result._internal .Result.genre }} | {{ else }}{{ end }}{{ .Result.genre }}"
|
||||
seeders:
|
||||
selector: seeders
|
||||
leechers:
|
||||
selector: leechers
|
||||
grabs:
|
||||
selector: times_completed
|
||||
date:
|
||||
# "created_at": "2021-10-18T00:34:50.000000Z" is returned by Newtonsoft.Json.Linq as 18/10/2021 00:34:50
|
||||
selector: created_at
|
||||
filters:
|
||||
- name: append
|
||||
args: " +00:00" # GMT
|
||||
- name: dateparse
|
||||
args: "MM/dd/yyyy HH:mm:ss zzz"
|
||||
size:
|
||||
selector: size
|
||||
_featured:
|
||||
selector: featured
|
||||
case:
|
||||
False: "{{ .False }}"
|
||||
True: "{{ .True }}"
|
||||
downloadvolumefactor_freeleech:
|
||||
# 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
|
||||
downloadvolumefactor:
|
||||
text: "{{ if .Result._featured }}0{{ else }}{{ .Result.downloadvolumefactor_freeleech }}{{ end }}"
|
||||
uploadvolumefactor_double_upload:
|
||||
# api returns False, True
|
||||
selector: double_upload
|
||||
case:
|
||||
False: 1 # normal
|
||||
True: 2 # double
|
||||
uploadvolumefactor:
|
||||
text: "{{ if .Result._featured }}2{{ else }}{{ .Result.uploadvolumefactor_double_upload }}{{ end }}"
|
||||
minimumratio:
|
||||
text: 1.0
|
||||
minimumseedtime:
|
||||
# 7 days (as seconds = 7 x 24 x 60 x 60)
|
||||
text: 604800
|
||||
# json UNIT3D 9.2.0
|
||||
@@ -0,0 +1,183 @@
|
||||
---
|
||||
id: 3dvault-api
|
||||
name: 3D Vault (API)
|
||||
description: "3D Vault is a Private Torrent Tracker for 3D MOVIES"
|
||||
language: en-US
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://3dvault.org/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: Movies, desc: "Movie"}
|
||||
- {id: 2, cat: TV, desc: "TV Show"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid, tvdbid, tmdbid]
|
||||
movie-search: [q, imdbid, tmdbid]
|
||||
|
||||
settings:
|
||||
- name: apikey
|
||||
type: text
|
||||
label: APIKey
|
||||
- name: info_key
|
||||
type: info
|
||||
label: About your API key
|
||||
default: "Find or Generate a new API Token by accessing your <a href=\"https://3dvault.org/\" target=\"_blank\">3D Vault</a> account <i>My Settings</i> page and clicking on the <b>API Key</b> tab."
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: single_file_release_use_filename
|
||||
type: checkbox
|
||||
label: Use filename as title for single file releases
|
||||
default: true
|
||||
- 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
|
||||
error:
|
||||
- selector: a[href*="/login"]
|
||||
message:
|
||||
text: "The API key was not accepted by {{ .Config.sitelink }}."
|
||||
- selector: :root:contains("Account is Banned")
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://hdinnovations.github.io/UNIT3D/torrent_api.html
|
||||
# https://github.com/HDInnovations/UNIT3D/blob/master/app/Http/Controllers/API/TorrentController.php#L657
|
||||
- path: api/torrents/filter
|
||||
response:
|
||||
type: json
|
||||
|
||||
headers:
|
||||
Authorization: ["Bearer {{ .Config.apikey }}"]
|
||||
|
||||
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
|
||||
$raw: "{{ range .Categories }}&categories[]={{.}}{{end}}"
|
||||
name: "{{ .Keywords }}"
|
||||
seasonNumber: "{{ .Query.Season }}"
|
||||
episodeNumber: "{{ .Query.Ep }}"
|
||||
imdbId: "{{ .Query.IMDBIDShort }}"
|
||||
tmdbId: "{{ .Query.TMDBID }}"
|
||||
tvdbId: "{{ .Query.TVDBID }}"
|
||||
"free[]": "{{ if .Config.freeleech }}100{{ else }}{{ end }}"
|
||||
sortField: "{{ .Config.sort }}"
|
||||
sortDirection: "{{ .Config.type }}"
|
||||
perPage: 100
|
||||
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
args: ["\\.", " "]
|
||||
|
||||
rows:
|
||||
selector: data
|
||||
attribute: attributes
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: category_id
|
||||
title_optional:
|
||||
selector: name
|
||||
title_filename:
|
||||
selector: "files[0].name"
|
||||
optional: true
|
||||
files:
|
||||
selector: num_file
|
||||
title:
|
||||
text: "{{ if and (.Config.single_file_release_use_filename) (eq .Result.files \"1\") (.Result.title_filename) }}{{ .Result.title_filename }}{{ else }}{{ .Result.title_optional }}{{ end }}"
|
||||
details:
|
||||
selector: details_link
|
||||
download:
|
||||
selector: download_link
|
||||
poster:
|
||||
selector: meta.poster
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["https://via.placeholder.com/90x135", ""]
|
||||
imdbid:
|
||||
selector: imdb_id
|
||||
tmdbid:
|
||||
selector: tmdb_id
|
||||
tvdbid:
|
||||
selector: tvdb_id
|
||||
genre:
|
||||
selector: meta.genres
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["(?i)(Science Fiction)", "Science_Fiction"]
|
||||
- name: re_replace
|
||||
args: [" & ", "_&_"]
|
||||
_internal:
|
||||
selector: internal
|
||||
case:
|
||||
False: "{{ .False }}"
|
||||
True: "{{ .True }}"
|
||||
description:
|
||||
text: "{{ if .Result._internal }}Internal{{ else }}{{ end }}{{ if and .Result._internal .Result.genre }} | {{ else }}{{ end }}{{ .Result.genre }}"
|
||||
seeders:
|
||||
selector: seeders
|
||||
leechers:
|
||||
selector: leechers
|
||||
grabs:
|
||||
selector: times_completed
|
||||
date:
|
||||
# "created_at": "2021-10-18T00:34:50.000000Z" is returned by Newtonsoft.Json.Linq as 18/10/2021 00:34:50
|
||||
selector: created_at
|
||||
filters:
|
||||
- name: append
|
||||
args: " +00:00" # GMT
|
||||
- name: dateparse
|
||||
args: "MM/dd/yyyy HH:mm:ss zzz"
|
||||
size:
|
||||
selector: size
|
||||
_featured:
|
||||
selector: featured
|
||||
case:
|
||||
False: "{{ .False }}"
|
||||
True: "{{ .True }}"
|
||||
downloadvolumefactor_freeleech:
|
||||
# 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
|
||||
downloadvolumefactor:
|
||||
text: "{{ if .Result._featured }}0{{ else }}{{ .Result.downloadvolumefactor_freeleech }}{{ end }}"
|
||||
uploadvolumefactor_double_upload:
|
||||
# api returns False, True
|
||||
selector: double_upload
|
||||
case:
|
||||
False: 1 # normal
|
||||
True: 2 # double
|
||||
uploadvolumefactor:
|
||||
text: "{{ if .Result._featured }}2{{ else }}{{ .Result.uploadvolumefactor_double_upload }}{{ end }}"
|
||||
minimumratio:
|
||||
text: 1.0
|
||||
minimumseedtime:
|
||||
# 2 days (as seconds = 2 x 24 x 60 x 60)
|
||||
text: 172800
|
||||
# json UNIT3D 9.2.0
|
||||
@@ -0,0 +1,175 @@
|
||||
---
|
||||
id: abnormal-api
|
||||
name: Abnormal (API)
|
||||
description: "ABNormal (ABN) is a FRENCH Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
language: fr-FR
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
requestDelay: 2.1
|
||||
links:
|
||||
- https://abn.lol/
|
||||
legacylinks:
|
||||
- https://abnormal.ws
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: TV, desc: "Series"}
|
||||
- {id: 2, cat: Movies, desc: "Movies"}
|
||||
- {id: 3, cat: TV/Documentary, desc: "Documentaries"}
|
||||
- {id: 4, cat: TV/Anime, desc: "Anime"}
|
||||
- {id: 5, cat: PC/Games, desc: "Games"}
|
||||
- {id: 6, cat: PC, desc: "Applications"}
|
||||
- {id: 7, cat: Books/EBook, desc: "Ebooks"}
|
||||
- {id: 9, cat: TV, desc: "Emissions"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
book-search: [q]
|
||||
|
||||
settings:
|
||||
- name: apikey
|
||||
type: text
|
||||
label: APIKey
|
||||
- name: info_key
|
||||
type: info
|
||||
label: About your API key
|
||||
default: "Find your API key on your <a href=\"https://abn.lol/User/Parameters\" target=\"_blank\">Parameters</a> page. The API key is read-only and never expires."
|
||||
- name: apiurl
|
||||
label: API URL
|
||||
type: text
|
||||
default: api.abn.lol
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: multilang
|
||||
type: checkbox
|
||||
label: Replace MULTi by another language in release name
|
||||
default: false
|
||||
- name: multilanguage
|
||||
type: select
|
||||
label: Replace MULTi by this language
|
||||
default: FRENCH
|
||||
options:
|
||||
FRENCH: FRENCH
|
||||
MULTi.FRENCH: MULTi.FRENCH
|
||||
ENGLISH: ENGLISH
|
||||
MULTi.ENGLISH: MULTi.ENGLISH
|
||||
VOSTFR: VOSTFR
|
||||
MULTi.VOSTFR: MULTi.VOSTFR
|
||||
- name: vostfr
|
||||
type: checkbox
|
||||
label: Replace VOSTFR and SUBFRENCH with ENGLISH
|
||||
default: false
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
default: Created
|
||||
options:
|
||||
Created: created
|
||||
Seeders: seeders
|
||||
Size: size
|
||||
ReleaseName: title
|
||||
- name: type
|
||||
type: select
|
||||
label: Order requested from site
|
||||
default: DESC
|
||||
options:
|
||||
DESC: desc
|
||||
ASC: asc
|
||||
- name: info_activity
|
||||
type: info
|
||||
label: Account Inactivity
|
||||
default: "Accounts are automatically deactivated after 4 months of inactivity (no connection to the site)."
|
||||
|
||||
login:
|
||||
path: "https://{{ .Config.apiurl }}/api/Release/Search?name=test&resultByPage=1"
|
||||
method: get
|
||||
error:
|
||||
- selector: :root:contains("Unauthorized")
|
||||
message:
|
||||
text: "The API key was not accepted by {{ .Config.sitelink }}."
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: "https://{{ .Config.apiurl }}/api/Release/Search"
|
||||
response:
|
||||
type: json
|
||||
|
||||
headers:
|
||||
Authorization: ["Bearer {{ .Config.apikey }}"]
|
||||
|
||||
inputs:
|
||||
$raw: "{{ range .Categories }}categoryId={{.}}&{{end}}"
|
||||
name: "{{ .Keywords }}"
|
||||
resultByPage: 100
|
||||
sort: "{{ .Config.sort }}"
|
||||
sortDirection: "{{ .Config.type }}"
|
||||
freeleech: "{{ if .Config.freeleech }}true{{ else }}{{ end }}"
|
||||
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
args: ["\\.", " "]
|
||||
|
||||
rows:
|
||||
selector: $
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: categoryId
|
||||
title_phase1:
|
||||
selector: name
|
||||
title_vostfr:
|
||||
text: "{{ .Result.title_phase1 }}"
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["(?i)\\b(vostfr|subfrench)\\b", "ENGLISH"]
|
||||
title_phase2:
|
||||
text: "{{ if .Config.vostfr }}{{ .Result.title_vostfr }}{{ else }}{{ .Result.title_phase1 }}{{ end }}"
|
||||
title_multilang:
|
||||
text: "{{ .Result.title_phase2 }}"
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["(?i)\\b(MULTI(?!.*(?:FRENCH|ENGLISH|VOSTFR)))\\b", "{{ .Config.multilanguage }}"]
|
||||
title:
|
||||
text: "{{ if .Config.multilang }}{{ .Result.title_multilang }}{{ else }}{{ .Result.title_phase2 }}{{ end }}"
|
||||
_id:
|
||||
selector: id
|
||||
details:
|
||||
# api returns https://api.abn.lol/api/Release/671444 which is not valid for browsing
|
||||
text: "{{ .Config.sitelink }}Torrent/Details?ReleaseId={{ .Result._id }}"
|
||||
download:
|
||||
selector: downloadUrl
|
||||
infohash:
|
||||
selector: infoHash
|
||||
date:
|
||||
# created": "2026-03-07T06:59:22.137408" is returned by Newtonsoft.Json.Linq as 03/07/2026 06:59:22
|
||||
selector: created
|
||||
filters:
|
||||
- name: append
|
||||
args: " +00:01" # CET
|
||||
- name: dateparse
|
||||
args: "MM/dd/yyyy HH:mm:ss zzz"
|
||||
size:
|
||||
selector: size
|
||||
seeders:
|
||||
selector: seeders
|
||||
leechers:
|
||||
selector: leechers
|
||||
grabs:
|
||||
selector: completed
|
||||
downloadvolumefactor:
|
||||
selector: freeleech
|
||||
case:
|
||||
False: 1 # not free
|
||||
True: 0 # freeleech
|
||||
uploadvolumefactor:
|
||||
text: 1
|
||||
minimumratio:
|
||||
text: 1.0
|
||||
minimumseedtime:
|
||||
# 4 days (as seconds = 4 x 24 x 60 x 60)
|
||||
text: 345600
|
||||
# JSON
|
||||
@@ -0,0 +1,105 @@
|
||||
---
|
||||
id: anibt
|
||||
name: Anibt
|
||||
description: Anibt is a CHINESE Public aggregate indexer for ANIME"
|
||||
language: zh-CN
|
||||
type: public
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://anibt.net/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: anime, cat: TV/Anime, desc: "Anime", default: true}
|
||||
- {id: manga, cat: Books/Comics, desc: "Manga", default: false}
|
||||
- {id: music, cat: Audio/Lossless, desc: "Music", default: false}
|
||||
- {id: raw, cat: TV/Anime, desc: "Raw", default: false}
|
||||
- {id: stage, cat: Audio/Video, desc: "Stage", default: false}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
music-search: [q]
|
||||
book-search: [q]
|
||||
|
||||
settings:
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
default: publishedAt
|
||||
options:
|
||||
publishedAt: created
|
||||
fileSize: size
|
||||
- name: type
|
||||
type: select
|
||||
label: Order requested from site
|
||||
default: desc
|
||||
options:
|
||||
desc: desc
|
||||
asc: asc
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: rss/magnets.xml
|
||||
categories: [anime]
|
||||
response:
|
||||
type: xml
|
||||
- path: rss/other/manga.xml
|
||||
categories: [manga]
|
||||
response:
|
||||
type: xml
|
||||
- path: rss/other/music.xml
|
||||
categories: [music]
|
||||
response:
|
||||
type: xml
|
||||
- path: rss/other/raw.xml
|
||||
categories: [raw]
|
||||
response:
|
||||
type: xml
|
||||
- path: rss/other/stage.xml
|
||||
categories: [stage]
|
||||
response:
|
||||
type: xml
|
||||
|
||||
inputs:
|
||||
# defaults (e.g. limit=100) cause redirects if used in URL
|
||||
q: "{{ .Keywords }}"
|
||||
sortField: "{{ re_replace .Config.sort \"publishedAt\" \"\" }}"
|
||||
sortOrder: "{{ re_replace .Config.type \"desc\" \"\" }}"
|
||||
|
||||
rows:
|
||||
selector: rss > channel > item
|
||||
|
||||
fields:
|
||||
title:
|
||||
selector: title
|
||||
description:
|
||||
selector: animeTitle
|
||||
details:
|
||||
selector: link
|
||||
download:
|
||||
selector: enclosure
|
||||
attribute: url
|
||||
date:
|
||||
# Sat, 18 Jul 2026 07:33:19 +0800
|
||||
selector: pubDate
|
||||
filters:
|
||||
- name: dateparse
|
||||
args: "ddd, dd MMM yyyy HH:mm:ss zzz"
|
||||
category_default:
|
||||
selector: type
|
||||
category:
|
||||
selector: category
|
||||
optional: true
|
||||
default: "{{ .Result.category_default }}"
|
||||
size:
|
||||
selector: fileSize
|
||||
seeders:
|
||||
text: 1
|
||||
leechers:
|
||||
text: 1
|
||||
downloadvolumefactor:
|
||||
text: 0
|
||||
uploadvolumefactor:
|
||||
text: 1
|
||||
# torznab xml
|
||||
@@ -0,0 +1,207 @@
|
||||
---
|
||||
id: animebybelka
|
||||
name: Anime by Belka
|
||||
description: "Anime by Belka (Аниме от Белки) is a RUSSIAN Semi-Private Torrent Tracker for ANIME"
|
||||
language: ru-RU
|
||||
type: semi-private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://anibelka.com/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
# - {id: 1, cat: TV/Anime, desc: "Трекер"}
|
||||
# - {id: 31, cat: TV/Anime, desc: "Аниме архив"}
|
||||
- {id: 32, cat: TV/Anime, desc: "Аниме универсальные"}
|
||||
- {id: 33, cat: TV/Anime, desc: "Аниме с озвучкой"}
|
||||
- {id: 34, cat: TV/Anime, desc: "Аниме с субтитрами"}
|
||||
- {id: 36, cat: Movies/Other, desc: "Полнометражки"}
|
||||
- {id: 37, cat: TV/Anime, desc: "Аниме для PSP"}
|
||||
- {id: 39, cat: TV/Anime, desc: "Сэмплы"}
|
||||
- {id: 7, cat: Audio, desc: "Аудио"}
|
||||
- {id: 8, cat: Books/Comics, desc: "Манга"}
|
||||
- {id: 21, cat: Other, desc: "Изображения аниме"}
|
||||
- {id: 9, cat: Other, desc: "Япония"}
|
||||
# - {id: 17, cat: Other, desc: "Информация"}
|
||||
# - {id: 40, cat: Other, desc: "Аниме онлайн"}
|
||||
# - {id: 41, cat: Other, desc: "Галерея Японии"}
|
||||
# - {id: 42, cat: Other, desc: "Фанфики по аниме"}
|
||||
# - {id: 43, cat: Other, desc: "Отзывы, просьбы, предложения, техника"}
|
||||
- {id: 52, cat: TV/Anime, desc: "Альтернативные части"}
|
||||
# - {id: 49, cat: Other, desc: "Форум"}
|
||||
# - {id: 50, cat: Other, desc: "Аниме. Форум. Обсуждение"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
music-search: [q]
|
||||
book-search: [q]
|
||||
|
||||
settings:
|
||||
- name: cookie
|
||||
type: text
|
||||
label: Cookie
|
||||
- name: info_cookie
|
||||
type: info_cookie
|
||||
- name: useragent
|
||||
type: text
|
||||
label: User-Agent
|
||||
- name: info_useragent
|
||||
type: info_useragent
|
||||
- name: stripcyrillic
|
||||
type: checkbox
|
||||
label: Strip Cyrillic Letters
|
||||
default: false
|
||||
- name: addrussiantotitle
|
||||
type: checkbox
|
||||
label: Add RUS to end of all titles to improve language detection by Sonarr and Radarr. Will cause English-only results to be misidentified.
|
||||
default: false
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
default: t
|
||||
options:
|
||||
t: created
|
||||
ts: seeders
|
||||
sz: size
|
||||
i: title
|
||||
- name: type
|
||||
type: select
|
||||
label: Order requested from site
|
||||
default: d
|
||||
options:
|
||||
d: desc
|
||||
a: asc
|
||||
|
||||
login:
|
||||
# using cookie method because site returns SQL error on first access
|
||||
method: cookie
|
||||
inputs:
|
||||
cookie: "{{ .Config.cookie }}"
|
||||
test:
|
||||
path: /
|
||||
selector: a[href^="./ucp.php?mode=logout&sid="]
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://anibelka.com/search.php?tracker_search=torrent&keywords=nyan&terms=all&author=&fid%5B%5D=31&sc=1&sf=titleonly&sk=t&sd=d&sr=topics&st=0&ch=300&t=0
|
||||
- path: search.php
|
||||
inputs:
|
||||
$raw: "{{ range .Categories }}&fid[]={{.}}{{end}}"
|
||||
tracker_search: "{{ if .Keywords }}torrent{{ else }}tracker{{ end }}"
|
||||
keywords: "{{ if .Keywords }}{{ .Keywords }}{{ else }}{{ .Today.Year }}{{ end }}"
|
||||
terms: all
|
||||
sc: 1
|
||||
sf: titleonly
|
||||
sr: topics
|
||||
sk: "{{ .Config.sort }}"
|
||||
sd: "{{ .Config.type }}"
|
||||
st: 0
|
||||
ch: 300
|
||||
t: 0
|
||||
|
||||
headers:
|
||||
User-Agent: ["{{ .Config.useragent }}"]
|
||||
|
||||
keywordsfilters:
|
||||
# strip season and/or ep
|
||||
- name: re_replace
|
||||
args: ["(?i)\\b(?:[SE]\\d{1,4}){1,2}\\b\\s?", ""]
|
||||
|
||||
rows:
|
||||
selector: tr:has(a[href^="./download/file.php?id="])
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: a[href^="./viewforum.php?f="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: f
|
||||
title:
|
||||
selector: a.topictitle
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["(\\([\\p{IsCyrillic}\\W]+\\))|(^[\\p{IsCyrillic}\\W\\d]+\\/ )|([\\p{IsCyrillic} \\-]+,+)|([\\p{IsCyrillic}]+)", "{{ if .Config.stripcyrillic }}{{ else }}$1$2$3$4{{ end }}"]
|
||||
- name: append
|
||||
args: "{{ if .Config.addrussiantotitle }} RUS{{ else }}{{ end }}"
|
||||
details:
|
||||
selector: a.topictitle
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href^="./download/file.php?id="]
|
||||
attribute: href
|
||||
size:
|
||||
selector: p b
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["ТБ", "TB"]
|
||||
- name: replace
|
||||
args: ["ГБ", "GB"]
|
||||
- name: replace
|
||||
args: ["МБ", "MB"]
|
||||
- name: replace
|
||||
args: ["КБ", "KB"]
|
||||
seeders:
|
||||
selector: span.seed
|
||||
leechers:
|
||||
selector: span.leech
|
||||
grabs:
|
||||
selector: span.complet
|
||||
optional: true
|
||||
date_today:
|
||||
# Сегодня, 09:09
|
||||
# Вчера, 22:47
|
||||
selector: td:nth-last-child(1) p:contains("Сегодня"), td:nth-last-child(1) p:contains("Вчера")
|
||||
optional: true
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["Сегодня", "Today"]
|
||||
- name: replace
|
||||
args: ["Вчера", "Yesterday"]
|
||||
- name: fuzzytime
|
||||
date_year:
|
||||
# 12 янв 2019, 11:26
|
||||
selector: td:nth-last-child(1) p:not(:contains("Сегодня")), td:nth-last-child(1) p:not(:contains("Вчера"))
|
||||
# auto adjusted by site account profile
|
||||
optional: true
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["янв", "Jan"]
|
||||
- name: replace
|
||||
args: ["фев", "Feb"]
|
||||
- name: replace
|
||||
args: ["мар", "Mar"]
|
||||
- name: replace
|
||||
args: ["апр", "Apr"]
|
||||
- name: replace
|
||||
args: ["май", "May"]
|
||||
- name: replace
|
||||
args: ["июн", "Jun"]
|
||||
- name: replace
|
||||
args: ["июл", "Jul"]
|
||||
- name: replace
|
||||
args: ["авг", "Aug"]
|
||||
- name: replace
|
||||
args: ["сен", "Sep"]
|
||||
- name: replace
|
||||
args: ["окт", "Oct"]
|
||||
- name: replace
|
||||
args: ["ноя", "Nov"]
|
||||
- name: replace
|
||||
args: ["дек", "Dec"]
|
||||
- name: append
|
||||
args: " +03:00" # MSK
|
||||
- name: dateparse
|
||||
args: "dd MMM yyyy, HH:mm zzz"
|
||||
date:
|
||||
text: "{{ if or .Result.date_today .Result.date_year }}{{ or .Result.date_today .Result.date_year }}{{ else }}now{{ end }}"
|
||||
downloadvolumefactor:
|
||||
text: 0
|
||||
uploadvolumefactor:
|
||||
text: 1
|
||||
description:
|
||||
selector: td:nth-last-child(5)
|
||||
remove: a, b, p, span
|
||||
# ppkBB3cker v.2 (phpBB)
|
||||
@@ -0,0 +1,164 @@
|
||||
---
|
||||
id: animetosho-xyz
|
||||
name: Anime Tosho
|
||||
description: "Anime Tosho is a Semi-Private Torrent Tracker for ANIME"
|
||||
language: en-US
|
||||
type: semi-private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://animetosho.xyz/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: Anime, cat: TV/Anime, desc: "Anime"}
|
||||
# all results are currently returned as both 5070 & 2020
|
||||
# # from https://feed.animetosho.xyz/api/torznab?t=caps&apikey=YOUR-API-KEY
|
||||
# - {id: 5070, cat: TV/Anime, desc: "Anime (TV)"}
|
||||
# - {id: 2020, cat: Movies/Other, desc: "Anime (Movies)"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
|
||||
settings:
|
||||
- name: apikey
|
||||
type: text
|
||||
label: API Key
|
||||
- name: info_key
|
||||
type: info
|
||||
label: About your API key
|
||||
default: "You can find or generate a new API Key by accessing the <a href=\"https://animetosho.xyz/profile\" target=\"_blank\">Anime Tosho profile</a> page."
|
||||
- name: apiurl
|
||||
label: API URL
|
||||
type: text
|
||||
default: feed.animetosho.xyz
|
||||
- name: sonarr_compatibility
|
||||
type: checkbox
|
||||
label: Improve Sonarr compatibility by trying to add Season information into Release Titles
|
||||
default: false
|
||||
- name: strip_s01
|
||||
type: checkbox
|
||||
label: Remove first season keywords (S1/S01/Season 1), as some results do not include this for first/single season releases
|
||||
default: false
|
||||
- name: radarr_compatibility
|
||||
type: checkbox
|
||||
label: Improve Radarr compatibility by removing year information from keywords and adding it to Release Titles
|
||||
default: false
|
||||
|
||||
login:
|
||||
# returns "401 Unauthorized, check your credentials" if apikey is invalid
|
||||
path: "https://{{ .Config.apiurl }}/api/torznab"
|
||||
method: get
|
||||
inputs:
|
||||
apikey: "{{ .Config.apikey }}"
|
||||
t: search
|
||||
limit: 1
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: "https://{{ .Config.apiurl }}/api/torznab"
|
||||
response:
|
||||
type: xml
|
||||
|
||||
inputs:
|
||||
apikey: "{{ .Config.apikey }}"
|
||||
t: "{{ if .Keywords }}{{ .Query.Type }}{{ else }}search{{ end }}"
|
||||
q: "{{ .Keywords }}"
|
||||
# all results are currently returned as both 5070 & 2020
|
||||
# cat: "{{ join .Categories \",\" }}"
|
||||
season: "{{ .Query.Season }}"
|
||||
ep: "{{ .Query.Ep }}"
|
||||
limit: 100
|
||||
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
args: [" *\\b((?:19|20)\\d{2})\\b", "{{ if .Config.radarr_compatibility }}{{ else }} $1{{ end }}"]
|
||||
- name: re_replace
|
||||
args: ["(?i) *\\b(S(?:0|eason *)?1)\\b", "{{ if .Config.strip_s01 }}{{ else }} $1{{ end }}"]
|
||||
|
||||
rows:
|
||||
selector: rss > channel > item
|
||||
|
||||
fields:
|
||||
category:
|
||||
text: Anime
|
||||
title_keyword_year:
|
||||
text: "{{ .Query.Keywords }}"
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "\\b((19|20)\\d{2})\\b"
|
||||
title_default:
|
||||
selector: title
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["^(\\[.+?\\] ?)?(\\[.+?\\] ?)?(.+?)(\\[)", "$1$2$3{{ if and (.Config.radarr_compatibility) (.Result.title_keyword_year) }} {{ .Result.title_keyword_year }} $4{{ else }}$4{{ end }}"]
|
||||
title_has_season:
|
||||
text: "{{ .Result.title_default }}"
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "(?i)(S\\d{1,3}([Ev]\\d+)?)"
|
||||
- name: append
|
||||
args: "NULL"
|
||||
title_has_episode:
|
||||
text: "{{ .Result.title_default }}"
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "\\b(.+? - ?)(\\d+([-v]\\d+)?) ([\\[\\(])\\b"
|
||||
- name: append
|
||||
args: "NULL"
|
||||
title_has_movie_ova:
|
||||
text: "{{ .Result.title_default }}"
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "(?i)(?<![A-Za-z0-9])(Movies?|OVA|OAV)(?![A-Za-z0-9])"
|
||||
- name: re_replace
|
||||
args: ["(?i)(Movies?|OVA|OAV)", "YES"]
|
||||
title_optional:
|
||||
text: "{{ .Result.title_default }}"
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["^(\\[.+?].+?)\\s*(?<![\\]\\)])((?:\\[|\\(| - ).+)", "{{ if and (ne .Result.title_has_movie_ova \"YES\") (and (eq .Result.title_has_season \"NULL\") (eq .Result.title_has_episode \"NULL\")) }}$1 S01 $2{{ else }}$1 $2{{ end }}"]
|
||||
title_live_action:
|
||||
text: "{{ .Result.title_optional }}"
|
||||
filters:
|
||||
# Insert S01 after year for Live Action titles without season/episode info
|
||||
# e.g. Hotel.del.Luna.2019.1080p... -> Hotel.del.Luna.2019.S01.1080p...
|
||||
- name: re_replace
|
||||
args: ["^(.+?)([\\. ])((?:19|20)\\d{2})([\\. ])(.+)$", "{{ if and (eq .Result.title_has_season \"NULL\") (eq .Result.title_has_episode \"NULL\") }}$1$2$3$4S01$4$5{{ else }}$1$2$3$4$5{{ end }}"]
|
||||
# Insert S01 before resolution for Live Action titles without year or season info
|
||||
# e.g. Hotel Del Luna 720p HDTV... -> Hotel Del Luna S01 720p HDTV...
|
||||
- name: re_replace
|
||||
args: ["^(?!.*(?:19|20)\\d{2})(.+?)([\\. ])((?:480|720|1080|2160)[pi])(.*)$", "{{ if and (eq .Result.title_has_season \"NULL\") (eq .Result.title_has_episode \"NULL\") }}$1$2S01$2$3$4{{ else }}$1$2$3$4{{ end }}"]
|
||||
title:
|
||||
text: "{{ if .Config.sonarr_compatibility }}{{ .Result.title_live_action }}{{ else }}{{ .Result.title_default }}{{ end }}"
|
||||
details:
|
||||
selector: link
|
||||
download:
|
||||
selector: enclosure
|
||||
attribute: url
|
||||
infohash:
|
||||
selector: "[name=infohash]"
|
||||
attribute: value
|
||||
date:
|
||||
# Sun, 18 Jan 2026 04:05:41 +0000
|
||||
selector: pubDate
|
||||
filters:
|
||||
- name: dateparse
|
||||
args: "ddd, dd MMM yyyy HH:mm:ss zzz"
|
||||
size:
|
||||
selector: "[name=size]"
|
||||
attribute: value
|
||||
seeders:
|
||||
selector: "[name=seeders]"
|
||||
attribute: value
|
||||
leechers:
|
||||
selector: "[name=leechers]"
|
||||
attribute: value
|
||||
downloadvolumefactor:
|
||||
text: 0
|
||||
uploadvolumefactor:
|
||||
text: 1
|
||||
description:
|
||||
selector: title
|
||||
# torznab xml
|
||||
@@ -0,0 +1,134 @@
|
||||
---
|
||||
id: bluetorrents
|
||||
name: BlueTorrents
|
||||
description: "BlueTorrents is a Private Torrent Tracker for MOVIES / TV / MUSIC / GENERAL"
|
||||
language: en-US
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://bluetorrents.com/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
# from https://bluetorrents.com/api/external?apikey=YOUR-API-KEY&t=caps
|
||||
- {id: 2000, cat: Movies, desc: "Movies"}
|
||||
- {id: 5000, cat: TV, desc: "TV Shows"}
|
||||
- {id: 1000, cat: Console, desc: "Games"}
|
||||
- {id: 3000, cat: Audio, desc: "Music"}
|
||||
- {id: 4000, cat: PC/0day, desc: "Apps"}
|
||||
- {id: 6000, cat: XXX, desc: "XXX"}
|
||||
- {id: 8000, cat: Other, desc: "Other"}
|
||||
- {id: 7000, cat: Books, desc: "Books"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid]
|
||||
movie-search: [q, tmdbid]
|
||||
music-search: [q]
|
||||
book-search: [q]
|
||||
allowtvsearchimdb: true
|
||||
|
||||
settings:
|
||||
- name: apikey
|
||||
type: text
|
||||
label: API Key
|
||||
- name: info_key
|
||||
type: info
|
||||
label: About your API key
|
||||
default: "You can find your API Key by accessing the <a href=\"https://bluetorrents.com/settings\" target=\"_blank\">BlueTorrents Settings</a> page, and scrolling down to the <b>API keys</b> section."
|
||||
- name: info_3x
|
||||
type: info
|
||||
label: Including 3X
|
||||
default: "IF you want to see 3x torrents access your <a href=\"https://bluetorrents.com/settings\" target=\"_blank\">BlueTorrents Settings</a> page and tick the <b>Show NSFW content</b> checkbox."
|
||||
- name: info_activity
|
||||
type: info
|
||||
label: Account Inactivity
|
||||
default: "Accounts with no activity for 90+ days may be disabled."
|
||||
|
||||
login:
|
||||
path: api/external
|
||||
method: get
|
||||
inputs:
|
||||
t: search
|
||||
apikey: "{{ .Config.apikey }}"
|
||||
limit: 1
|
||||
error:
|
||||
- selector: error
|
||||
message:
|
||||
selector: error[description]
|
||||
attribute: description
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: api/external
|
||||
response:
|
||||
type: xml
|
||||
|
||||
inputs:
|
||||
apikey: "{{ .Config.apikey }}"
|
||||
t: "{{ if .Query.TMDBID }}movie{{ else }}{{ end }}{{ if or .Query.Season .Query.Ep }}tvsearch{{ else }}{{ end }}{{ if or .Query.IMDBID .Query.TMDBID .Query.Season .Query.Ep }}{{ else }}search{{ end }}"
|
||||
q: "{{ .Keywords }}"
|
||||
cat: "{{ join .Categories \",\" }}"
|
||||
season: "{{ .Query.Season }}"
|
||||
ep: "{{ .Query.Ep }}"
|
||||
imdbid: "{{ .Query.IMDBID }}"
|
||||
tmdbid: "{{ .Query.TMDBID }}"
|
||||
limit: 100
|
||||
|
||||
keywordsfilters:
|
||||
# replace spaces between words with percent wildcard
|
||||
- name: re_replace
|
||||
args: ["\\W+", "%"]
|
||||
|
||||
rows:
|
||||
selector: rss > channel > item
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: "[name=category]"
|
||||
attribute: value
|
||||
title:
|
||||
selector: title
|
||||
details:
|
||||
selector: link
|
||||
download:
|
||||
selector: enclosure
|
||||
attribute: url
|
||||
infohash:
|
||||
selector: "[name=infohash]"
|
||||
attribute: value
|
||||
imdbid:
|
||||
selector: "[name=imdbid]"
|
||||
attribute: value
|
||||
tmdbid:
|
||||
selector: "[name=tmdbid]"
|
||||
attribute: value
|
||||
date:
|
||||
# Sun, 08 Feb 2026 03:32:24 -0800
|
||||
selector: pubDate
|
||||
filters:
|
||||
- name: dateparse
|
||||
args: "ddd, dd MMM yyyy HH:mm:ss zzz"
|
||||
size:
|
||||
selector: size
|
||||
seeders:
|
||||
selector: "[name=seeders]"
|
||||
attribute: value
|
||||
leechers:
|
||||
selector: "[name=peers]"
|
||||
attribute: value
|
||||
grabs:
|
||||
selector: "[name=grabs]"
|
||||
attribute: value
|
||||
downloadvolumefactor:
|
||||
selector: "[name=downloadvolumefactor]"
|
||||
attribute: value
|
||||
uploadvolumefactor:
|
||||
selector: "[name=uploadvolumefactor]"
|
||||
attribute: value
|
||||
minimumratio:
|
||||
text: 1.0
|
||||
minimumseedtime:
|
||||
# 3 days (as seconds = 3 x 24 x 60 x 60)
|
||||
text: 259200
|
||||
# torznab xml
|
||||
@@ -0,0 +1,168 @@
|
||||
---
|
||||
id: crazyspirits-api
|
||||
name: CrazySpirits (API)
|
||||
description: "Crazy Spirits is a FRENCH Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
language: fr-FR
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
requestDelay: 5
|
||||
links:
|
||||
- https://crazyspirits.com/
|
||||
legacylinks:
|
||||
- https://www.crazyspirits.ca/
|
||||
- https://www.crazyspirits.com/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
# from https://crazyspirits.com/feed.php?t=caps&apikey=YOUR-PASSKEY
|
||||
- {id: 2000, cat: Movies, desc: "Movies"}
|
||||
- {id: 2010, cat: Movies/Foreign, desc: "Movies/Foreign"}
|
||||
- {id: 2020, cat: Movies/Other, desc: "Movies/Other"}
|
||||
- {id: 2030, cat: Movies/SD, desc: "Movies/SD"}
|
||||
- {id: 2040, cat: Movies/HD, desc: "Movies/HD"}
|
||||
- {id: 2045, cat: Movies/UHD, desc: "Movies/UHD"}
|
||||
- {id: 5000, cat: TV, desc: "TV"}
|
||||
- {id: 5030, cat: TV/SD, desc: "TV/SD"}
|
||||
- {id: 5040, cat: TV/HD, desc: "TV/HD"}
|
||||
- {id: 5045, cat: TV/UHD, desc: "TV/UHD"}
|
||||
- {id: 3000, cat: Audio, desc: "Audio"}
|
||||
- {id: 3010, cat: Audio/MP3, desc: "Audio/MP3"}
|
||||
- {id: 3040, cat: Audio/Lossless, desc: "Audio/Lossless"}
|
||||
- {id: 4000, cat: PC, desc: "PC"}
|
||||
- {id: 4010, cat: PC/0day, desc: "PC/0day"}
|
||||
- {id: 4030, cat: PC/Games, desc: "PC/Games"}
|
||||
- {id: 8000, cat: Other, desc: "Other"}
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q, imdbid]
|
||||
music-search: [q]
|
||||
|
||||
settings:
|
||||
- name: passkey
|
||||
type: text
|
||||
label: PassKey
|
||||
- name: info_key
|
||||
type: info
|
||||
label: About your PassKey
|
||||
default: "You can find the API PassKey by accessing <a href=\"https://crazyspirits.com/apps.php\" target=\"_blank\">CrazySpirits apps</a> page and scrolling down to <b>Votre API Key (Passkey)</b>."
|
||||
- name: multilang
|
||||
type: checkbox
|
||||
label: Replace MULTi by another language in release name
|
||||
default: false
|
||||
- name: multilanguage
|
||||
type: select
|
||||
label: Replace MULTi by this language
|
||||
default: FRENCH
|
||||
options:
|
||||
FRENCH: FRENCH
|
||||
MULTi.FRENCH: MULTi.FRENCH
|
||||
ENGLISH: ENGLISH
|
||||
MULTi.ENGLISH: MULTi.ENGLISH
|
||||
VOSTFR: VOSTFR
|
||||
MULTi.VOSTFR: MULTi.VOSTFR
|
||||
- name: vostfr
|
||||
type: checkbox
|
||||
label: Replace VOSTFR and SUBFRENCH with ENGLISH
|
||||
default: false
|
||||
|
||||
login:
|
||||
path: feed.php
|
||||
method: get
|
||||
inputs:
|
||||
t: search
|
||||
apikey: "{{ .Config.passkey }}"
|
||||
limit: 1
|
||||
error:
|
||||
- selector: error
|
||||
message:
|
||||
selector: error[description]
|
||||
attribute: description
|
||||
|
||||
search:
|
||||
paths:
|
||||
# docs at https://crazyspirits.com/apps.php
|
||||
- path: feed.php
|
||||
response:
|
||||
type: xml
|
||||
|
||||
inputs:
|
||||
apikey: "{{ .Config.passkey }}"
|
||||
t: "{{ .Query.Type }}"
|
||||
q: "{{ .Keywords }}"
|
||||
cat: "{{ join .Categories \",\" }}"
|
||||
season: "{{ .Query.Season }}"
|
||||
ep: "{{ .Query.Ep }}"
|
||||
imdbid: "{{ .Query.IMDBID }}"
|
||||
limit: 100
|
||||
|
||||
rows:
|
||||
selector: rss > channel > item
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: "[name=category]"
|
||||
attribute: value
|
||||
title_phase1:
|
||||
selector: title
|
||||
title_vostfr:
|
||||
text: "{{ .Result.title_phase1 }}"
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["(?i)\\b(vostfr|subfrench)\\b", "ENGLISH"]
|
||||
title_phase2:
|
||||
text: "{{ if .Config.vostfr }}{{ .Result.title_vostfr }}{{ else }}{{ .Result.title_phase1 }}{{ end }}"
|
||||
title_multilang:
|
||||
text: "{{ .Result.title_phase2 }}"
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["(?i)\\b(MULTI(?!.*(?:FRENCH|ENGLISH|VOSTFR|VF2|VFF|VFQ|VOQ|VFI|VOF)))\\b", "{{ .Config.multilanguage }}"]
|
||||
title:
|
||||
text: "{{ if .Config.multilang }}{{ .Result.title_multilang }}{{ else }}{{ .Result.title_phase2 }}{{ end }}"
|
||||
details:
|
||||
selector: comments
|
||||
download:
|
||||
selector: enclosure
|
||||
attribute: url
|
||||
infohash:
|
||||
selector: "[name=infohash]"
|
||||
attribute: value
|
||||
imdbid:
|
||||
selector: "[name=imdbid]"
|
||||
attribute: value
|
||||
tmdbid:
|
||||
selector: "[name=tmdbid]"
|
||||
attribute: value
|
||||
tvdbid:
|
||||
selector: "[name=tvdbid]"
|
||||
attribute: value
|
||||
date:
|
||||
# Tue, 31 Mar 2026 20:06:13 +0100
|
||||
selector: pubDate
|
||||
filters:
|
||||
- name: dateparse
|
||||
args: "ddd, dd MMM yyyy HH:mm:ss zzz"
|
||||
size:
|
||||
selector: "[name=size]"
|
||||
attribute: value
|
||||
seeders:
|
||||
selector: "[name=seeders]"
|
||||
attribute: value
|
||||
leechers:
|
||||
selector: "[name=peers]"
|
||||
attribute: value
|
||||
grabs:
|
||||
selector: "[name=grabs]"
|
||||
attribute: value
|
||||
downloadvolumefactor:
|
||||
selector: "[name=downloadvolumefactor]"
|
||||
attribute: value
|
||||
uploadvolumefactor:
|
||||
selector: "[name=uploadvolumefactor]"
|
||||
attribute: value
|
||||
minimumratio:
|
||||
text: 1.0
|
||||
minimumseedtime:
|
||||
# 2 day (as seconds = 2 x 24 x 60 x 60)
|
||||
text: 172800
|
||||
# torznab xml
|
||||
@@ -0,0 +1,155 @@
|
||||
---
|
||||
id: crnaberza2fa
|
||||
name: CrnaBerza2FA
|
||||
description: "CrnaBerza is a BALKAN Private Torrent Tracker for MOVIES / TV / GENERAL. This indexer uses cookie login for 2FA."
|
||||
language: sr-SP
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://www.crnaberza.com/
|
||||
legacylinks:
|
||||
- http://www.crnaberza.com/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 64, cat: Movies/HD, desc: "HD Boxset"}
|
||||
- {id: 80, cat: TV, desc: "Paketi"}
|
||||
- {id: 62, cat: TV/SD, desc: "SD Boxset"}
|
||||
- {id: 58, cat: Audio/Lossless, desc: "Lossless/Domaće"}
|
||||
- {id: 5, cat: Audio/MP3, desc: "MP3/Domaća"}
|
||||
- {id: 83, cat: Movies/BluRay, desc: "Film/BluRay Domaće"}
|
||||
- {id: 84, cat: Movies/BluRay, desc: "Film/Digitalno Restaurisani"}
|
||||
- {id: 52, cat: Movies/DVD, desc: "Film/DVD Domaće"}
|
||||
- {id: 73, cat: Movies/HD, desc: "Film/HD Domaće"}
|
||||
- {id: 29, cat: Movies/SD, desc: "Film/SD Domaće"}
|
||||
- {id: 79, cat: PC/Mobile-Android, desc: "Android"}
|
||||
- {id: 61, cat: Movies/HD, desc: "HD Mešano"}
|
||||
- {id: 50, cat: PC/Games, desc: "Igre"}
|
||||
- {id: 44, cat: Books, desc: "Knjige"}
|
||||
- {id: 46, cat: Audio, desc: "Koncerti"}
|
||||
- {id: 49, cat: PC, desc: "Programi"}
|
||||
- {id: 38, cat: TV/Sport, desc: "Sport"}
|
||||
- {id: 39, cat: Audio/Video, desc: "Spotovi DVD"}
|
||||
- {id: 45, cat: Books/Comics, desc: "Stripovi"}
|
||||
- {id: 28, cat: Other, desc: "Svastara"}
|
||||
- {id: 78, cat: TV/Other, desc: "TV/ostalo"}
|
||||
- {id: 59, cat: Audio/Lossless, desc: "Lossless/Strano"}
|
||||
- {id: 57, cat: Audio/MP3, desc: "MP3/Strano"}
|
||||
- {id: 65, cat: Movies/3D, desc: "3D Film"}
|
||||
- {id: 82, cat: Movies/UHD, desc: "4K video"}
|
||||
- {id: 37, cat: Movies, desc: "Deca"}
|
||||
- {id: 43, cat: TV/Documentary, desc: "Dokumentarci"}
|
||||
- {id: 20, cat: Movies/DVD, desc: "Film/DVD Strano"}
|
||||
- {id: 48, cat: Movies/HD, desc: "Film/HD Strano"}
|
||||
- {id: 54, cat: Movies/SD, desc: "Film/SD Strano"}
|
||||
- {id: 75, cat: TV/HD, desc: "TV/HD Domaće"}
|
||||
- {id: 30, cat: TV/SD, desc: "TV/SD Domaće"}
|
||||
- {id: 77, cat: TV/HD, desc: "TV/HD Strano"}
|
||||
- {id: 34, cat: TV/SD, desc: "TV/SD Strano"}
|
||||
- {id: 60, cat: XXX, desc: "XXX/Domace"}
|
||||
- {id: 63, cat: XXX, desc: "XXX/Strano"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
music-search: [q]
|
||||
book-search: [q]
|
||||
|
||||
settings:
|
||||
- name: cookie
|
||||
type: text
|
||||
label: Cookie
|
||||
- name: info_cookie
|
||||
type: info_cookie
|
||||
- name: info
|
||||
type: info
|
||||
label: Results Per Page
|
||||
default: For best results, change the 'Torrenata po stranici' setting to 50 on your 'Torrenti' from the 'Podešavanja naloga' menu on the CrnaBerza webpage.
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Filter freeleech only
|
||||
default: false
|
||||
- name: sort2
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
default: added
|
||||
options:
|
||||
added: created
|
||||
seeders: seeders
|
||||
size: size
|
||||
name: title
|
||||
- name: type
|
||||
type: select
|
||||
label: Order requested from site
|
||||
default: desc
|
||||
options:
|
||||
desc: desc
|
||||
asc: asc
|
||||
|
||||
login:
|
||||
# using cookie method because login page can present second page for 2FA when enabled
|
||||
method: cookie
|
||||
inputs:
|
||||
cookie: "{{ .Config.cookie }}"
|
||||
test:
|
||||
path: /
|
||||
selector: a[href*="wp-login.php?action=logout"]
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://uat.crnaberza.net/t/?category[]=83&category[]=84&category[]=52&category[]=73&category[]=29&search=
|
||||
- path: t/
|
||||
inputs:
|
||||
$raw: "{{ range .Categories }}category[]={{.}}&{{end}}"
|
||||
search: "{{ .Keywords }}"
|
||||
sort: "{{ .Config.sort2 }}"
|
||||
dir: "{{ .Config.type }}"
|
||||
# does not support searching imdbid and does not return imdb links
|
||||
|
||||
rows:
|
||||
selector: "table.min-w-full > tbody > tr:has(a[href*=\"/download/\"]){{ if .Config.freeleech }}:has(span.text-green-300:contains(\"Free Leech\")){{ else }}{{ end }}"
|
||||
|
||||
fields:
|
||||
categorydesc:
|
||||
selector: td:nth-of-type(1) img
|
||||
attribute: alt
|
||||
title:
|
||||
selector: a[href*="/td/"]
|
||||
details:
|
||||
selector: a[href*="/td/"]
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href*="/download/"]
|
||||
attribute: href
|
||||
date:
|
||||
# Jan 25 2026<br>05:59 PM
|
||||
selector: td:nth-of-type(4)
|
||||
# auto adjusted by site account profile
|
||||
filters:
|
||||
- name: dateparse
|
||||
args: "MMM d yyyy hh:mm tt"
|
||||
size:
|
||||
selector: td:nth-of-type(6)
|
||||
seeders:
|
||||
selector: td:nth-of-type(7)
|
||||
leechers:
|
||||
selector: td:nth-of-type(8)
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"span.text-green-300:contains(\"Free Leech\")": 0
|
||||
"span.text-blue-300:contains(\"½ Download\")": 0.5
|
||||
"*": 1
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
"span.text-purple-300:contains(\"x5 Upload\")": 5
|
||||
"span.text-purple-300:contains(\"x4 Upload\")": 4
|
||||
"span.text-purple-300:contains(\"x3 Upload\")": 3
|
||||
"span.text-purple-300:contains(\"x2 Upload\")": 2
|
||||
"*": 1
|
||||
minimumratio:
|
||||
text: 1.0
|
||||
minimumseedtime:
|
||||
# 7 day (as seconds = 7 x 24 x 60 x 60)
|
||||
text: 604800
|
||||
# WordPress 6.9.4
|
||||
@@ -0,0 +1,155 @@
|
||||
---
|
||||
id: cyclingarchiveclub
|
||||
name: CyclingArchiveClub
|
||||
description: "CyclingArchiveClub is a Private tracker for Professional road and Cyclocross racing VIDEOS"
|
||||
language: en-US
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://cyclingarchive.club/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 25, cat: TV, desc: "BMX"}
|
||||
- {id: 28, cat: TV, desc: "Cross"}
|
||||
- {id: 21, cat: TV/Documentary, desc: "Documentary"}
|
||||
- {id: 24, cat: TV, desc: "MTB"}
|
||||
- {id: 26, cat: TV, desc: "Real Life Video"}
|
||||
- {id: 22, cat: TV, desc: "Road"}
|
||||
- {id: 23, cat: TV, desc: "Track"}
|
||||
- {id: 27, cat: TV, desc: "Triathlon"}
|
||||
|
||||
modes:
|
||||
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: added
|
||||
options:
|
||||
added: created
|
||||
seeders: seeders
|
||||
size: size
|
||||
name: title
|
||||
- name: type
|
||||
type: select
|
||||
label: Order requested from site
|
||||
default: DESC
|
||||
options:
|
||||
DESC: desc
|
||||
ASC: asc
|
||||
|
||||
login:
|
||||
path: takelogin.php
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
error:
|
||||
- selector: td.embedded:contains("Login failed")
|
||||
message:
|
||||
selector: td.text
|
||||
test:
|
||||
path: index.php
|
||||
selector: a[href$="logout.php"]
|
||||
|
||||
download:
|
||||
selectors:
|
||||
# https://cyclingarchive.club/download.php?12345&a-title-goes-here-2026.torrent
|
||||
- selector: a[href*="download.php?"]
|
||||
attribute: href
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: browse.php
|
||||
inputs:
|
||||
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
|
||||
search: "{{ .Keywords }}"
|
||||
# 0 name, 1 descr, 2 both, 3 uploader
|
||||
_by: 0
|
||||
# 0 all formats, 10 FullHD, 11 720p, 3 SD, 6 Documents, 8 Subtitles, 9 x265, 2 ts raw streams, 1 DVD, 4 Old HD, 12 4K
|
||||
format: 0
|
||||
# 0 active & dead, 1 only active, 2 only dead
|
||||
incldead: 0
|
||||
# 0 all, 2 English, 6 Other, etc.
|
||||
language: 0
|
||||
freebrowse: "{{ if .Config.freeleech }}Free{{ else }}{{ end }}"
|
||||
sort: "{{ .Config.sort }}"
|
||||
d: "{{ .Config.type }}"
|
||||
|
||||
rows:
|
||||
selector: table[width="95%"] > tbody > tr.trhover
|
||||
|
||||
dateheaders:
|
||||
selector: ":has(td.ui-widget-header:contains(\"Torrents added\") > b)"
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["Torrents added ", ""]
|
||||
- name: dateparse
|
||||
args: "dddd dd MMM yyyy"
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: a[href*="browse.php?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
_type:
|
||||
selector: a[href*="browse.php?cat="]
|
||||
attribute: title
|
||||
_language:
|
||||
selector: td:nth-child(2) img
|
||||
attribute: title
|
||||
_format:
|
||||
selector: td:nth-child(3) img
|
||||
attribute: title
|
||||
title:
|
||||
selector: a[href*="details.php?hit="]
|
||||
details:
|
||||
selector: a[href*="details.php?hit="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["hit=1&", ""]
|
||||
download:
|
||||
selector: a[href*="details.php?hit="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["hit=1&", ""]
|
||||
files:
|
||||
selector: td:nth-child(6)
|
||||
size:
|
||||
selector: td:nth-child(9)
|
||||
filters:
|
||||
- name: regexp
|
||||
args: ^(.*?)B
|
||||
- name: append
|
||||
args: B
|
||||
grabs:
|
||||
selector: td:nth-child(9) > b
|
||||
seeders:
|
||||
selector: td:nth-child(10)
|
||||
leechers:
|
||||
selector: td:nth-child(11)
|
||||
description:
|
||||
text: " {{ .Result._type }} {{ .Result._language }} {{ .Result._format }}"
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
span:contains("Free"): 0
|
||||
"*": 1
|
||||
uploadvolumefactor:
|
||||
text: 1
|
||||
# TBdev (custom)
|
||||
@@ -0,0 +1,149 @@
|
||||
---
|
||||
id: czteam-api
|
||||
name: CZTeam (API)
|
||||
description: "CZTeam (CZT) is a ROMANIAN Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
language: ro-RO
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://czteam.me/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: XXX, desc: "XxX"}
|
||||
- {id: 4, cat: PC/ISO, desc: "Games/PC ISO"}
|
||||
- {id: 5, cat: TV/HD, desc: "TvEps/HD"}
|
||||
- {id: 6, cat: Audio, desc: "Music/Audio"}
|
||||
- {id: 7, cat: TV, desc: "TvEps"}
|
||||
- {id: 9, cat: PC/Mobile-Other, desc: "Mobile"}
|
||||
- {id: 12, cat: Console, desc: "Games/Consoles"}
|
||||
- {id: 19, cat: Movies/SD, desc: "Movies/XviD"}
|
||||
- {id: 20, cat: Movies/DVD, desc: "Movies/DVD-R"}
|
||||
- {id: 21, cat: PC/Games, desc: "Games/PC Rips"}
|
||||
- {id: 22, cat: PC, desc: "Software"}
|
||||
- {id: 23, cat: TV/Anime, desc: "Anime"}
|
||||
- {id: 24, cat: Other, desc: "Images"}
|
||||
- {id: 25, cat: Books, desc: "Docs"}
|
||||
- {id: 28, cat: Movies/DVD, desc: "Movies/DVD-RO"}
|
||||
- {id: 29, cat: Movies/HD, desc: "Movies/HD"}
|
||||
- {id: 30, cat: Audio/Video, desc: "Music/MVID"}
|
||||
- {id: 31, cat: PC/Mac, desc: "MAC"}
|
||||
- {id: 32, cat: TV/Sport, desc: "Sports"}
|
||||
- {id: 33, cat: Movies/HD, desc: "Movies/HDTV-RO"}
|
||||
- {id: 34, cat: TV/HD, desc: "TvEps/HD-RO"}
|
||||
- {id: 35, cat: Audio/Lossless, desc: "Music/Lossless"}
|
||||
- {id: 36, cat: Movies/BluRay, desc: "Full BluRay-RO"}
|
||||
- {id: 37, cat: Movies/3D, desc: "Movies/3D"}
|
||||
- {id: 38, cat: Movies, desc: "Movies-RO"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid]
|
||||
movie-search: [q, imdbid]
|
||||
music-search: [q]
|
||||
book-search: [q]
|
||||
|
||||
settings:
|
||||
- name: passkey
|
||||
type: text
|
||||
label: Passkey
|
||||
- name: info_passkey
|
||||
type: info
|
||||
label: About your Passkey
|
||||
default: "Find your passkey by accessing your <a href=\"https://czteam.me/my.php\" target=\"_blank\">CZTeam profile</a> and scrolling down to the Passkey section."
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
|
||||
login:
|
||||
# Validate the credentials by hitting the cheapest endpoint that requires
|
||||
# them. /api.php?action=latest-torrents&limit=1 returns 200 + JSON when the
|
||||
# passkey is right and 401/403 otherwise.
|
||||
path: api.php
|
||||
method: get
|
||||
inputs:
|
||||
action: latest-torrents
|
||||
passkey: "{{ .Config.passkey }}"
|
||||
limit: 1
|
||||
error:
|
||||
- selector: ":root:contains(\"error\")"
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: api.php
|
||||
response:
|
||||
type: json
|
||||
noResultsMessage: ""
|
||||
|
||||
inputs:
|
||||
action: search-torrents
|
||||
passkey: "{{ .Config.passkey }}"
|
||||
type: "{{ if .Query.IMDBID }}imdb{{ else }}name{{ end }}"
|
||||
query: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{ else }}{{ .Keywords }}{{ end }}"
|
||||
name: "{{ if .Query.IMDBID }}{{ .Keywords }}{{ else }}{{ end }}"
|
||||
season: "{{ .Query.Season }}"
|
||||
episode: "{{ .Query.Ep }}"
|
||||
category: "{{ range .Categories }}{{.}},{{end}}"
|
||||
freeleech: "{{ if .Config.freeleech }}1{{ else }}{{ end }}"
|
||||
limit: 100
|
||||
# 1 name, 2 desc, 3 both, 4 genre
|
||||
tip: 1
|
||||
|
||||
rows:
|
||||
selector: $
|
||||
|
||||
fields:
|
||||
title:
|
||||
selector: name
|
||||
details:
|
||||
selector: url
|
||||
download:
|
||||
selector: download_link
|
||||
category:
|
||||
selector: category_id
|
||||
imdbid:
|
||||
selector: imdb
|
||||
seeders:
|
||||
selector: seeders
|
||||
leechers:
|
||||
selector: leechers
|
||||
grabs:
|
||||
selector: times_completed
|
||||
files:
|
||||
selector: files
|
||||
size:
|
||||
selector: size
|
||||
date:
|
||||
# api.php returns "2026-05-09 18:57:50" (server time, Europe/Bucharest)
|
||||
selector: upload_date
|
||||
filters:
|
||||
- name: append
|
||||
args: " +03:00" # EEST (Bucharest, summer)
|
||||
- name: dateparse
|
||||
args: "yyyy-MM-dd HH:mm:ss zzz"
|
||||
downloadvolumefactor:
|
||||
# api returns 0=false, 1=true
|
||||
selector: freeleech
|
||||
case:
|
||||
0: 1 # not free
|
||||
1: 0 # freeleech
|
||||
uploadvolumefactor:
|
||||
# api returns 0=false, 1=true
|
||||
selector: doubleup
|
||||
case:
|
||||
0: 1 # not double
|
||||
1: 2 # double upload
|
||||
genre:
|
||||
selector: tags
|
||||
_internal:
|
||||
selector: internal
|
||||
case:
|
||||
0: "{{ .False }}"
|
||||
1: "{{ .True }}"
|
||||
description:
|
||||
text: "{{ if .Result._internal }}Internal{{ else }}{{ end }}{{ if and .Result._internal .Result.genre }} | {{ else }}{{ end }}{{ .Result.genre }}"
|
||||
minimumseedtime:
|
||||
# 3 days (as seconds = 3 x 24 x 60 x 60)
|
||||
text: 259200
|
||||
# json czteam-api 2026-05-09
|
||||
@@ -0,0 +1,198 @@
|
||||
---
|
||||
id: danishbits-api
|
||||
name: DanishBits (API)
|
||||
description: "DanishBits is a Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
language: en-US
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://danishbits.me/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: Movies, desc: "Movies"}
|
||||
- {id: 2, cat: TV, desc: "TV"}
|
||||
- {id: 3, cat: Audio/Audiobook, desc: "Lydbog (Audiobook)"}
|
||||
- {id: 9, cat: XXX, desc: "XXX"}
|
||||
- {id: 4, cat: Audio/Other, desc: "Podcast"}
|
||||
- {id: 5, cat: Audio, desc: "Musik"}
|
||||
- {id: 6, cat: Console, desc: "Spil (Games)"}
|
||||
- {id: 7, cat: PC, desc: "Apps"}
|
||||
- {id: 8, cat: Books/EBook, desc: "Ebooks"}
|
||||
- {id: 10, cat: Books/Mags, desc: "Blade & Magasiner (Mags)"}
|
||||
- {id: 11, cat: Other, desc: "Billeder (Pictures)"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid, tvdbid, tmdbid]
|
||||
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://danishbits.me/\" target=\"_blank\">DanishBits</a> account <i>My Settings</i> page and clicking on the <b>API Key</b> tab."
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: single_file_release_use_filename
|
||||
type: checkbox
|
||||
label: Use filename as title for single file releases
|
||||
default: true
|
||||
- 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
|
||||
error:
|
||||
- selector: a[href*="/login"]
|
||||
message:
|
||||
text: "The API key was not accepted by {{ .Config.sitelink }}."
|
||||
- selector: :root:contains("Account is Banned")
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://hdinnovations.github.io/UNIT3D/torrent_api.html
|
||||
# https://github.com/HDInnovations/UNIT3D/blob/master/app/Http/Controllers/API/TorrentController.php#L657
|
||||
- path: api/torrents/filter
|
||||
response:
|
||||
type: json
|
||||
|
||||
headers:
|
||||
Authorization: ["Bearer {{ .Config.apikey }}"]
|
||||
|
||||
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
|
||||
$raw: "{{ range .Categories }}&categories[]={{.}}{{end}}"
|
||||
name: "{{ .Keywords }}"
|
||||
seasonNumber: "{{ .Query.Season }}"
|
||||
episodeNumber: "{{ .Query.Ep }}"
|
||||
imdbId: "{{ .Query.IMDBIDShort }}"
|
||||
tmdbId: "{{ .Query.TMDBID }}"
|
||||
tvdbId: "{{ .Query.TVDBID }}"
|
||||
"free[]": "{{ if .Config.freeleech }}100{{ else }}{{ end }}"
|
||||
sortField: "{{ .Config.sort }}"
|
||||
sortDirection: "{{ .Config.type }}"
|
||||
perPage: 100
|
||||
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
args: ["\\.", " "]
|
||||
|
||||
rows:
|
||||
selector: data
|
||||
attribute: attributes
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: category_id
|
||||
title_optional:
|
||||
selector: name
|
||||
title_filename:
|
||||
selector: "files[0].name"
|
||||
optional: true
|
||||
files:
|
||||
selector: num_file
|
||||
title:
|
||||
text: "{{ if and (.Config.single_file_release_use_filename) (eq .Result.files \"1\") (.Result.title_filename) }}{{ .Result.title_filename }}{{ else }}{{ .Result.title_optional }}{{ end }}"
|
||||
details:
|
||||
selector: details_link
|
||||
download:
|
||||
selector: download_link
|
||||
poster:
|
||||
selector: meta.poster
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["https://via.placeholder.com/90x135", ""]
|
||||
imdbid:
|
||||
selector: imdb_id
|
||||
tmdbid:
|
||||
selector: tmdb_id
|
||||
tvdbid:
|
||||
selector: tvdb_id
|
||||
genre:
|
||||
selector: meta.genres
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["(?i)(Action og eventyr)", "Action_og_eventyr"]
|
||||
- name: re_replace
|
||||
args: ["(?i)(Sci-fi og Fantasy)", "Sci-fi_og_Fantasy"]
|
||||
- name: re_replace
|
||||
args: ["(?i)(TV film)", "TV_film"]
|
||||
- name: replace
|
||||
args: [" & ", "_&_"]
|
||||
_internal:
|
||||
selector: internal
|
||||
case:
|
||||
False: "{{ .False }}"
|
||||
True: "{{ .True }}"
|
||||
description:
|
||||
text: "{{ if .Result._internal }}Internal{{ else }}{{ end }}{{ if and .Result._internal .Result.genre }} | {{ else }}{{ end }}{{ .Result.genre }}"
|
||||
seeders:
|
||||
selector: seeders
|
||||
leechers:
|
||||
selector: leechers
|
||||
grabs:
|
||||
selector: times_completed
|
||||
date:
|
||||
# "created_at": "2021-10-18T00:34:50.000000Z" is returned by Newtonsoft.Json.Linq as 18/10/2021 00:34:50
|
||||
selector: created_at
|
||||
filters:
|
||||
- name: append
|
||||
args: " +00:00" # GMT
|
||||
- name: dateparse
|
||||
args: "MM/dd/yyyy HH:mm:ss zzz"
|
||||
size:
|
||||
selector: size
|
||||
_featured:
|
||||
selector: featured
|
||||
case:
|
||||
False: "{{ .False }}"
|
||||
True: "{{ .True }}"
|
||||
downloadvolumefactor_freeleech:
|
||||
# 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
|
||||
downloadvolumefactor:
|
||||
text: "{{ if .Result._featured }}0{{ else }}{{ .Result.downloadvolumefactor_freeleech }}{{ end }}"
|
||||
uploadvolumefactor_double_upload:
|
||||
# api returns False, True
|
||||
selector: double_upload
|
||||
case:
|
||||
False: 1 # normal
|
||||
True: 2 # double
|
||||
uploadvolumefactor:
|
||||
text: "{{ if .Result._featured }}2{{ else }}{{ .Result.uploadvolumefactor_double_upload }}{{ end }}"
|
||||
minimumratio:
|
||||
text: 1.0
|
||||
minimumseedtime:
|
||||
# 7 days (as seconds = 7 x 24 x 60 x 60)
|
||||
text: 604800
|
||||
# json UNIT3D 9.2.0
|
||||
@@ -0,0 +1,185 @@
|
||||
---
|
||||
id: daxiangjiao
|
||||
name: DaXiangJiao (大香蕉)
|
||||
description: "DaXiangJiao (大香蕉) is a CHINESE Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
language: zh-CN
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://pt.daxiangjiao.org/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 401, cat: Movies, desc: "Movies/电影", default: true}
|
||||
- {id: 402, cat: TV, desc: "TV Series/电视剧", default: true}
|
||||
- {id: 403, cat: TV, desc: "TV Shows/综艺", default: true}
|
||||
- {id: 404, cat: TV/Documentary, desc: "Documentaries/纪录片", default: true}
|
||||
- {id: 405, cat: TV/Other, desc: "Animations/动漫&动画", default: true}
|
||||
- {id: 406, cat: Audio/Video, desc: "Music Videos/音乐MV", default: true}
|
||||
- {id: 407, cat: TV/Sport, desc: "Sports/赛事", default: true}
|
||||
- {id: 408, cat: Audio, desc: "HQ Audio/音轨", default: true}
|
||||
- {id: 409, cat: Other/Misc, desc: "Misc/其他", default: true}
|
||||
- {id: 410, cat: Movies/Foreign, desc: "Japan and South Korea/日韩", default: false}
|
||||
- {id: 411, cat: TV, desc: "Domestic/国产", default: false}
|
||||
- {id: 412, cat: TV/Foreign, desc: "Europe and America/欧美", default: false}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
music-search: [q]
|
||||
book-search: [q]
|
||||
|
||||
settings:
|
||||
- name: cookie
|
||||
type: text
|
||||
label: Cookie
|
||||
- name: info_cookie
|
||||
type: info_cookie
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
default: 4
|
||||
options:
|
||||
4: created
|
||||
7: seeders
|
||||
5: size
|
||||
1: title
|
||||
- name: type
|
||||
type: select
|
||||
label: Order requested from site
|
||||
default: desc
|
||||
options:
|
||||
desc: desc
|
||||
asc: asc
|
||||
- name: info_tpp
|
||||
type: info
|
||||
label: Results Per Page
|
||||
default: For best results, change the <b>Torrents per page:</b> setting to <b>100</b> on your account profile.
|
||||
- name: info_activity
|
||||
type: info
|
||||
label: Account Inactivity
|
||||
default: "Cherish your user account. Inactive accounts would be deleted based on the following rules:<ol><li>Veteran User or above would never be deleted.</li><li>Elite User or above would never be deleted if parked (at User CP).</li><li>Parked accounts would be deleted if users have not logged in for more than 400 days in a row.</li><li>Unparked accounts would be deleted if users have not logged in for more than 150 days in a row.</li><li>Accounts with both uploaded and downloaded amount being 0 would be deleted if users have not logged in for more than 100 days in a row.</li></ol>"
|
||||
|
||||
login:
|
||||
# using cookie method because of #15893
|
||||
method: cookie
|
||||
inputs:
|
||||
cookie: "{{ .Config.cookie }}"
|
||||
test:
|
||||
path: index.php
|
||||
selector: a[href="logout.php"]
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: torrents.php
|
||||
categories: [401, 402, 403, 404, 405, 406, 407, 409]
|
||||
- path: special.php
|
||||
categories: [410, 411, 412]
|
||||
inputs:
|
||||
$raw: "{{ range .Categories }}cat{{.}}=1&{{end}}"
|
||||
search: "{{ .Keywords }}"
|
||||
# 0: include dead, 1: alive, 2: dead
|
||||
incldead: 0
|
||||
spstate: "{{ if .Config.freeleech }}2{{ else }}0{{ end }}"
|
||||
# 0: title, 1: description, 3: uploader, 4: imdburl (4 does not appear to work)
|
||||
search_area: 0
|
||||
# 0: AND, 2: exact
|
||||
search_mode: 0
|
||||
sort: "{{ .Config.sort }}"
|
||||
type: "{{ .Config.type }}"
|
||||
# Support in NexusPHP so bots don't pollute trending searches:
|
||||
notnewword: 1
|
||||
|
||||
rows:
|
||||
selector: table.torrents > tbody > tr:has(a[href^="download.php?id="])
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: a[href^="?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
title_default:
|
||||
selector: a[href^="details.php?id="]
|
||||
title:
|
||||
selector: a[title][href^="details.php?id="]
|
||||
attribute: title
|
||||
optional: true
|
||||
default: "{{ .Result.title_default }}"
|
||||
details:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href^="download.php?id="]
|
||||
attribute: href
|
||||
poster:
|
||||
selector: img[data-src]
|
||||
attribute: data-src
|
||||
# Users can change the "Time display type" in their tracker preferences:
|
||||
date_elapsed:
|
||||
# time type: time elapsed (default)
|
||||
selector: td:nth-child(4) > span[title]
|
||||
attribute: title
|
||||
optional: true
|
||||
filters:
|
||||
- name: append
|
||||
args: " +08:00" # CST
|
||||
- name: dateparse
|
||||
args: "yyyy-MM-dd HH:mm:ss zzz"
|
||||
date_added:
|
||||
# time added
|
||||
selector: td:nth-child(4):not(:has(span))
|
||||
optional: true
|
||||
filters:
|
||||
- name: append
|
||||
args: " +08:00" # CST
|
||||
- name: dateparse
|
||||
args: "yyyy-MM-ddHH:mm:ss zzz"
|
||||
date:
|
||||
text: "{{ if or .Result.date_elapsed .Result.date_added }}{{ or .Result.date_elapsed .Result.date_added }}{{ else }}now{{ end }}"
|
||||
size:
|
||||
selector: td:nth-child(5)
|
||||
optional: true
|
||||
default: 512MB
|
||||
seeders:
|
||||
selector: td:nth-child(6)
|
||||
optional: true
|
||||
default: 0
|
||||
leechers:
|
||||
selector: td:nth-child(7)
|
||||
optional: true
|
||||
default: 0
|
||||
grabs:
|
||||
selector: td:nth-child(8)
|
||||
optional: true
|
||||
default: 0
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img.pro_free: 0
|
||||
img.pro_free2up: 0
|
||||
img.pro_50pctdown: 0.5
|
||||
img.pro_50pctdown2up: 0.5
|
||||
img.pro_30pctdown: 0.3
|
||||
"*": 1
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
img.pro_50pctdown2up: 2
|
||||
img.pro_free2up: 2
|
||||
img.pro_2up: 2
|
||||
"*": 1
|
||||
description:
|
||||
selector: td:nth-child(2)
|
||||
remove: a, b, font, img, span
|
||||
# global MR is 0.8 but torrents must be seeded for 1 days regardless of ratio
|
||||
# minimumratio:
|
||||
# text: 0.8
|
||||
minimumseedtime:
|
||||
# 1 days (as seconds = 24 x 60 x 60)
|
||||
text: 86400
|
||||
# NexusPHP v1.10.2 2026-04-11
|
||||
@@ -0,0 +1,174 @@
|
||||
---
|
||||
id: depthstudio
|
||||
name: Depth Studio
|
||||
description: "Depth Studio is a CHINESE Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
language: zh-CN
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://dstudio.me/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 401, cat: Movies, desc: "电影-Movies"}
|
||||
- {id: 402, cat: TV, desc: "电视剧-TV Series"}
|
||||
- {id: 403, cat: TV, desc: "综艺-TV Shows"}
|
||||
- {id: 404, cat: TV/Documentary, desc: "纪录片-Documentaries"}
|
||||
- {id: 405, cat: TV/Anime, desc: "动漫-Animes"}
|
||||
- {id: 406, cat: Audio/Video, desc: "演唱会-Music Videos"}
|
||||
- {id: 407, cat: TV/Sport, desc: "体育节目-Sports"}
|
||||
- {id: 408, cat: Audio, desc: "音乐-Music"}
|
||||
- {id: 409, cat: Other, desc: "其他-Other"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid, doubanid]
|
||||
movie-search: [q, imdbid, doubanid]
|
||||
music-search: [q]
|
||||
|
||||
settings:
|
||||
- name: cookie
|
||||
type: text
|
||||
label: Cookie
|
||||
- name: info_cookie
|
||||
type: info_cookie
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
default: 4
|
||||
options:
|
||||
4: created
|
||||
7: seeders
|
||||
5: size
|
||||
1: title
|
||||
- name: type
|
||||
type: select
|
||||
label: Order requested from site
|
||||
default: desc
|
||||
options:
|
||||
desc: desc
|
||||
asc: asc
|
||||
- name: info_tpp
|
||||
type: info
|
||||
label: Results Per Page
|
||||
default: For best results, change the <b>Torrents per page:</b> setting to <b>100</b> on your account profile.
|
||||
- name: info_activity
|
||||
type: info
|
||||
label: Account Inactivity
|
||||
default: "Account retention rules:<ol><li>Veteran User and above will be retained forever</li><li>Elite User and above will not have their account deleted after parking (in the control panel)</li><li>Users with a parked account will be deleted if they do not log in for 100 consecutive days</li><li>Users with a non-parked account will be deleted if they do not log in for 60 consecutive days</li><li>Users who have no traffic (i.e. upload/download data are both 0) will be deleted if they do not log in for 60 consecutive days.</li></ol>"
|
||||
|
||||
login:
|
||||
# using cookie method because site does a JS call to API/Challenge via JQuery to load response parm required for takelogin.php
|
||||
method: cookie
|
||||
inputs:
|
||||
cookie: "{{ .Config.cookie }}"
|
||||
test:
|
||||
path: index.php
|
||||
selector: a[href="logout.php"]
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: torrents.php
|
||||
inputs:
|
||||
$raw: "{{ range .Categories }}cat{{.}}=1&{{end}}"
|
||||
search: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{ else }}{{ end }}{{ if and .Query.DoubanID (eq .Query.IMDBID .False) }}{{ .Query.DoubanID }}{{ else }}{{ end }}{{ if and (eq .Query.IMDBID .False) (eq .Query.DoubanID .False) }}{{ .Keywords }}{{ else }}{{ end }}"
|
||||
# 0 incldead, 1 active, 2 dead
|
||||
incldead: 0
|
||||
# 0 all, 1 normal, 2 free, 3 2x, 4 2xfree, 5 50%, 6 2x50%, 7 30%
|
||||
spstate: "{{ if .Config.freeleech }}2{{ else }}0{{ end }}"
|
||||
# 0 title, 1 descr, 3 uploader, 4 imdburl
|
||||
search_area: "{{ if .Query.IMDBID }}4{{ else }}{{ end }}{{ if and .Query.DoubanID (eq .Query.IMDBID .False) }}1{{ else }}{{ end }}{{ if and (eq .Query.IMDBID .False) (eq .Query.DoubanID .False) }}0{{ else }}{{ end }}"
|
||||
# 0 AND, 2 exact
|
||||
search_mode: 0
|
||||
sort: "{{ .Config.sort }}"
|
||||
type: "{{ .Config.type }}"
|
||||
notnewword: 1
|
||||
|
||||
rows:
|
||||
selector: table.torrents > tbody > tr:has(a[href^="download.php?id="])
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: a[href^="?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
title_default:
|
||||
selector: a[href^="details.php?id="]
|
||||
title:
|
||||
selector: a[title][href^="details.php?id="]
|
||||
attribute: title
|
||||
optional: true
|
||||
default: "{{ .Result.title_default }}"
|
||||
details:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href^="download.php?id="]
|
||||
attribute: href
|
||||
poster:
|
||||
selector: img[data-src]
|
||||
attribute: data-src
|
||||
imdbid:
|
||||
# site currently only has a badge and rating, the id is not present. just in case a future update.
|
||||
selector: a[href*="imdb.com/title/tt"]
|
||||
attribute: href
|
||||
doubanid:
|
||||
# site currently only has a badge and rating, the id is not present. just in case a future update.
|
||||
selector: a[href*="movie.douban.com/subject/"]
|
||||
attribute: href
|
||||
date_elapsed:
|
||||
# time type: time elapsed (default)
|
||||
selector: td:nth-child(4) > span[title]
|
||||
attribute: title
|
||||
optional: true
|
||||
filters:
|
||||
- name: append
|
||||
args: " +08:00" # CST
|
||||
- name: dateparse
|
||||
args: "yyyy-MM-dd HH:mm:ss zzz"
|
||||
date_added:
|
||||
# time added
|
||||
selector: td:nth-child(4):not(:has(span))
|
||||
optional: true
|
||||
filters:
|
||||
- name: append
|
||||
args: " +08:00" # CST
|
||||
- name: dateparse
|
||||
args: "yyyy-MM-ddHH:mm:ss zzz"
|
||||
date:
|
||||
text: "{{ if or .Result.date_elapsed .Result.date_added }}{{ or .Result.date_elapsed .Result.date_added }}{{ else }}now{{ end }}"
|
||||
size:
|
||||
selector: td:nth-child(5)
|
||||
seeders:
|
||||
selector: td:nth-child(6)
|
||||
leechers:
|
||||
selector: td:nth-child(7)
|
||||
grabs:
|
||||
selector: td:nth-child(8)
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img.pro_free: 0
|
||||
img.pro_free2up: 0
|
||||
img.pro_50pctdown: 0.5
|
||||
img.pro_50pctdown2up: 0.5
|
||||
img.pro_30pctdown: 0.3
|
||||
"*": 1
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
img.pro_50pctdown2up: 2
|
||||
img.pro_free2up: 2
|
||||
img.pro_2up: 2
|
||||
"*": 1
|
||||
minimumseedtime:
|
||||
# 2 days (as seconds = 2 x 24 x 60 x 60)
|
||||
text: 172800
|
||||
description:
|
||||
selector: td:nth-child(2)
|
||||
remove: a, b, font, img, span
|
||||
# NexusPHP v1.10.2 2026-04-11
|
||||
@@ -0,0 +1,175 @@
|
||||
---
|
||||
id: draupnirr
|
||||
replaces:
|
||||
- yggrasil
|
||||
name: Draupnirr
|
||||
description: "Draupnirr (Yggrasil) is a FRENCH Semi-Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
language: fr-FR
|
||||
type: semi-private
|
||||
encoding: UTF-8
|
||||
requestDelay: 0.5 # 120 requests per minute per API key
|
||||
links:
|
||||
- https://draupnirr.xyz/
|
||||
legacylinks:
|
||||
- https://yggrasil.xyz/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
# from https://draupnirr.xyz/torznab/api?t=caps&apikey=YOUR-API-KEY
|
||||
- {id: 1000, cat: Console, desc: "Consoles"}
|
||||
- {id: 2000, cat: Movies, desc: "Films"}
|
||||
- {id: 2030, cat: Movies/SD, desc: "Films SD"}
|
||||
- {id: 2040, cat: Movies/HD, desc: "Films HD"}
|
||||
- {id: 2045, cat: Movies/UHD, desc: "Films UHD"}
|
||||
- {id: 3000, cat: Audio, desc: "Musique"}
|
||||
- {id: 3030, cat: Audio/Audiobook, desc: "Livres audio"}
|
||||
- {id: 3040, cat: Audio/Lossless, desc: "Musique lossless"}
|
||||
- {id: 4000, cat: PC, desc: "Logiciels"}
|
||||
- {id: 4030, cat: PC/Mac, desc: "Logiciels macOS"}
|
||||
- {id: 4040, cat: PC/Mobile-Other, desc: "Logiciels mobiles"}
|
||||
- {id: 4050, cat: PC/Games, desc: "Jeux"}
|
||||
- {id: 5000, cat: TV, desc: "Séries"}
|
||||
- {id: 5030, cat: TV/SD, desc: "Séries SD"}
|
||||
- {id: 5040, cat: TV/HD, desc: "Séries HD"}
|
||||
- {id: 5045, cat: TV/UHD, desc: "Séries UHD"}
|
||||
- {id: 5060, cat: TV/Sport, desc: "Sport"}
|
||||
- {id: 5070, cat: TV/Anime, desc: "Animation"}
|
||||
- {id: 7000, cat: Books, desc: "Livres"}
|
||||
- {id: 7010, cat: Books/Mags, desc: "Presse"}
|
||||
- {id: 7020, cat: Books/EBook, desc: "eBooks"}
|
||||
- {id: 7030, cat: Books/Comics, desc: "BD / Comics"}
|
||||
- {id: 8000, cat: Other, desc: "Autres"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid, tmdbid]
|
||||
movie-search: [q, imdbid, tmdbid]
|
||||
music-search: [q]
|
||||
book-search: [q]
|
||||
allowrawsearch: true
|
||||
|
||||
settings:
|
||||
- name: apikey
|
||||
type: text
|
||||
label: API Key
|
||||
- name: info_key
|
||||
type: info
|
||||
label: About your API key
|
||||
default: "Your API key is your personal announce key. You can find it on your <b>Profil › Paramètres</b> page on the site."
|
||||
- name: multilang
|
||||
type: checkbox
|
||||
label: Replace MULTi by another language in release name
|
||||
default: false
|
||||
- name: multilanguage
|
||||
type: select
|
||||
label: Replace MULTi by this language
|
||||
default: FRENCH
|
||||
options:
|
||||
FRENCH: FRENCH
|
||||
MULTi.FRENCH: MULTi.FRENCH
|
||||
ENGLISH: ENGLISH
|
||||
MULTi.ENGLISH: MULTi.ENGLISH
|
||||
VOSTFR: VOSTFR
|
||||
MULTi.VOSTFR: MULTi.VOSTFR
|
||||
- name: vostfr
|
||||
type: checkbox
|
||||
label: Replace VOSTFR and SUBFRENCH with ENGLISH
|
||||
default: false
|
||||
|
||||
login:
|
||||
# invalid apikey returns HTTP 200 with a Torznab <error code="100"/> document
|
||||
path: torznab/api
|
||||
method: get
|
||||
inputs:
|
||||
apikey: "{{ .Config.apikey }}"
|
||||
t: caps
|
||||
error:
|
||||
- selector: error[code]
|
||||
message:
|
||||
selector: error[code]
|
||||
attribute: description
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: torznab/api
|
||||
response:
|
||||
type: xml
|
||||
|
||||
inputs:
|
||||
apikey: "{{ .Config.apikey }}"
|
||||
t: "{{ .Query.Type }}"
|
||||
# .Keywords already carries the SxxEyy episode string for tv searches
|
||||
q: "{{ .Keywords }}"
|
||||
cat: "{{ join .Categories \",\" }}"
|
||||
imdbid: "{{ .Query.IMDBID }}"
|
||||
tmdbid: "{{ .Query.TMDBID }}"
|
||||
limit: 100
|
||||
|
||||
rows:
|
||||
selector: rss > channel > item
|
||||
|
||||
fields:
|
||||
# first category attr is the most precise standard id (2045, 5040, ...)
|
||||
category:
|
||||
selector: "[name=category]"
|
||||
attribute: value
|
||||
title_phase1:
|
||||
selector: title
|
||||
title_vostfr:
|
||||
text: "{{ .Result.title_phase1 }}"
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["(?i)\\b(vostfr|subfrench)\\b", "ENGLISH"]
|
||||
title_phase2:
|
||||
text: "{{ if .Config.vostfr }}{{ .Result.title_vostfr }}{{ else }}{{ .Result.title_phase1 }}{{ end }}"
|
||||
title_multilang:
|
||||
text: "{{ .Result.title_phase2 }}"
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["(?i)\\b(MULTI(?!.*(?:FRENCH|ENGLISH|VOSTFR|VF2|VFF|VFQ|VOQ|VFI|VOF)))\\b", "{{ .Config.multilanguage }}"]
|
||||
title:
|
||||
text: "{{ if .Config.multilang }}{{ .Result.title_multilang }}{{ else }}{{ .Result.title_phase2 }}{{ end }}"
|
||||
details:
|
||||
selector: comments
|
||||
download:
|
||||
selector: enclosure
|
||||
attribute: url
|
||||
imdbid:
|
||||
selector: "[name=imdb]"
|
||||
attribute: value
|
||||
tmdbid:
|
||||
selector: "[name=tmdbid]"
|
||||
attribute: value
|
||||
date:
|
||||
# Tue, 02 Jun 2026 19:24:18 +0000
|
||||
selector: pubDate
|
||||
filters:
|
||||
- name: dateparse
|
||||
args: "ddd, dd MMM yyyy HH:mm:ss zzz"
|
||||
size:
|
||||
selector: size
|
||||
files:
|
||||
selector: files
|
||||
grabs:
|
||||
selector: grabs
|
||||
seeders:
|
||||
selector: "[name=seeders]"
|
||||
attribute: value
|
||||
leechers:
|
||||
selector: "[name=leechers]"
|
||||
attribute: value
|
||||
downloadvolumefactor:
|
||||
selector: "[name=downloadvolumefactor]"
|
||||
attribute: value
|
||||
uploadvolumefactor:
|
||||
selector: "[name=uploadvolumefactor]"
|
||||
attribute: value
|
||||
minimumseedtime:
|
||||
selector: "[name=minimumseedtime]"
|
||||
attribute: value
|
||||
minimumratio:
|
||||
# only present while the ratio-enforcement flag is active on the site
|
||||
selector: "[name=minimumratio]"
|
||||
attribute: value
|
||||
optional: true
|
||||
# torznab xml
|
||||
@@ -0,0 +1,192 @@
|
||||
---
|
||||
id: dreadvault-api
|
||||
name: DreadVault (API)
|
||||
description: "DreadVault is a Private Torrent Tracker for HORROR MOVIES / TV"
|
||||
language: en-US
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://dreadvault.org/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: Movies, desc: "Movie"}
|
||||
- {id: 2, cat: TV, desc: "TV"}
|
||||
- {id: 3, cat: Books, desc: "eBook"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid, tvdbid, tmdbid]
|
||||
movie-search: [q, imdbid, tmdbid]
|
||||
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://dreadvault.org/\" target=\"_blank\">DreadVault</a> account <i>My Settings</i> page and clicking on the <b>API Key</b> tab."
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: single_file_release_use_filename
|
||||
type: checkbox
|
||||
label: Use filename as title for single file releases
|
||||
default: true
|
||||
- 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
|
||||
- name: info_activity
|
||||
type: info
|
||||
label: Account Activity
|
||||
default: "All new members must generate some activity within the first 90 days of joining. Activity includes uploading, downloading, or cross-seeding. Members failing to meet these requirements may be automatically disabled."
|
||||
|
||||
login:
|
||||
path: api/torrents
|
||||
method: get
|
||||
error:
|
||||
- selector: a[href*="/login"]
|
||||
message:
|
||||
text: "The API key was not accepted by {{ .Config.sitelink }}."
|
||||
- selector: :root:contains("Account is Banned")
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://hdinnovations.github.io/UNIT3D/torrent_api.html
|
||||
# https://github.com/HDInnovations/UNIT3D/blob/master/app/Http/Controllers/API/TorrentController.php#L657
|
||||
- path: api/torrents/filter
|
||||
response:
|
||||
type: json
|
||||
|
||||
headers:
|
||||
Authorization: ["Bearer {{ .Config.apikey }}"]
|
||||
|
||||
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
|
||||
$raw: "{{ range .Categories }}&categories[]={{.}}{{end}}"
|
||||
name: "{{ .Keywords }}"
|
||||
seasonNumber: "{{ .Query.Season }}"
|
||||
episodeNumber: "{{ .Query.Ep }}"
|
||||
imdbId: "{{ .Query.IMDBIDShort }}"
|
||||
tmdbId: "{{ .Query.TMDBID }}"
|
||||
tvdbId: "{{ .Query.TVDBID }}"
|
||||
"free[]": "{{ if .Config.freeleech }}100{{ else }}{{ end }}"
|
||||
sortField: "{{ .Config.sort }}"
|
||||
sortDirection: "{{ .Config.type }}"
|
||||
perPage: 100
|
||||
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
args: ["\\.", " "]
|
||||
|
||||
rows:
|
||||
selector: data
|
||||
attribute: attributes
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: category_id
|
||||
title_optional:
|
||||
selector: name
|
||||
title_filename:
|
||||
selector: "files[0].name"
|
||||
optional: true
|
||||
files:
|
||||
selector: num_file
|
||||
title:
|
||||
text: "{{ if and (.Config.single_file_release_use_filename) (eq .Result.files \"1\") (.Result.title_filename) }}{{ .Result.title_filename }}{{ else }}{{ .Result.title_optional }}{{ end }}"
|
||||
details:
|
||||
selector: details_link
|
||||
download:
|
||||
selector: download_link
|
||||
poster:
|
||||
selector: meta.poster
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["https://via.placeholder.com/90x135", ""]
|
||||
imdbid:
|
||||
selector: imdb_id
|
||||
tmdbid:
|
||||
selector: tmdb_id
|
||||
tvdbid:
|
||||
selector: tvdb_id
|
||||
genre:
|
||||
selector: meta.genres
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["(?i)(Science Fiction)", "Science_Fiction"]
|
||||
- name: re_replace
|
||||
args: ["(?i)(TV Movie)", "TV_Movie"]
|
||||
- name: replace
|
||||
args: [" & ", "_&_"]
|
||||
_internal:
|
||||
selector: internal
|
||||
case:
|
||||
False: "{{ .False }}"
|
||||
True: "{{ .True }}"
|
||||
description:
|
||||
text: "{{ if .Result._internal }}Internal{{ else }}{{ end }}{{ if and .Result._internal .Result.genre }} | {{ else }}{{ end }}{{ .Result.genre }}"
|
||||
seeders:
|
||||
selector: seeders
|
||||
leechers:
|
||||
selector: leechers
|
||||
grabs:
|
||||
selector: times_completed
|
||||
date:
|
||||
# "created_at": "2021-10-18T00:34:50.000000Z" is returned by Newtonsoft.Json.Linq as 18/10/2021 00:34:50
|
||||
selector: created_at
|
||||
filters:
|
||||
- name: append
|
||||
args: " +00:00" # GMT
|
||||
- name: dateparse
|
||||
args: "MM/dd/yyyy HH:mm:ss zzz"
|
||||
size:
|
||||
selector: size
|
||||
_featured:
|
||||
selector: featured
|
||||
case:
|
||||
False: "{{ .False }}"
|
||||
True: "{{ .True }}"
|
||||
downloadvolumefactor_freeleech:
|
||||
# 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
|
||||
downloadvolumefactor:
|
||||
text: "{{ if .Result._featured }}0{{ else }}{{ .Result.downloadvolumefactor_freeleech }}{{ end }}"
|
||||
uploadvolumefactor_double_upload:
|
||||
# api returns False, True
|
||||
selector: double_upload
|
||||
case:
|
||||
False: 1 # normal
|
||||
True: 2 # double
|
||||
uploadvolumefactor:
|
||||
text: "{{ if .Result._featured }}2{{ else }}{{ .Result.uploadvolumefactor_double_upload }}{{ end }}"
|
||||
# global MR is 0.7 but torrents must be seeded for 5 days regardless of ratio
|
||||
# minimumratio:
|
||||
# text: 0.7
|
||||
minimumseedtime:
|
||||
# 5 days (as seconds = 5 x 24 x 60 x 60)
|
||||
text: 432000
|
||||
# json UNIT3D 9.2.0
|
||||
@@ -0,0 +1,152 @@
|
||||
---
|
||||
id: ds-reloaded
|
||||
name: DS-Reloaded
|
||||
description: "DS-Reloaded (DS.R) is a GERMAN Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
language: de-DE
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://ds-reloaded.com/
|
||||
legacylinks:
|
||||
- https://dark-shadow.ml/
|
||||
- https://projekt.dark-shadow.me/
|
||||
- https://dark-shadow.me/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 32, cat: Movies/HD, desc: "Filme > HD"}
|
||||
- {id: 28, cat: Movies/SD, desc: "Filme > SD"}
|
||||
- {id: 114, cat: Movies/UHD, desc: "Filme > UHD"}
|
||||
- {id: 140, cat: Movies/BluRay, desc: "Filme > BluRay"}
|
||||
- {id: 138, cat: Movies, desc: "Filme > Pack's"}
|
||||
- {id: 147, cat: Movies/HD, desc: "Filme > h266/x266"}
|
||||
- {id: 150, cat: Movies/Foreign, desc: "Filme > International"}
|
||||
- {id: 57, cat: TV/HD, desc: "Serien > HD"}
|
||||
- {id: 60, cat: TV/SD, desc: "Serien > SD"}
|
||||
- {id: 139, cat: TV/UHD, desc: "Serien > UHD"}
|
||||
- {id: 59, cat: TV, desc: "Serien > Pack's"}
|
||||
- {id: 110, cat: Audio/MP3, desc: "Audio > MP3"}
|
||||
- {id: 48, cat: Audio/Lossless, desc: "Audio > Flac"}
|
||||
- {id: 52, cat: Audio, desc: "Audio > Pack"}
|
||||
- {id: 63, cat: Audio/Audiobook, desc: "Audio > Hörbuch"}
|
||||
- {id: 120, cat: Audio/Video, desc: "Audio > Videos"}
|
||||
- {id: 12, cat: PC/0day, desc: "Apps > Windows"}
|
||||
- {id: 125, cat: PC/Mac, desc: "Apps > Mac-OSX"}
|
||||
- {id: 11, cat: PC/Mobile-Other, desc: "Apps > Mobil"}
|
||||
- {id: 141, cat: PC/ISO, desc: "Apps > Other"}
|
||||
- {id: 15, cat: TV/Documentary, desc: "Doku > SD"}
|
||||
- {id: 14, cat: TV/Documentary, desc: "Doku > HD"}
|
||||
- {id: 148, cat: TV/Documentary, desc: "Doku > UHD"}
|
||||
- {id: 123, cat: TV/Documentary, desc: "Doku > Pack's"}
|
||||
- {id: 17, cat: PC/Games, desc: "Spiel > PC"}
|
||||
- {id: 24, cat: Console, desc: "Spiel > Konsole"}
|
||||
- {id: 126, cat: Console/Other, desc: "Spiel > Mobil"}
|
||||
- {id: 121, cat: Console, desc: "Spiel > Wimmelbild"}
|
||||
- {id: 151, cat: TV/Sport, desc: "Sport > UHD"}
|
||||
- {id: 61, cat: TV/Sport, desc: "Sport > HD"}
|
||||
- {id: 62, cat: TV/Sport, desc: "Sport > SD"}
|
||||
- {id: 96, cat: Books/Mags, desc: "ePaper > Zeitungen"}
|
||||
- {id: 136, cat: Books/EBook, desc: "ePaper > E-Book"}
|
||||
- {id: 137, cat: Books/Comics, desc: "ePaper > Comics"}
|
||||
- {id: 143, cat: XXX/x264, desc: "XXX > HD / SD"}
|
||||
- {id: 149, cat: XXX/Other, desc: "XXX > Magazine"}
|
||||
- {id: 75, cat: XXX/Pack, desc: "XXX > Pack's"}
|
||||
- {id: 142, cat: XXX/ImageSet, desc: "XXX > Pic's"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
music-search: [q]
|
||||
book-search: [q]
|
||||
|
||||
settings:
|
||||
- name: info_password
|
||||
type: info
|
||||
label: About Password Expiry
|
||||
default: "DS.R has an <b>8 week Password Expiry</b> regime. So if the Indexer has stopped working then the first thing you should do is check if your password has expired by login in at <a href=\"https://ds-reloaded.com/login.php\" target=\"_blank\">DS-Reloaded</a>, and if necessary use the <b>Passwort anfordern</b> (<i>Request password</i>) button to renew it."
|
||||
- name: cookie
|
||||
type: text
|
||||
label: Cookie
|
||||
- name: info_cookie
|
||||
type: info_cookie
|
||||
- name: onlyupload
|
||||
type: checkbox
|
||||
label: Search OnlyUpload
|
||||
default: false
|
||||
- name: info_free
|
||||
type: info
|
||||
label: About OnlyUpload at DS.R
|
||||
default: "OnlyUpload are torrents where download is not counted but upload is. Good for building your Ratio up. (On the Jackett dashboard search results these are tagged as Freeleech)."
|
||||
- name: info_activity
|
||||
type: info
|
||||
label: Account Inactivity
|
||||
default: "Inactive accounts will be deactivated after 7 weeks and deleted after another 3 weeks."
|
||||
|
||||
login:
|
||||
# using cookie method because login page can present second page for a challenge eg. 9+2=?
|
||||
method: cookie
|
||||
inputs:
|
||||
cookie: "{{ .Config.cookie }}"
|
||||
test:
|
||||
path: index.php
|
||||
selector: a[href="logout.php"]
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://ds-reloaded.com/selection.php?ajax=true&search=&page=1&free=yes&c32=1&c28=1
|
||||
- path: selection.php
|
||||
response:
|
||||
type: json
|
||||
|
||||
inputs:
|
||||
ajax: true
|
||||
search: "{{ .Keywords }}"
|
||||
page: 1
|
||||
# all=active+inactive, yes=active, no=inactive (the default is all, which ajax simply drops the parm)
|
||||
# visible: all
|
||||
# all=all+onlyup, yes=onlyup, no=without onlyup (the default is all, which ajax simply drops the parm)
|
||||
free: "{{ if .Config.onlyupload }}yes{{ else }}{{ end }}"
|
||||
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
|
||||
|
||||
rows:
|
||||
selector: items
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: category_id
|
||||
title:
|
||||
selector: name
|
||||
_id:
|
||||
selector: id
|
||||
details:
|
||||
text: "details.php?id={{ .Result._id }}"
|
||||
download:
|
||||
selector: download_link
|
||||
poster:
|
||||
selector: cover
|
||||
size:
|
||||
selector: size
|
||||
date:
|
||||
# 25.12.2024 16:02
|
||||
selector: added
|
||||
filters:
|
||||
- name: append
|
||||
args: " +01:00" # CET
|
||||
- name: dateparse
|
||||
args: "dd.MM.yyyy HH:mm zzz"
|
||||
seeders:
|
||||
selector: seeders
|
||||
leechers:
|
||||
selector: leechers
|
||||
_onlyup:
|
||||
selector: free_button:contains(Only Upload)
|
||||
optional: true
|
||||
downloadvolumefactor:
|
||||
text: "{{ if .Result._onlyup }}0{{ else }}1{{ end }}"
|
||||
uploadvolumefactor:
|
||||
text: 1
|
||||
minimumseedtime:
|
||||
# 3 days (as seconds = 3 x 24 x 60 x 60)
|
||||
text: 259200
|
||||
# THX JSON
|
||||
@@ -0,0 +1,156 @@
|
||||
---
|
||||
id: funfile
|
||||
name: FunFile
|
||||
description: "FunFile is a Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
language: en-US
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://www.funfile.org/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 45, cat: Other, desc: "0Day"}
|
||||
- {id: 44, cat: TV/Anime, desc: "Anime"}
|
||||
- {id: 22, cat: PC, desc: "Applications"}
|
||||
- {id: 43, cat: Audio/Audiobook, desc: "Audio Books"}
|
||||
- {id: 27, cat: Books/EBook, desc: "Ebook"}
|
||||
- {id: 4, cat: PC/Games, desc: "Games"}
|
||||
- {id: 40, cat: Other/Misc, desc: "Miscellaneous"}
|
||||
- {id: 19, cat: Movies, desc: "Movies"}
|
||||
- {id: 6, cat: Audio, desc: "Music"}
|
||||
- {id: 31, cat: PC/Mobile-Other, desc: "Portable"}
|
||||
- {id: 49, cat: Other, desc: "Tutorials"}
|
||||
- {id: 7, cat: TV, desc: "TV"}
|
||||
- {id: 48, cat: XXX/Other, desc: "XXX 0Day"}
|
||||
- {id: 46, cat: XXX, desc: "XXX Movies"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid, genre]
|
||||
movie-search: [q, imdbid, genre]
|
||||
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: info_activity
|
||||
type: info
|
||||
label: Account Inactivity
|
||||
default: "User accounts that are inactive for more than 42 days (ie haven't logged into the site) and NOT PARKED are automatically AND irretrievably deleted. Those with Donor VIP status are immune to the 42 day purging up to 1 year."
|
||||
- name: info_results
|
||||
type: info
|
||||
label: Results Per Page
|
||||
default: "For best results, change the 'Torrents per page' setting to 100 in your profile."
|
||||
|
||||
login:
|
||||
path: login.php
|
||||
method: form
|
||||
form: form[name="login"]
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
returnto: ""
|
||||
login: Login
|
||||
captcha:
|
||||
type: image
|
||||
selector: img#captcha
|
||||
input: captcha_code
|
||||
error:
|
||||
- selector: td.mf_content:has(h1:contains("Captcha Error"))
|
||||
- selector: td.mf_content:contains("Incorrect Captcha")
|
||||
- selector: td.mf_content:contains("Login failed")
|
||||
- selector: td.mf_content:contains("Access denied")
|
||||
- selector: td.mf_content:contains("remaining tries")
|
||||
- selector: td.mf_content:contains("Security code")
|
||||
- selector: td.mf_content:contains("Wrong Code")
|
||||
test:
|
||||
path: index.php
|
||||
selector: a[href*="logout.php"]
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: browse.php
|
||||
inputs:
|
||||
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
|
||||
search: "{{ if .Query.Genre }}{{ .Query.Genre }} {{ else }}{{ end }}{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{ else }}{{ .Keywords }}{{ end }}"
|
||||
cat: 0
|
||||
incldead: "{{ if .Config.freeleech }}3{{ else }}1{{ end }}"
|
||||
showspam: 1
|
||||
s_title: "{{ if or .Query.IMDBID .Query.Genre }}{{ else }}1{{ end }}"
|
||||
s_desc: "{{ if .Query.IMDBID }}1{{ else }}{{ end }}"
|
||||
s_tag: "{{ if .Query.Genre }}1{{ else }}{{ end }}"
|
||||
|
||||
rows:
|
||||
selector: "table.mainframe table[cellpadding=\"2\"] > tbody > tr:has(a[href^=\"download.php\"]), table.mainframe table[cellpadding=\"2\"] > tbody > tr[id^=\"ka\"]"
|
||||
after: 1
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: a[href^="browse.php?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
title:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: title
|
||||
details:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["&hit=1", ""]
|
||||
download:
|
||||
selector: a[href^="download.php"]
|
||||
attribute: href
|
||||
files:
|
||||
selector: td.row3:nth-child(4)
|
||||
date:
|
||||
selector: td.row3:nth-child(6)
|
||||
filters:
|
||||
- name: timeago
|
||||
size:
|
||||
selector: td.row3:nth-child(8)
|
||||
grabs:
|
||||
selector: td.row3:nth-child(9)
|
||||
seeders:
|
||||
selector: td.row3:nth-child(10)
|
||||
leechers:
|
||||
selector: td.row3:nth-child(11)
|
||||
uploadvolumefactor:
|
||||
selector: td.row2 table tr:nth-child(3) td:nth-child(1)
|
||||
optional: true
|
||||
default: 1
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["X", ""]
|
||||
downloadvolumefactor:
|
||||
selector: td.row2 table tr:nth-child(3) td:nth-child(2)
|
||||
optional: true
|
||||
default: 1
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["X", ""]
|
||||
genre:
|
||||
selector: td.row2 span[style="float:left"]
|
||||
filters:
|
||||
- name: validate
|
||||
args: "action, adventure, animation, biography, comedy, crime, documentary, drama, family, fantasy, game-show, history, home_&_garden, home_and_garden, horror, music, musical, mystery, news, reality, reality-tv, romance, sci-fi, science-fiction, short, sport, talk-show, thriller, travel, war, western"
|
||||
description:
|
||||
text: "{{ .Result.genre }}"
|
||||
minimumratio:
|
||||
text: 1.0
|
||||
minimumseedtime:
|
||||
# 2 days (as seconds = 2 x 24 x 60 x 60)
|
||||
text: 172800
|
||||
# TBDev
|
||||
@@ -0,0 +1,213 @@
|
||||
---
|
||||
id: funzone-api
|
||||
name: funZone (API)
|
||||
description: "funZone is a ROMANIAN Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
language: ro-RO
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://myfunzone.org/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 3, cat: Movies/HD, desc: "Movies HD-RO"}
|
||||
- {id: 2, cat: TV, desc: "TV"}
|
||||
- {id: 1, cat: Movies, desc: "Movies HD"}
|
||||
- {id: 4, cat: PC/Games, desc: "Games PC"}
|
||||
- {id: 5, cat: Audio, desc: "Music"}
|
||||
- {id: 23, cat: Movies/UHD, desc: "Movies UHD-RO"}
|
||||
- {id: 6, cat: PC, desc: "Software"}
|
||||
- {id: 7, cat: TV/Anime, desc: "Anime"}
|
||||
- {id: 8, cat: TV/Documentary, desc: "Documentaries"}
|
||||
- {id: 9, cat: TV/Sport, desc: "Sport"}
|
||||
- {id: 10, cat: Console, desc: "Games Console"}
|
||||
- {id: 11, cat: Movies, desc: "Movies Romanian"}
|
||||
- {id: 12, cat: Movies/Other, desc: "Cartoons"}
|
||||
- {id: 32, cat: Movies/Other, desc: "Cartoons RO"}
|
||||
- {id: 17, cat: XXX, desc: "XXX"}
|
||||
- {id: 18, cat: PC/Games, desc: "Classic Games"}
|
||||
- {id: 24, cat: Audio, desc: "Music/Packs"}
|
||||
- {id: 19, cat: Audio/Video, desc: "Videos"}
|
||||
- {id: 25, cat: TV, desc: "TV/Packs"}
|
||||
- {id: 20, cat: Movies/SD, desc: "Movies SD-RO"}
|
||||
- {id: 27, cat: Other, desc: "Pics/Wallpapers"}
|
||||
- {id: 21, cat: Books, desc: "EBooks"}
|
||||
- {id: 28, cat: PC, desc: "Software/Packs"}
|
||||
- {id: 22, cat: Movies, desc: "Classic Movies"}
|
||||
- {id: 29, cat: Movies/UHD, desc: "Movies UHD"}
|
||||
- {id: 30, cat: TV, desc: "Shows"}
|
||||
- {id: 31, cat: Audio/Audiobook, desc: "AudioBooks"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid, tvdbid, tmdbid]
|
||||
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://myfunzone.org/\" target=\"_blank\">funZone</a> account <i>My Settings</i> page and clicking on the <b>API Key</b> tab."
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: single_file_release_use_filename
|
||||
type: checkbox
|
||||
label: Use filename as title for single file releases
|
||||
default: true
|
||||
- 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
|
||||
error:
|
||||
- selector: a[href*="/login"]
|
||||
message:
|
||||
text: "The API key was not accepted by {{ .Config.sitelink }}."
|
||||
- selector: :root:contains("Account is Banned")
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://hdinnovations.github.io/UNIT3D/torrent_api.html
|
||||
# https://github.com/HDInnovations/UNIT3D/blob/master/app/Http/Controllers/API/TorrentController.php#L657
|
||||
- path: api/torrents/filter
|
||||
response:
|
||||
type: json
|
||||
|
||||
headers:
|
||||
Authorization: ["Bearer {{ .Config.apikey }}"]
|
||||
|
||||
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
|
||||
$raw: "{{ range .Categories }}&categories[]={{.}}{{end}}"
|
||||
name: "{{ .Keywords }}"
|
||||
seasonNumber: "{{ .Query.Season }}"
|
||||
episodeNumber: "{{ .Query.Ep }}"
|
||||
imdbId: "{{ .Query.IMDBIDShort }}"
|
||||
tmdbId: "{{ .Query.TMDBID }}"
|
||||
tvdbId: "{{ .Query.TVDBID }}"
|
||||
"free[]": "{{ if .Config.freeleech }}100{{ else }}{{ end }}"
|
||||
sortField: "{{ .Config.sort }}"
|
||||
sortDirection: "{{ .Config.type }}"
|
||||
perPage: 100
|
||||
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
args: ["\\.", " "]
|
||||
|
||||
rows:
|
||||
selector: data
|
||||
attribute: attributes
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: category_id
|
||||
title_optional:
|
||||
selector: name
|
||||
title_filename:
|
||||
selector: "files[0].name"
|
||||
optional: true
|
||||
files:
|
||||
selector: num_file
|
||||
title:
|
||||
text: "{{ if and (.Config.single_file_release_use_filename) (eq .Result.files \"1\") (.Result.title_filename) }}{{ .Result.title_filename }}{{ else }}{{ .Result.title_optional }}{{ end }}"
|
||||
details:
|
||||
selector: details_link
|
||||
download:
|
||||
selector: download_link
|
||||
poster:
|
||||
selector: meta.poster
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["https://via.placeholder.com/90x135", ""]
|
||||
imdbid:
|
||||
selector: imdb_id
|
||||
tmdbid:
|
||||
selector: tmdb_id
|
||||
tvdbid:
|
||||
selector: tvdb_id
|
||||
genre:
|
||||
selector: meta.genres
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["(?i)(Science Fiction)", "Science_Fiction"]
|
||||
- name: re_replace
|
||||
args: ["(?i)(TV Movie)", "TV_Movie"]
|
||||
- name: replace
|
||||
args: [" & ", "_&_"]
|
||||
_internal:
|
||||
selector: internal
|
||||
case:
|
||||
False: "{{ .False }}"
|
||||
True: "{{ .True }}"
|
||||
description:
|
||||
text: "{{ if .Result._internal }}Internal{{ else }}{{ end }}{{ if and .Result._internal .Result.genre }} | {{ else }}{{ end }}{{ .Result.genre }}"
|
||||
seeders:
|
||||
selector: seeders
|
||||
leechers:
|
||||
selector: leechers
|
||||
grabs:
|
||||
selector: times_completed
|
||||
date:
|
||||
# "created_at": "2021-10-18T00:34:50.000000Z" is returned by Newtonsoft.Json.Linq as 18/10/2021 00:34:50
|
||||
selector: created_at
|
||||
filters:
|
||||
- name: append
|
||||
args: " +00:00" # GMT
|
||||
- name: dateparse
|
||||
args: "MM/dd/yyyy HH:mm:ss zzz"
|
||||
size:
|
||||
selector: size
|
||||
_featured:
|
||||
selector: featured
|
||||
case:
|
||||
False: "{{ .False }}"
|
||||
True: "{{ .True }}"
|
||||
downloadvolumefactor_freeleech:
|
||||
# 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
|
||||
downloadvolumefactor:
|
||||
text: "{{ if .Result._featured }}0{{ else }}{{ .Result.downloadvolumefactor_freeleech }}{{ end }}"
|
||||
uploadvolumefactor_double_upload:
|
||||
# api returns False, True
|
||||
selector: double_upload
|
||||
case:
|
||||
False: 1 # normal
|
||||
True: 2 # double
|
||||
uploadvolumefactor:
|
||||
text: "{{ if .Result._featured }}2{{ else }}{{ .Result.uploadvolumefactor_double_upload }}{{ end }}"
|
||||
# global MR is 0.5 but torrents must be seeded for 3 days regardless of ratio
|
||||
# minimumratio:
|
||||
# text: 0.5
|
||||
minimumseedtime:
|
||||
# 3 days (as seconds = 3 x 24 x 60 x 60)
|
||||
text: 259200
|
||||
# json UNIT3D 9.2.0
|
||||
@@ -0,0 +1,246 @@
|
||||
---
|
||||
id: g3minitr4ck3r-api
|
||||
name: G3MINI TR4CK3R (API)
|
||||
description: "G3MINI TR4CK3R is a FRENCH Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
language: fr-FR
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://gemini-tracker.org/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: Movies, desc: "Films"}
|
||||
- {id: 2, cat: TV, desc: "Séries"}
|
||||
- {id: 10, cat: TV/Sport, desc: "Sports"}
|
||||
- {id: 13, cat: Movies/Other, desc: "Documentaires - Film"}
|
||||
- {id: 14, cat: TV/Documentary, desc: "Documentaires - Series"}
|
||||
- {id: 15, cat: TV, desc: "Documentaires - Émission TV"}
|
||||
- {id: 3, cat: PC/Games, desc: "Jeux PC"}
|
||||
- {id: 7, cat: Movies, desc: "Films Animation Japonaise"}
|
||||
- {id: 6, cat: TV/Anime, desc: "Animes"}
|
||||
- {id: 8, cat: Books/Comics, desc: "Bandes dessinées"}
|
||||
- {id: 11, cat: Books/Comics, desc: "Mangas"}
|
||||
- {id: 9, cat: Books/Mags, desc: "Magazines"}
|
||||
- {id: 12, cat: Books/EBook, desc: "Livres"}
|
||||
- {id: 16, cat: Audio/Audiobook, desc: "Livres - Audios"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid, tvdbid, tmdbid]
|
||||
movie-search: [q, imdbid, tmdbid]
|
||||
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://gemini-tracker.org/\" target=\"_blank\">G3MINI TR4CK3R</a> account <i>My Settings</i> page and clicking on the <b>API Key</b> tab."
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: use_fl_tokens
|
||||
type: checkbox
|
||||
label: Use Freeleech Tokens automatically
|
||||
default: true
|
||||
- name: single_file_release_use_filename
|
||||
type: checkbox
|
||||
label: Use filename as title for single file releases
|
||||
default: true
|
||||
- name: multilang
|
||||
type: checkbox
|
||||
label: Replace MULTi by another language in release name
|
||||
default: false
|
||||
- name: multilanguage
|
||||
type: select
|
||||
label: Replace MULTi by this language
|
||||
default: FRENCH
|
||||
options:
|
||||
FRENCH: FRENCH
|
||||
MULTi FRENCH: MULTi FRENCH
|
||||
ENGLISH: ENGLISH
|
||||
MULTi ENGLISH: MULTi ENGLISH
|
||||
VOSTFR: VOSTFR
|
||||
MULTi VOSTFR: MULTi VOSTFR
|
||||
- name: vostfr
|
||||
type: checkbox
|
||||
label: Replace VOSTFR and SUBFRENCH with ENGLISH
|
||||
default: false
|
||||
- name: vfq
|
||||
type: checkbox
|
||||
label: Replace VFQ with FRENCH
|
||||
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
|
||||
error:
|
||||
- selector: a[href*="/login"]
|
||||
message:
|
||||
text: "The API key was not accepted by {{ .Config.sitelink }}."
|
||||
- selector: :root:contains("Account is Banned")
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://hdinnovations.github.io/UNIT3D/torrent_api.html
|
||||
# https://github.com/HDInnovations/UNIT3D/blob/master/app/Http/Controllers/API/TorrentController.php#L657
|
||||
- path: api/torrents/filter
|
||||
response:
|
||||
type: json
|
||||
|
||||
headers:
|
||||
Authorization: ["Bearer {{ .Config.apikey }}"]
|
||||
|
||||
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
|
||||
$raw: "{{ range .Categories }}&categories[]={{.}}{{end}}"
|
||||
name: "{{ .Keywords }}"
|
||||
seasonNumber: "{{ .Query.Season }}"
|
||||
episodeNumber: "{{ .Query.Ep }}"
|
||||
imdbId: "{{ .Query.IMDBIDShort }}"
|
||||
tmdbId: "{{ .Query.TMDBID }}"
|
||||
tvdbId: "{{ .Query.TVDBID }}"
|
||||
"free[]": "{{ if .Config.freeleech }}100{{ else }}{{ end }}"
|
||||
sortField: "{{ .Config.sort }}"
|
||||
sortDirection: "{{ .Config.type }}"
|
||||
perPage: 100
|
||||
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
args: ["\\.", " "]
|
||||
|
||||
rows:
|
||||
selector: data
|
||||
attribute: attributes
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: category_id
|
||||
title_optional:
|
||||
selector: name
|
||||
title_filename:
|
||||
selector: "files[0].name"
|
||||
optional: true
|
||||
files:
|
||||
selector: num_file
|
||||
title_phase1:
|
||||
text: "{{ if and (.Config.single_file_release_use_filename) (eq .Result.files \"1\") (.Result.title_filename) }}{{ .Result.title_filename }}{{ else }}{{ .Result.title_optional }}{{ end }}"
|
||||
title_vfq:
|
||||
text: "{{ .Result.title_phase1 }}"
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["(?i)\\b(VFQ)\\b", "FRENCH"]
|
||||
title_phase2:
|
||||
text: "{{ if .Config.vfq }}{{ .Result.title_vfq }}{{ else }}{{ .Result.title_phase1 }}{{ end }}"
|
||||
title_vostfr:
|
||||
text: "{{ .Result.title_phase2 }}"
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["(?i)\\b(vostfr|subfrench)\\b", "ENGLISH"]
|
||||
title_phase3:
|
||||
text: "{{ if .Config.vostfr }}{{ .Result.title_vostfr }}{{ else }}{{ .Result.title_phase2 }}{{ end }}"
|
||||
title_multilang:
|
||||
text: "{{ .Result.title_phase3 }}"
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["(?i)\\b(MULTI(?!.*(?:FRENCH|ENGLISH|VOSTFR)))\\b", "{{ .Config.multilanguage }}"]
|
||||
title:
|
||||
text: "{{ if .Config.multilang }}{{ .Result.title_multilang }}{{ else }}{{ .Result.title_phase3 }}{{ end }}"
|
||||
details:
|
||||
selector: details_link
|
||||
download:
|
||||
selector: download_link
|
||||
filters:
|
||||
- name: append
|
||||
args: "{{ if .Config.use_fl_tokens }}?use_token=1{{ else }}{{ end }}"
|
||||
poster:
|
||||
selector: meta.poster
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["https://via.placeholder.com/90x135", ""]
|
||||
imdbid:
|
||||
selector: imdb_id
|
||||
tmdbid:
|
||||
selector: tmdb_id
|
||||
tvdbid:
|
||||
selector: tvdb_id
|
||||
genre:
|
||||
selector: meta.genres
|
||||
filters:
|
||||
- name: replace
|
||||
args: [" & ", "_&_"]
|
||||
_internal:
|
||||
selector: internal
|
||||
case:
|
||||
False: "{{ .False }}"
|
||||
True: "{{ .True }}"
|
||||
description:
|
||||
text: "{{ if .Result._internal }}Internal{{ else }}{{ end }}{{ if and .Result._internal .Result.genre }} | {{ else }}{{ end }}{{ .Result.genre }}"
|
||||
seeders:
|
||||
selector: seeders
|
||||
leechers:
|
||||
selector: leechers
|
||||
grabs:
|
||||
selector: times_completed
|
||||
date:
|
||||
# "created_at": "2021-10-18T00:34:50.000000Z" is returned by Newtonsoft.Json.Linq as 18/10/2021 00:34:50
|
||||
selector: created_at
|
||||
filters:
|
||||
- name: append
|
||||
args: " +00:00" # GMT
|
||||
- name: dateparse
|
||||
args: "MM/dd/yyyy HH:mm:ss zzz"
|
||||
size:
|
||||
selector: size
|
||||
_featured:
|
||||
selector: featured
|
||||
case:
|
||||
False: "{{ .False }}"
|
||||
True: "{{ .True }}"
|
||||
downloadvolumefactor_freeleech:
|
||||
# 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
|
||||
downloadvolumefactor:
|
||||
text: "{{ if .Result._featured }}0{{ else }}{{ .Result.downloadvolumefactor_freeleech }}{{ end }}"
|
||||
uploadvolumefactor_double_upload:
|
||||
# api returns False, True
|
||||
selector: double_upload
|
||||
case:
|
||||
False: 1 # normal
|
||||
True: 2 # double
|
||||
uploadvolumefactor:
|
||||
text: "{{ if .Result._featured }}2{{ else }}{{ .Result.uploadvolumefactor_double_upload }}{{ end }}"
|
||||
# global MR is 0.75 but torrents must be seeded for 2 days regardless of ratio
|
||||
# minimumratio:
|
||||
# text: 0.75
|
||||
minimumseedtime:
|
||||
# 2 days (as seconds = 2 x 24 x 60 x 60)
|
||||
text: 172800
|
||||
# json UNIT3D 9.2.0 (custom)
|
||||
@@ -0,0 +1,287 @@
|
||||
---
|
||||
id: hdforever2fa
|
||||
name: HD-Forever2FA
|
||||
description: "HD-Forever (HD-F) is a FRENCH Private Torrent Tracker for HD MOVIES. This indexer uses cookie login for 2FA."
|
||||
language: fr-FR
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://hdf.world/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: Movies, desc: "Film"}
|
||||
- {id: 2, cat: Movies, desc: "Film d'animation"}
|
||||
- {id: 3, cat: Movies, desc: "Spectacle"}
|
||||
- {id: 4, cat: Movies, desc: "Concert"}
|
||||
- {id: 5, cat: TV, desc: "Série"}
|
||||
- {id: 6, cat: TV/Anime, desc: "Série d'animation"}
|
||||
- {id: 7, cat: Movies, desc: "Documentaire"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid, tvdbid]
|
||||
movie-search: [q, imdbid, tmdbid]
|
||||
allowtvsearchimdb: true
|
||||
|
||||
settings:
|
||||
- name: cookie
|
||||
type: text
|
||||
label: Cookie
|
||||
- name: info_cookie
|
||||
type: info_cookie
|
||||
- name: info
|
||||
type: info
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: usetoken
|
||||
type: checkbox
|
||||
label: Always try to use the FreeLeech Token
|
||||
default: false
|
||||
- name: info_token
|
||||
type: info
|
||||
label: About the Freeleech token
|
||||
default: If you <b>do not</b> have any <i>Freeleech tokens</i> then do not tick this box.</br>Attempting a token download when you have no tokens will generate an <b>error</b>.
|
||||
- name: multilang
|
||||
type: checkbox
|
||||
label: Replace MULTi by another language in release name
|
||||
default: false
|
||||
- name: multilanguage
|
||||
type: select
|
||||
label: Replace MULTi by this language
|
||||
default: FRENCH
|
||||
options:
|
||||
FRENCH: FRENCH
|
||||
MULTi.FRENCH: MULTi.FRENCH
|
||||
ENGLISH: ENGLISH
|
||||
MULTi.ENGLISH: MULTi.ENGLISH
|
||||
VOSTFR: VOSTFR
|
||||
MULTi.VOSTFR: MULTi.VOSTFR
|
||||
- name: vostfr
|
||||
type: checkbox
|
||||
label: Replace VOSTFR and SUBFRENCH with ENGLISH
|
||||
default: false
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
default: time
|
||||
options:
|
||||
time: created
|
||||
seeders: seeders
|
||||
size: size
|
||||
- name: type
|
||||
type: select
|
||||
label: Order requested from site
|
||||
default: desc
|
||||
options:
|
||||
desc: desc
|
||||
asc: asc
|
||||
- name: info_radarr
|
||||
type: info
|
||||
label: About Radarr
|
||||
default: The HD-F web site cannot find movies if you use the release year in a title search. When you define your Radarr Indexer remember to tick the <i>Remove year from search string</i> checkbox.
|
||||
- name: info_release_name
|
||||
type: info
|
||||
label: About release names
|
||||
default: For more stable release names, enable <b>Afficher les noms de fichiers</b> in your HD-F profile settings.
|
||||
|
||||
login:
|
||||
# using cookie method because login page can present second page for 2FA when enabled
|
||||
method: cookie
|
||||
inputs:
|
||||
cookie: "{{ .Config.cookie }}"
|
||||
test:
|
||||
path: torrents.php
|
||||
selector: a[href^="logout.php?auth="]
|
||||
|
||||
search:
|
||||
# https://hdf.world/torrents.php?searchstr=Un+Singe+en+hiver+1962&freetorrent=1&order_by=time&order_way=desc&action=advanced&searchsubmit=1
|
||||
paths:
|
||||
- path: torrents.php
|
||||
inputs:
|
||||
$raw: "{{ range .Categories }}filter_cat[{{.}}]=1&{{end}}"
|
||||
searchstr: "{{ .Keywords }}"
|
||||
order_by: "{{ .Config.sort }}"
|
||||
order_way: "{{ .Config.type }}"
|
||||
action: advanced
|
||||
searchsubmit: 1
|
||||
# 1 freeleech, 2 neutral, 3 both, 0 normal
|
||||
freetorrent: "{{ if .Config.freeleech }}1{{ else }}{{ end }}"
|
||||
tmdbid: "{{ .Query.TMDBID }}"
|
||||
imdbid: "{{ .Query.IMDBID }}"
|
||||
|
||||
rows:
|
||||
selector: table#torrent_table > tbody > tr.torrent:has(a[href^="torrents.php?action=download&"])
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: td.cats_col
|
||||
case:
|
||||
div.cats_film: 1
|
||||
div[class*="cats_filmd"]: 2
|
||||
div.cats_spectacle: 3
|
||||
div.cats_concert: 4
|
||||
div.cats_série: 5
|
||||
div[class*="cats_séried"]: 6
|
||||
div.cats_documentaire: 7
|
||||
details:
|
||||
selector: a[href^="torrents.php?id="]
|
||||
attribute: href
|
||||
download_regular:
|
||||
selector: a[href^="torrents.php?action=download&"]
|
||||
attribute: href
|
||||
download_usetoken:
|
||||
selector: a[href^="torrents.php?action=download&"]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: append
|
||||
args: "&usetoken=1"
|
||||
download:
|
||||
text: "{{ if .Config.usetoken }}{{ .Result.download_usetoken }}{{ else }}{{ .Result.download_regular }}{{ end }}"
|
||||
_release_group:
|
||||
selector: span.team_name
|
||||
optional: true
|
||||
filters:
|
||||
- name: trim
|
||||
poster:
|
||||
selector: div.group_image img
|
||||
attribute: src
|
||||
imdbid:
|
||||
selector: a[href*="imdb.com/title/tt"]
|
||||
attribute: href
|
||||
tmdbid:
|
||||
selector: a[href*="themoviedb.org/movie/"], a[href*="themoviedb.org/tv/"]
|
||||
attribute: href
|
||||
date:
|
||||
selector: span.time
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["Il y a ", ""]
|
||||
- name: replace
|
||||
args: ["heures", "hours"]
|
||||
- name: replace
|
||||
args: ["heure", "hour"]
|
||||
- name: replace
|
||||
args: ["jours", "days"]
|
||||
- name: replace
|
||||
args: ["jour", "day"]
|
||||
- name: replace
|
||||
args: ["semaines", "weeks"]
|
||||
- name: replace
|
||||
args: ["semaine", "week"]
|
||||
- name: replace
|
||||
args: ["mois", "months"]
|
||||
- name: replace
|
||||
args: ["ans", "years"]
|
||||
- name: replace
|
||||
args: ["an", "year"]
|
||||
- name: append
|
||||
args: " ago"
|
||||
size:
|
||||
selector: td:nth-child(5)
|
||||
grabs:
|
||||
selector: td:nth-child(6)
|
||||
seeders:
|
||||
selector: td:nth-child(7)
|
||||
leechers:
|
||||
selector: td:nth-child(8)
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
"div.torrent_info .tl_free": 0
|
||||
"div.torrent_info .tl_notice[title*=\"Freeleech\"]": 0 # Global freeleech enabled
|
||||
"div.torrent_info .tl_notice[title=\"-75%\"]": 0.75
|
||||
"div.torrent_info .tl_notice[title=\"-50%\"]": 0.50
|
||||
"div.torrent_info .tl_notice[title=\"-25%\"]": 0.25 # for this site this is the count ratio, which is 25% of the total torrent size. (I.E. it's 75% free)
|
||||
"*": 1
|
||||
uploadvolumefactor:
|
||||
text: 1
|
||||
title_torrent_filename:
|
||||
selector: div.torrent_filename_row
|
||||
optional: true
|
||||
filters:
|
||||
- name: trim
|
||||
title_parsed:
|
||||
selector: div.group_info
|
||||
remove: span.team_name, span:has(a[href^="torrents.php?action=download"]), div.tags, div.vote_controls, div.stats-content, .add_bookmark, img, .tl_free, .tl_notice, .torrent_filename_row
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["\n", " "]
|
||||
- name: re_replace
|
||||
args: ["\\[(?:Concert|Film|Film d'animation|Spectacle|Série|Série d'animation|Documentaire)\\]", ""]
|
||||
- name: replace
|
||||
args: ["Blu-ray Original", "Complete.BluRay"]
|
||||
- name: replace
|
||||
args: ["Blu-ray Remux", "Remux"]
|
||||
- name: replace
|
||||
args: ["Blu-ray Rip", "BluRay.Rip"]
|
||||
- name: replace
|
||||
args: ["mHD", "mHD.BluRay.Rip"]
|
||||
- name: re_replace
|
||||
args: ["(?:\\]|\\/\\s)DC", ".Directors.Cut"]
|
||||
- name: re_replace
|
||||
args: ["(?:\\]|\\/\\s)VL", ".Extended"]
|
||||
- name: re_replace
|
||||
args: ["(?:\\]|\\/\\s)RM", ".Remastered"]
|
||||
- name: re_replace
|
||||
args: ["(?:\\]|\\/\\s)UC", ".Uncut"]
|
||||
- name: re_replace
|
||||
args: ["(?:\\]|\\/\\s)UR", ".Unrated"]
|
||||
- name: re_replace
|
||||
args: ["(?:\\]|\\/\\s)ES", ".Special.Edition"]
|
||||
- name: re_replace
|
||||
args: ["(?:\\]|\\/\\s)Crit", ".Criterion"]
|
||||
- name: re_replace
|
||||
args: ["(?:\\/ )?(?:Remplaçable|Complété|Bonus|Note Modo|[2-9]+ème partie|\\b(?:Cust(?:_sub)?|WAC|BFI|MUET)\\b)(?: \\/)?", ""]
|
||||
- name: trim
|
||||
- name: re_replace
|
||||
args: ["[\\[\\]\\/\\s?.,:'!]+", "."]
|
||||
- name: trim
|
||||
args: "."
|
||||
- name: re_replace
|
||||
args: ["(?i)\\.VFF\\.VFQ\\.(?:MULTI|StFR(?:\\.MULTI)?|VO(?:\\.StFR)?)", ".MULTI.VF2"]
|
||||
- name: re_replace
|
||||
args: ["(?i)\\.VFF\\.(?:MULTI|StFR(?:\\.MULTI)?|VO(?:\\.StFR)?)", ".MULTI.VFF"]
|
||||
- name: re_replace
|
||||
args: ["(?i)\\.VFQ\\.(?:MULTI|StFR(?:\\.MULTI)?|VO(?:\\.StFR)?)", ".MULTI.VFQ"]
|
||||
- name: re_replace
|
||||
args: ["(?i)\\.VOQ\\.(?:MULTI|StFR(?:\\.MULTI)?|VO(?:\\.StFR)?)", ".MULTI.VOQ"]
|
||||
- name: re_replace
|
||||
args: ["(?i)\\.VFI\\.(?:MULTI|StFR(?:\\.MULTI)?|VO(?:\\.StFR)?)", ".MULTI.VFI"]
|
||||
- name: re_replace
|
||||
args: ["(?i)\\.VOF\\.(?:MULTI|StFR(?:\\.MULTI)?|VO(?:\\.StFR)?)", ".MULTI.VOF"]
|
||||
- name: re_replace
|
||||
args: ["(?i)\\.(?:VO\\.)?StFR", ".VOSTFR"]
|
||||
- name: append
|
||||
args: "{{ if .Result._release_group }}-{{ .Result._release_group }}{{ else }}{{ end }}"
|
||||
title_phase1:
|
||||
text: "{{ if .Result.title_torrent_filename }}{{ .Result.title_torrent_filename }}{{ else }}{{ .Result.title_parsed }}{{ end }}"
|
||||
title_vostfr:
|
||||
text: "{{ .Result.title_phase1 }}"
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["(?i)\\b(vostfr|subfrench)\\b", "ENGLISH"]
|
||||
title_phase2:
|
||||
text: "{{ if .Config.vostfr }}{{ .Result.title_vostfr }}{{ else }}{{ .Result.title_phase1 }}{{ end }}"
|
||||
title_multilang:
|
||||
text: "{{ .Result.title_phase2 }}"
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["(?i)\\b(MULTI(?!.*(?:FRENCH|ENGLISH|VOSTFR|VF2|VFF|VFQ|VOQ|VFI|VOF)))\\b", "{{ .Config.multilanguage }}"]
|
||||
title:
|
||||
text: "{{ if .Config.multilang }}{{ .Result.title_multilang }}{{ else }}{{ .Result.title_phase2 }}{{ end }}"
|
||||
description:
|
||||
selector: div.group_info
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["\n", " "]
|
||||
- name: re_replace
|
||||
args: ["\\s+", " "]
|
||||
# global MR is 0.6 but torrents must be seeded for 3 days regardless of ratio
|
||||
# minimumratio:
|
||||
# text: 0.6
|
||||
minimumseedtime:
|
||||
# 3 days (as seconds = 3 x 24 x 60 x 60)
|
||||
text: 259200
|
||||
# Gazelle
|
||||
@@ -0,0 +1,188 @@
|
||||
---
|
||||
id: hdspacecookie
|
||||
name: HD-SpaceCookie
|
||||
description: "HD-Space (HDS) is a Private Torrent Tracker for HD MOVIES / TV. This uses the cookie method for access"
|
||||
language: en-US
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://hd-space.org/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 15, cat: Movies/BluRay, desc: "Movie / Blu-ray"}
|
||||
- {id: 40, cat: Movies/HD, desc: "Movie / Remux"}
|
||||
- {id: 18, cat: Movies/HD, desc: "Movie / 720p"}
|
||||
- {id: 19, cat: Movies/HD, desc: "Movie / 1080p"}
|
||||
- {id: 46, cat: Movies/UHD, desc: "Movie / 2160p"}
|
||||
- {id: 21, cat: TV/HD, desc: "TV Show / 720p HDTV"}
|
||||
- {id: 22, cat: TV/HD, desc: "TV Show / 1080p HDTV"}
|
||||
- {id: 45, cat: TV/UHD, desc: "TV Show / 2160p HDTV"}
|
||||
- {id: 24, cat: TV/Documentary, desc: "Documentary / 720p"}
|
||||
- {id: 25, cat: TV/Documentary, desc: "Documentary / 1080p"}
|
||||
- {id: 47, cat: TV/Documentary, desc: "Documentary / 2160p"}
|
||||
- {id: 27, cat: TV/Anime, desc: "Animation / 720p"}
|
||||
- {id: 28, cat: TV/Anime, desc: "Animation / 1080p"}
|
||||
- {id: 48, cat: TV/Anime, desc: "Animation / 2160p"}
|
||||
- {id: 30, cat: Audio/Lossless, desc: "Music / HQ Audio"}
|
||||
- {id: 31, cat: Audio/Video, desc: "Music / Videos"}
|
||||
- {id: 33, cat: XXX, desc: "XXX / 720p"}
|
||||
- {id: 34, cat: XXX, desc: "XXX / 1080p"}
|
||||
- {id: 49, cat: XXX, desc: "XXX / 2160p"}
|
||||
- {id: 36, cat: Movies/Other, desc: "Trailers"}
|
||||
- {id: 37, cat: PC, desc: "Software"}
|
||||
- {id: 38, cat: Other, desc: "Others"}
|
||||
- {id: 41, cat: Movies/UHD, desc: "Movie / 4K UHD"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid]
|
||||
movie-search: [q, imdbid]
|
||||
music-search: [q]
|
||||
|
||||
settings:
|
||||
- name: cookie
|
||||
type: text
|
||||
label: Cookie
|
||||
- name: info_cookie
|
||||
type: info_cookie
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Filter freeleech only
|
||||
default: false
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
default: 3
|
||||
options:
|
||||
3: created
|
||||
5: seeders
|
||||
4: size
|
||||
2: title
|
||||
- name: type
|
||||
type: select
|
||||
label: Order requested from site
|
||||
default: 2
|
||||
options:
|
||||
2: desc
|
||||
1: asc
|
||||
|
||||
login:
|
||||
method: cookie
|
||||
inputs:
|
||||
cookie: "{{ .Config.cookie }}"
|
||||
test:
|
||||
path: index.php
|
||||
selector: a[href="logout.php"]
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://hd-space.org/index.php?page=torrents&search=&active=0&options=0&category=15;18;19
|
||||
- path: index.php
|
||||
inputs:
|
||||
page: torrents
|
||||
search: "{{ if .Query.IMDBID }}{{ .Query.IMDBIDShort }}{{ else }}{{ .Keywords }}{{ end }}"
|
||||
category: "{{ if .Categories }}{{ range .Categories }}{{.}};{{end}}{{ else }}0{{ end }}"
|
||||
# 0 default, 1 genre, 2 imdb, 3 uploader
|
||||
options: "{{ if .Query.IMDBID }}2{{ else }}0{{ end }}"
|
||||
# 0 all, 1 activeonly, 2 deadonly
|
||||
active: 0
|
||||
order: "{{ .Config.sort }}"
|
||||
by: "{{ .Config.type }}"
|
||||
|
||||
rows:
|
||||
selector: "table.lista[width=\"100%\"] > tbody > style ~ tr{{ if .Config.freeleech }}:has(img[src=\"gold/gold.png\"]){{ else }}{{ end }}, table.lista[width=\"100%\"] > tbody > style ~ tr{{ if .Config.freeleech }}:has(img[src=\"images/sf.png\"]){{ else }}{{ end }}"
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: td a[href^="index.php?page=torrents&category="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: category
|
||||
# change broken/missing cat 0 to Others
|
||||
- name: re_replace
|
||||
args: ["\\b0\\b", "38"]
|
||||
title_default:
|
||||
selector: td a[href^="index.php?page=torrent-details"]
|
||||
filters:
|
||||
- name: htmldecode
|
||||
title:
|
||||
selector: a[href^="download.php?id="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: f
|
||||
- name: htmldecode
|
||||
- name: htmldecode # double usage is intentional
|
||||
- name: replace
|
||||
args: [".torrent", ""]
|
||||
- name: trim
|
||||
optional: true
|
||||
default: "{{ .Result.title_default }}"
|
||||
details:
|
||||
selector: td a[href^="index.php?page=torrent-details"]
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href^="download.php?id="]
|
||||
attribute: href
|
||||
poster:
|
||||
selector: td a[href^="index.php?page=torrent-details"]
|
||||
attribute: onmouseover
|
||||
filters:
|
||||
- name: regexp
|
||||
args: src=\./(.+?)\s
|
||||
imdbid:
|
||||
selector: td a[href^="index.php?page=torrent-details"]
|
||||
attribute: onmouseover
|
||||
filters:
|
||||
- name: regexp
|
||||
args: /(\d{8}).jpg
|
||||
date_day:
|
||||
# Today at 09:17:08
|
||||
# Yesterday at 17:11:03
|
||||
selector: td:nth-child(5):contains("day")
|
||||
# auto adjusted by site account profile
|
||||
optional: true
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["[ ]at|[//\xa0\\s,]+", " "]
|
||||
date_year:
|
||||
# January 30, 2024, 20:23:21
|
||||
selector: td:nth-child(5):not(:contains("day"))
|
||||
# auto adjusted by site account profile
|
||||
optional: true
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["[//\xa0\\s,]+", " "]
|
||||
- name: dateparse
|
||||
args: "MMMM dd yyyy HH:mm:ss"
|
||||
date:
|
||||
text: "{{ if or .Result.date_day .Result.date_year }}{{ or .Result.date_day .Result.date_year }}{{ else }}now{{ end }}"
|
||||
size:
|
||||
selector: td:nth-child(6)
|
||||
seeders:
|
||||
selector: td:nth-child(8)
|
||||
leechers:
|
||||
selector: td:nth-child(9)
|
||||
grabs:
|
||||
selector: td:nth-child(10)
|
||||
genre:
|
||||
selector: td:nth-child(2)
|
||||
remove: a
|
||||
description:
|
||||
text: "{{ .Result.genre }}"
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img[src="images/sf.png"]: 0 # side freeleech
|
||||
img[src="gold/gold.png"]: 0
|
||||
img[src="gold/silver.png"]: 0.5
|
||||
"*": 1
|
||||
uploadvolumefactor:
|
||||
text: 1
|
||||
minimumratio:
|
||||
text: 1.0
|
||||
minimumseedtime:
|
||||
# 1 day (as seconds = 1 x 24 x 60 x 60)
|
||||
text: 86400
|
||||
# xbtit
|
||||
@@ -0,0 +1,182 @@
|
||||
---
|
||||
id: herobit
|
||||
replaces:
|
||||
- carphunter
|
||||
name: HeroBit
|
||||
description: "HeroBit is a HUNGARIAN Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
language: hu-HU
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
requestDelay: 2
|
||||
links:
|
||||
- https://herobit.info/
|
||||
legacylinks:
|
||||
- https://carp-hunter.hu/
|
||||
|
||||
caps:
|
||||
# dont forget to update the path categories in the search block
|
||||
categorymappings:
|
||||
- {id: 1, cat: Movies/SD, desc: "Film/Cam/Eng", default: true}
|
||||
- {id: 2, cat: Movies/SD, desc: "Film/Cam/Hun", default: true}
|
||||
- {id: 8, cat: Movies/DVD, desc: "Film/DVD/Eng", default: true}
|
||||
- {id: 7, cat: Movies/DVD, desc: "Film/DVD/Hun", default: true}
|
||||
- {id: 18, cat: Movies/HD, desc: "Film/HD/Eng", default: true}
|
||||
- {id: 17, cat: Movies/HD, desc: "Film/HD/Hun", default: true}
|
||||
- {id: 4, cat: Movies/SD, desc: "Film/SD/Eng", default: true}
|
||||
- {id: 3, cat: Movies/SD, desc: "Film/SD/Hun", default: true}
|
||||
- {id: 23, cat: Audio/Audiobook, desc: "Hangoskönyv", default: true}
|
||||
- {id: 19, cat: PC/Games, desc: "Játék/ISO", default: true}
|
||||
- {id: 20, cat: PC/Games, desc: "Játék/RIP", default: true}
|
||||
- {id: 24, cat: Other, desc: "Képek", default: true}
|
||||
- {id: 21, cat: Books, desc: "Könyv/Eng", default: true}
|
||||
- {id: 22, cat: Books, desc: "Könyv/Hun", default: true}
|
||||
- {id: 35, cat: TV/Anime, desc: "Mese/Eng", default: true}
|
||||
- {id: 36, cat: TV/Anime, desc: "Mese/Hun", default: true}
|
||||
- {id: 25, cat: PC/Mobile-Other, desc: "Mobil", default: true}
|
||||
- {id: 30, cat: PC/ISO, desc: "Programok/ISO", default: true}
|
||||
- {id: 31, cat: PC/0day, desc: "Programok/RIP", default: true}
|
||||
- {id: 33, cat: TV/SD, desc: "Sorozat/Eng", default: true}
|
||||
- {id: 43, cat: TV/HD, desc: "Sorozat/HD/Eng", default: true}
|
||||
- {id: 42, cat: TV/HD, desc: "Sorozat/HD/Hun", default: true}
|
||||
- {id: 32, cat: TV/SD, desc: "Sorozat/Hun", default: true}
|
||||
- {id: 29, cat: Audio/Lossless, desc: "Zene/FLAC/Eng", default: true}
|
||||
- {id: 28, cat: Audio/Lossless, desc: "Zene/FLAC/Hun", default: true}
|
||||
- {id: 27, cat: Audio/MP3, desc: "Zene/MP3/Eng", default: true}
|
||||
- {id: 26, cat: Audio/MP3, desc: "Zene/MP3/Hun", default: true}
|
||||
- {id: 41, cat: XXX/DVD, desc: "XXX/DVD", default: false}
|
||||
- {id: 34, cat: XXX/SD, desc: "XXX/Filmek", default: false}
|
||||
- {id: 40, cat: XXX/x264, desc: "XXX/HD", default: false}
|
||||
- {id: 39, cat: XXX/ImageSet, desc: "XXX/Képek", default: false}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid]
|
||||
movie-search: [q, imdbid]
|
||||
music-search: [q]
|
||||
book-search: [q]
|
||||
|
||||
settings:
|
||||
- name: cookie
|
||||
type: text
|
||||
label: Cookie
|
||||
- name: info_cookie
|
||||
type: info_cookie
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
default: 4
|
||||
options:
|
||||
4: created
|
||||
7: seeders
|
||||
5: size
|
||||
- name: type
|
||||
type: select
|
||||
label: Order requested from site
|
||||
default: desc
|
||||
options:
|
||||
desc: desc
|
||||
asc: asc
|
||||
- name: info_settings
|
||||
type: info
|
||||
label: Settings Requirement
|
||||
default: This indexer only supports the direct datasheet link option.<br>Navigate to the web site account <b>Beállítások (Settings)</b>, change the <b>Torrent lista viselkedése (The behavior of the Torrent List)</b> option to <b>Közvetlen adatlap link (Direct datasheet link)</b>, and click <b>Mentés (Save)</b>. Selecting <i>Lenyíló részletek (Dropdown Details)</i> will return no results.
|
||||
- name: info_tpp
|
||||
type: info
|
||||
label: Results Per Page
|
||||
default: For best results, change the <b>Torrent oldalanként</b> <i>Torrents per page:</i> setting to <b>100</b> on your account profile. The default is <i>35</i>.
|
||||
|
||||
login:
|
||||
# using cookie method because login page has embedded Google reCAPTCHA and 2FA support
|
||||
method: cookie
|
||||
inputs:
|
||||
cookie: "{{ .Config.cookie }}"
|
||||
test:
|
||||
path: index.php
|
||||
selector: a[href^="logout.php?k="]
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: browse.php
|
||||
categories: [1, 2, 8, 7, 18, 17, 4, 3, 23, 19, 20, 24, 21, 22, 35, 36, 25, 30, 31, 33, 43, 42, 32, 29, 28, 27, 26]
|
||||
- path: browse.php
|
||||
categories: [41, 34, 40, 39]
|
||||
inputs:
|
||||
xxx: 1
|
||||
|
||||
inputs:
|
||||
$raw: "{{ range .Categories }}cat[]={{.}}&{{end}}"
|
||||
search: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{ else }}{{ .Keywords }}{{ end }}"
|
||||
# 0 both, 1 onlyactive, 2 onlydead, 3 onlyfree, 4 x2 torrents, 5 mytorrents, 6 waiting for seeds
|
||||
type: "{{ if .Config.freeleech }}3{{ else }}0{{ end }}"
|
||||
sort: "{{ .Config.sort }}"
|
||||
order: "{{ .Config.type }}"
|
||||
# does not support imdbid searches
|
||||
# can support genre searching but you need to know the id, eg &genre2=1 for Comedy (id is 2)
|
||||
|
||||
rows:
|
||||
selector: tr.torrent-row
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: a[href^="browse.php?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
title:
|
||||
selector: a[href*="details.php?id="]
|
||||
details:
|
||||
selector: a[href*="details.php?id="]
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href^="download.php?id="]
|
||||
attribute: href
|
||||
poster:
|
||||
selector: a[href^="download.php?id="] button
|
||||
attribute: data-poster
|
||||
imdbid:
|
||||
selector: a[href*="imdb.com/title/tt"]
|
||||
attribute: href
|
||||
date:
|
||||
selector: div.torrent-date > strong
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["\u00a0", " "]
|
||||
- name: append
|
||||
args: " +01:00" # CET
|
||||
- name: dateparse
|
||||
args: "yyyy-MM-dd HH:mm:ss zzz"
|
||||
size:
|
||||
selector: div.torrent-size-box
|
||||
grabs:
|
||||
selector: td:nth-last-child(4)
|
||||
seeders:
|
||||
selector: td:nth-last-child(3)
|
||||
leechers:
|
||||
selector: td:nth-last-child(2)
|
||||
genre:
|
||||
selector: div.torrent-meta-line > span:nth-child(2)
|
||||
attribute: title
|
||||
description:
|
||||
case:
|
||||
img[src="/pic/yes.png"]: "Verified: {{ .Result.genre }}"
|
||||
img[src="/pic/nincs.png"]: "Unverified: {{ .Result.genre }}"
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
span:contains("x0"): 0
|
||||
"*": 1
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
span:contains("x2"): 2
|
||||
span:contains("x4"): 4
|
||||
"*": 1
|
||||
minimumratio:
|
||||
text: 1.0
|
||||
minimumseedtime:
|
||||
# 2 days (as seconds = 2 x 24 x 60 x 60)
|
||||
text: 172800
|
||||
# engine n/a
|
||||
@@ -0,0 +1,162 @@
|
||||
---
|
||||
id: lp-bits
|
||||
name: LP-Bits 2.0
|
||||
description: LP-Bits 2.0 is a Private Torrent Tracker for Linkin Park Music Releases."
|
||||
language: en-US
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://lp-bits.com/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 409, cat: Audio/Video, desc: "Video Audience Shot"}
|
||||
- {id: 404, cat: Audio/Video, desc: "Documentaries \ Misc"}
|
||||
- {id: 406, cat: Audio/Video, desc: "Music Videos"}
|
||||
- {id: 407, cat: Audio, desc: "Audio Professional"}
|
||||
- {id: 408, cat: Audio/Video, desc: "Pro Shot Video"}
|
||||
- {id: 410, cat: Audio, desc: "Audio Audience Shot"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
music-search: [q]
|
||||
|
||||
settings:
|
||||
- name: cookie
|
||||
type: text
|
||||
label: Cookie
|
||||
- name: info_cookie
|
||||
type: info_cookie
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
default: 4
|
||||
options:
|
||||
4: created
|
||||
7: seeders
|
||||
5: size
|
||||
1: title
|
||||
- name: type
|
||||
type: select
|
||||
label: Order requested from site
|
||||
default: desc
|
||||
options:
|
||||
desc: desc
|
||||
asc: asc
|
||||
- name: info_tpp
|
||||
type: info
|
||||
label: Results Per Page
|
||||
default: For best results, change the <b>Torrents per page:</b> setting to <b>100</b> on your account profile.
|
||||
- name: info_activity
|
||||
type: info
|
||||
label: Account Inactivity
|
||||
default: "Account retention rules:<ol><li>Veteran User and above will be retained forever</li><li>Elite User and above will not have their account deleted after parking (in the control panel)</li><li>Users with a parked account will be deleted if they do not log in for 400 consecutive days</li><li>Users with a non-parked account will be deleted if they do not log in for 150 consecutive days</li><li>Users who have no traffic (i.e. upload/download data are both 0) will be deleted if they do not log in for 100 consecutive days.</li></ol>"
|
||||
|
||||
login:
|
||||
# using cookie method because site does a JS call to API/Challenge via JQuery to load response parm required for takelogin.php
|
||||
method: cookie
|
||||
inputs:
|
||||
cookie: "{{ .Config.cookie }}"
|
||||
test:
|
||||
path: index.php
|
||||
selector: a[href="logout.php"]
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: torrents.php
|
||||
inputs:
|
||||
$raw: "{{ range .Categories }}cat{{.}}=1&{{end}}"
|
||||
search: "{{ .Keywords }}"
|
||||
# 0 incldead, 1 active, 2 dead
|
||||
incldead: 0
|
||||
# 0 all, 1 normal, 2 free, 3 2x, 4 2xfree, 5 50%, 6 2x50%, 7 30%
|
||||
spstate: "{{ if .Config.freeleech }}2{{ else }}0{{ end }}"
|
||||
# 0 title, 1 descr, 3 uploader, 4 imdburl
|
||||
search_area: 0
|
||||
# 0 AND, 1 OR, 2 exact
|
||||
search_mode: 0
|
||||
sort: "{{ .Config.sort }}"
|
||||
type: "{{ .Config.type }}"
|
||||
notnewword: 1
|
||||
|
||||
rows:
|
||||
selector: table.torrents > tbody > tr:has(a[href^="download.php?id="])
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: a[href^="?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
title:
|
||||
selector: a[title][href^="details.php?id="]
|
||||
attribute: title
|
||||
details:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href^="download.php?id="]
|
||||
attribute: href
|
||||
poster:
|
||||
selector: img[data-src]
|
||||
attribute: data-src
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["pic/imdb_pic/nophoto.gif", ""]
|
||||
date_elapsed:
|
||||
# time type: time elapsed (default)
|
||||
selector: td.rowfollow:nth-child(4) > span[title]
|
||||
attribute: title
|
||||
optional: true
|
||||
filters:
|
||||
- name: append
|
||||
args: " +08:00" # CST
|
||||
- name: dateparse
|
||||
args: "yyyy-MM-dd HH:mm:ss zzz"
|
||||
date_added:
|
||||
# time added
|
||||
selector: td.rowfollow:nth-child(4):not(:has(span))
|
||||
optional: true
|
||||
filters:
|
||||
- name: append
|
||||
args: " +08:00" # CST
|
||||
- name: dateparse
|
||||
args: "yyyy-MM-ddHH:mm:ss zzz"
|
||||
date:
|
||||
text: "{{ if or .Result.date_elapsed .Result.date_added }}{{ or .Result.date_elapsed .Result.date_added }}{{ else }}now{{ end }}"
|
||||
size:
|
||||
selector: td.rowfollow:nth-child(5)
|
||||
optional: true
|
||||
default: 512MB
|
||||
seeders:
|
||||
selector: td.rowfollow:nth-child(6)
|
||||
optional: true
|
||||
default: 0
|
||||
leechers:
|
||||
selector: td.rowfollow:nth-child(7)
|
||||
optional: true
|
||||
default: 0
|
||||
grabs:
|
||||
selector: td.rowfollow:nth-child(8)
|
||||
optional: true
|
||||
default: 0
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img.pro_free: 0
|
||||
img.pro_free2up: 0
|
||||
img.pro_50pctdown: 0.5
|
||||
img.pro_50pctdown2up: 0.5
|
||||
img.pro_30pctdown: 0.3
|
||||
"*": 1
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
img.pro_50pctdown2up: 2
|
||||
img.pro_free2up: 2
|
||||
img.pro_2up: 2
|
||||
"*": 1
|
||||
# NexusPHP v1.10.2 2026-04-11 (custom)
|
||||
@@ -0,0 +1,190 @@
|
||||
---
|
||||
id: luminarr-api
|
||||
name: Luminarr (API)
|
||||
description: "Luminarr is a Private Torrent Tracker for MOVIES / TV"
|
||||
language: en-US
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://luminarr.me/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: Movies, desc: "Movies"}
|
||||
- {id: 2, cat: TV, desc: "TV"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid, tvdbid, tmdbid]
|
||||
movie-search: [q, imdbid, tmdbid]
|
||||
|
||||
settings:
|
||||
- name: apikey
|
||||
type: text
|
||||
label: APIKey
|
||||
- name: info_key
|
||||
type: info
|
||||
label: About your API key
|
||||
default: "Find or Generate a new API Token by accessing your <a href=\"https://luminarr.me/\" target=\"_blank\">luminarr.me</a> account <i>My Settings</i> page and clicking on the <b>API Key</b> tab."
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: single_file_release_use_filename
|
||||
type: checkbox
|
||||
label: Use filename as title for single file releases
|
||||
default: true
|
||||
- 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
|
||||
- name: info_activity
|
||||
type: info
|
||||
label: Account Inactivity
|
||||
default: "<ul><li>To avoid your account being disabled, you must login at least once every 3 months (90 days). Accounts will be pruned three months after deactivation for inactivity.</li><li> Luminarr is a sharing community, not a collection service. You must actively participate by uploading or downloading content within 30 days of account creation. Accounts that show no activity within this period may be pruned.</li></ul>"
|
||||
|
||||
login:
|
||||
path: api/torrents
|
||||
method: get
|
||||
error:
|
||||
- selector: a[href*="/login"]
|
||||
message:
|
||||
text: "The API key was not accepted by {{ .Config.sitelink }}."
|
||||
- selector: :root:contains("Account is Banned")
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://hdinnovations.github.io/UNIT3D/torrent_api.html
|
||||
# https://github.com/HDInnovations/UNIT3D/blob/master/app/Http/Controllers/API/TorrentController.php#L657
|
||||
- path: api/torrents/filter
|
||||
response:
|
||||
type: json
|
||||
|
||||
headers:
|
||||
Authorization: ["Bearer {{ .Config.apikey }}"]
|
||||
|
||||
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
|
||||
$raw: "{{ range .Categories }}&categories[]={{.}}{{end}}"
|
||||
name: "{{ .Keywords }}"
|
||||
seasonNumber: "{{ .Query.Season }}"
|
||||
episodeNumber: "{{ .Query.Ep }}"
|
||||
imdbId: "{{ .Query.IMDBIDShort }}"
|
||||
tmdbId: "{{ .Query.TMDBID }}"
|
||||
tvdbId: "{{ .Query.TVDBID }}"
|
||||
"free[]": "{{ if .Config.freeleech }}100{{ else }}{{ end }}"
|
||||
sortField: "{{ .Config.sort }}"
|
||||
sortDirection: "{{ .Config.type }}"
|
||||
perPage: 100
|
||||
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
args: ["\\.", " "]
|
||||
|
||||
rows:
|
||||
selector: data
|
||||
attribute: attributes
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: category_id
|
||||
title_optional:
|
||||
selector: name
|
||||
title_filename:
|
||||
selector: "files[0].name"
|
||||
optional: true
|
||||
files:
|
||||
selector: num_file
|
||||
title:
|
||||
text: "{{ if and (.Config.single_file_release_use_filename) (eq .Result.files \"1\") (.Result.title_filename) }}{{ .Result.title_filename }}{{ else }}{{ .Result.title_optional }}{{ end }}"
|
||||
details:
|
||||
selector: details_link
|
||||
download:
|
||||
selector: download_link
|
||||
poster:
|
||||
selector: meta.poster
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["https://via.placeholder.com/90x135", ""]
|
||||
imdbid:
|
||||
selector: imdb_id
|
||||
tmdbid:
|
||||
selector: tmdb_id
|
||||
tvdbid:
|
||||
selector: tvdb_id
|
||||
genre:
|
||||
selector: meta.genres
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["(?i)(Science Fiction)", "Science_Fiction"]
|
||||
- name: re_replace
|
||||
args: ["(?i)(TV Movie)", "TV_Movie"]
|
||||
- name: replace
|
||||
args: [" & ", "_&_"]
|
||||
_internal:
|
||||
selector: internal
|
||||
case:
|
||||
False: "{{ .False }}"
|
||||
True: "{{ .True }}"
|
||||
description:
|
||||
text: "{{ if .Result._internal }}Internal{{ else }}{{ end }}{{ if and .Result._internal .Result.genre }} | {{ else }}{{ end }}{{ .Result.genre }}"
|
||||
seeders:
|
||||
selector: seeders
|
||||
leechers:
|
||||
selector: leechers
|
||||
grabs:
|
||||
selector: times_completed
|
||||
date:
|
||||
# "created_at": "2021-10-18T00:34:50.000000Z" is returned by Newtonsoft.Json.Linq as 18/10/2021 00:34:50
|
||||
selector: created_at
|
||||
filters:
|
||||
- name: append
|
||||
args: " +00:00" # GMT
|
||||
- name: dateparse
|
||||
args: "MM/dd/yyyy HH:mm:ss zzz"
|
||||
size:
|
||||
selector: size
|
||||
_featured:
|
||||
selector: featured
|
||||
case:
|
||||
False: "{{ .False }}"
|
||||
True: "{{ .True }}"
|
||||
downloadvolumefactor_freeleech:
|
||||
# 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
|
||||
downloadvolumefactor:
|
||||
text: "{{ if .Result._featured }}0{{ else }}{{ .Result.downloadvolumefactor_freeleech }}{{ end }}"
|
||||
uploadvolumefactor_double_upload:
|
||||
# api returns False, True
|
||||
selector: double_upload
|
||||
case:
|
||||
False: 1 # normal
|
||||
True: 2 # double
|
||||
uploadvolumefactor:
|
||||
text: "{{ if .Result._featured }}2{{ else }}{{ .Result.uploadvolumefactor_double_upload }}{{ end }}"
|
||||
# global MR is 0.6 but torrents must be seeded for 3 days regardless of ratio
|
||||
# minimumratio:
|
||||
# text: 0.6
|
||||
minimumseedtime:
|
||||
# 3 days (as seconds = 3 x 24 x 60 x 60)
|
||||
text: 259200
|
||||
# json UNIT3D 9.2.0
|
||||
@@ -0,0 +1,156 @@
|
||||
---
|
||||
id: memphis
|
||||
name: Memphis
|
||||
description: "Memphis is a FRENCH Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
language: fr-FR
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://memphis.fit/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
# from https://memphis.fit/api/torznab?t=caps&apikey=YOUR-PASSKEY
|
||||
- {id: 2000, cat: Movies, desc: "Movies"}
|
||||
- {id: 2030, cat: Movies/SD, desc: "Movies SD"}
|
||||
- {id: 2040, cat: Movies/HD, desc: "Movies HD"}
|
||||
- {id: 2045, cat: Movies/UHD, desc: "Movies UHD"}
|
||||
- {id: 5000, cat: TV, desc: "TV"}
|
||||
- {id: 5030, cat: TV/SD, desc: "TV SD"}
|
||||
- {id: 5040, cat: TV/HD, desc: "TV HD"}
|
||||
- {id: 5045, cat: TV/UHD, desc: "TV UHD"}
|
||||
- {id: 5060, cat: TV/Sport, desc: "TV Sport"}
|
||||
- {id: 5070, cat: TV/Anime, desc: "TV Anime"}
|
||||
- {id: 5060, cat: TV/Sport, desc: "Sport"}
|
||||
- {id: 4050, cat: PC/Games, desc: "PC/Games"}
|
||||
- {id: 7020, cat: Books/EBook, desc: "Books/Ebook"}
|
||||
- {id: 3000, cat: Audio, desc: "Audio"}
|
||||
- {id: 4000, cat: PC, desc: "PC"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
music-search: [q]
|
||||
book-search: [q]
|
||||
|
||||
settings:
|
||||
- name: passkey
|
||||
type: text
|
||||
label: PassKey
|
||||
- name: info_key
|
||||
type: info
|
||||
label: About your PassKey
|
||||
default: "You can find the API PassKey Key by accessing the <a href=\"https://memphis.fit/?view=member-api\" target=\"_blank\">Memphis API</a> page and scrolling down to the <b>Cross-seed</b> section."
|
||||
- name: multilang
|
||||
type: checkbox
|
||||
label: Replace MULTi by another language in release name
|
||||
default: false
|
||||
- name: multilanguage
|
||||
type: select
|
||||
label: Replace MULTi by this language
|
||||
default: FRENCH
|
||||
options:
|
||||
FRENCH: FRENCH
|
||||
MULTi.FRENCH: MULTi.FRENCH
|
||||
ENGLISH: ENGLISH
|
||||
MULTi.ENGLISH: MULTi.ENGLISH
|
||||
VOSTFR: VOSTFR
|
||||
MULTi.VOSTFR: MULTi.VOSTFR
|
||||
- name: vostfr
|
||||
type: checkbox
|
||||
label: Replace VOSTFR and SUBFRENCH with ENGLISH
|
||||
default: false
|
||||
|
||||
login:
|
||||
path: api/torznab
|
||||
method: get
|
||||
inputs:
|
||||
t: search
|
||||
apikey: "{{ .Config.passkey }}"
|
||||
limit: 1
|
||||
error:
|
||||
- selector: error
|
||||
message:
|
||||
selector: error[description]
|
||||
attribute: description
|
||||
|
||||
search:
|
||||
paths:
|
||||
# docs at https://memphis.fit/?view=member-api
|
||||
- path: api/torznab
|
||||
response:
|
||||
type: xml
|
||||
|
||||
inputs:
|
||||
apikey: "{{ .Config.passkey }}"
|
||||
t: "{{ if .Keywords }}{{ .Query.Type }}{{ else }}search{{ end }}"
|
||||
q: "{{ .Keywords }}"
|
||||
cat: "{{ join .Categories \",\" }}"
|
||||
season: "{{ .Query.Season }}"
|
||||
ep: "{{ .Query.Ep }}"
|
||||
limit: 100
|
||||
|
||||
rows:
|
||||
selector: rss > channel > item
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: "[name=category]"
|
||||
attribute: value
|
||||
title_phase1:
|
||||
selector: title
|
||||
title_vostfr:
|
||||
text: "{{ .Result.title_phase1 }}"
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["(?i)\\b(vostfr|subfrench)\\b", "ENGLISH"]
|
||||
title_phase2:
|
||||
text: "{{ if .Config.vostfr }}{{ .Result.title_vostfr }}{{ else }}{{ .Result.title_phase1 }}{{ end }}"
|
||||
title_multilang:
|
||||
text: "{{ .Result.title_phase2 }}"
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["(?i)\\b(MULTI(?!.*(?:FRENCH|ENGLISH|VOSTFR|VF2|VFF|VFQ|VOQ|VFI|VOF)))\\b", "{{ .Config.multilanguage }}"]
|
||||
title:
|
||||
text: "{{ if .Config.multilang }}{{ .Result.title_multilang }}{{ else }}{{ .Result.title_phase2 }}{{ end }}"
|
||||
details:
|
||||
selector: comments
|
||||
filters:
|
||||
- name: htmldecode
|
||||
download:
|
||||
selector: enclosure
|
||||
attribute: url
|
||||
tmdbid:
|
||||
selector: comments
|
||||
filters:
|
||||
- name: regexp
|
||||
args: media=tmdb.+?(\d+)
|
||||
date:
|
||||
# e.g. Tue, 31 Mar 2026 20:06:13 +0100
|
||||
selector: pubDate
|
||||
filters:
|
||||
- name: dateparse
|
||||
args: "ddd, dd MMM yyyy HH:mm:ss zzz"
|
||||
size:
|
||||
selector: "[name=size]"
|
||||
attribute: value
|
||||
seeders:
|
||||
selector: "[name=seeders]"
|
||||
attribute: value
|
||||
leechers:
|
||||
selector: "[name=peers]"
|
||||
attribute: value
|
||||
grabs:
|
||||
selector: "[name=grabs]"
|
||||
attribute: value
|
||||
downloadvolumefactor:
|
||||
text: 0
|
||||
uploadvolumefactor:
|
||||
text: 1
|
||||
minimumratio:
|
||||
text: 1.0
|
||||
minimumseedtime:
|
||||
# 3 days (as seconds = 3 x 24 x 60 x 60)
|
||||
text: 259200
|
||||
# torznab xml
|
||||
@@ -0,0 +1,193 @@
|
||||
---
|
||||
id: midnightscene
|
||||
name: MidnightScene
|
||||
description: "MidnightScene is a Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
language: en-US
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://midnightscene.cc/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: Movies, desc: "Movies"}
|
||||
- {id: 2, cat: TV, desc: "TV"}
|
||||
- {id: 3, cat: Audio, desc: "Music"}
|
||||
- {id: 4, cat: Console, desc: "Games"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid, tvdbid, tmdbid]
|
||||
movie-search: [q, imdbid, tmdbid]
|
||||
music-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://midnightscene.cc/\" target=\"_blank\">MidnightScene</a> account <i>My Settings</i> page and clicking on the <b>API Key</b> tab."
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: single_file_release_use_filename
|
||||
type: checkbox
|
||||
label: Use filename as title for single file releases
|
||||
default: true
|
||||
- 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
|
||||
- name: info_activity
|
||||
type: info
|
||||
label: Account Inactivity
|
||||
default: "Members must log into the site at minimum every 90 days or their account will be disabled for inactivity."
|
||||
|
||||
login:
|
||||
path: api/torrents
|
||||
method: get
|
||||
error:
|
||||
- selector: a[href*="/login"]
|
||||
message:
|
||||
text: "The API key was not accepted by {{ .Config.sitelink }}."
|
||||
- selector: :root:contains("Account is Banned")
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://hdinnovations.github.io/UNIT3D/torrent_api.html
|
||||
# https://github.com/HDInnovations/UNIT3D/blob/master/app/Http/Controllers/API/TorrentController.php#L657
|
||||
- path: api/torrents/filter
|
||||
response:
|
||||
type: json
|
||||
|
||||
headers:
|
||||
Authorization: ["Bearer {{ .Config.apikey }}"]
|
||||
|
||||
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
|
||||
$raw: "{{ range .Categories }}&categories[]={{.}}{{end}}"
|
||||
name: "{{ .Keywords }}"
|
||||
seasonNumber: "{{ .Query.Season }}"
|
||||
episodeNumber: "{{ .Query.Ep }}"
|
||||
imdbId: "{{ .Query.IMDBIDShort }}"
|
||||
tmdbId: "{{ .Query.TMDBID }}"
|
||||
tvdbId: "{{ .Query.TVDBID }}"
|
||||
"free[]": "{{ if .Config.freeleech }}100{{ else }}{{ end }}"
|
||||
sortField: "{{ .Config.sort }}"
|
||||
sortDirection: "{{ .Config.type }}"
|
||||
perPage: 100
|
||||
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
args: ["\\.", " "]
|
||||
|
||||
rows:
|
||||
selector: data
|
||||
attribute: attributes
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: category_id
|
||||
title_optional:
|
||||
selector: name
|
||||
title_filename:
|
||||
selector: "files[0].name"
|
||||
optional: true
|
||||
files:
|
||||
selector: num_file
|
||||
title:
|
||||
text: "{{ if and (.Config.single_file_release_use_filename) (eq .Result.files \"1\") (.Result.title_filename) }}{{ .Result.title_filename }}{{ else }}{{ .Result.title_optional }}{{ end }}"
|
||||
details:
|
||||
selector: details_link
|
||||
download:
|
||||
selector: download_link
|
||||
poster:
|
||||
selector: meta.poster
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["https://via.placeholder.com/90x135", ""]
|
||||
imdbid:
|
||||
selector: imdb_id
|
||||
tmdbid:
|
||||
selector: tmdb_id
|
||||
tvdbid:
|
||||
selector: tvdb_id
|
||||
genre:
|
||||
selector: meta.genres
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["(?i)(Science Fiction)", "Science_Fiction"]
|
||||
- name: re_replace
|
||||
args: ["(?i)(TV Movie)", "TV_Movie"]
|
||||
- name: replace
|
||||
args: [" & ", "_&_"]
|
||||
_internal:
|
||||
selector: internal
|
||||
case:
|
||||
False: "{{ .False }}"
|
||||
True: "{{ .True }}"
|
||||
description:
|
||||
text: "{{ if .Result._internal }}Internal{{ else }}{{ end }}{{ if and .Result._internal .Result.genre }} | {{ else }}{{ end }}{{ .Result.genre }}"
|
||||
seeders:
|
||||
selector: seeders
|
||||
leechers:
|
||||
selector: leechers
|
||||
grabs:
|
||||
selector: times_completed
|
||||
date:
|
||||
# "created_at": "2021-10-18T00:34:50.000000Z" is returned by Newtonsoft.Json.Linq as 18/10/2021 00:34:50
|
||||
selector: created_at
|
||||
filters:
|
||||
- name: append
|
||||
args: " +00:00" # GMT
|
||||
- name: dateparse
|
||||
args: "MM/dd/yyyy HH:mm:ss zzz"
|
||||
size:
|
||||
selector: size
|
||||
_featured:
|
||||
selector: featured
|
||||
case:
|
||||
False: "{{ .False }}"
|
||||
True: "{{ .True }}"
|
||||
downloadvolumefactor_freeleech:
|
||||
# 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
|
||||
downloadvolumefactor:
|
||||
text: "{{ if .Result._featured }}0{{ else }}{{ .Result.downloadvolumefactor_freeleech }}{{ end }}"
|
||||
uploadvolumefactor_double_upload:
|
||||
# api returns False, True
|
||||
selector: double_upload
|
||||
case:
|
||||
False: 1 # normal
|
||||
True: 2 # double
|
||||
uploadvolumefactor:
|
||||
text: "{{ if .Result._featured }}2{{ else }}{{ .Result.uploadvolumefactor_double_upload }}{{ end }}"
|
||||
# global MR is 0.4 but torrents must be seeded for 2 days regardless of ratio
|
||||
# minimumratio:
|
||||
# text: 0.4
|
||||
minimumseedtime:
|
||||
# 2 days (as seconds = 2 x 24 x 60 x 60)
|
||||
text: 172800
|
||||
# json UNIT3D 9.2.0
|
||||
@@ -0,0 +1,197 @@
|
||||
---
|
||||
id: milnueve-api
|
||||
name: Milnueve (API)
|
||||
description: "Milnueve is a SPANISH Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
language: es-ES
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://tracker.milnueve.cc/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: Movies, desc: "Películas"}
|
||||
- {id: 2, cat: TV, desc: "Series"}
|
||||
- {id: 3, cat: Movies/Other, desc: "Películas Anime"}
|
||||
- {id: 4, cat: TV/Anime, desc: "Series Anime"}
|
||||
- {id: 5, cat: Audio, desc: "Musica"}
|
||||
- {id: 7, cat: Movies/SD, desc: "VHS / Retro"}
|
||||
- {id: 8, cat: TV/Anime, desc: "Anime en Catalan"}
|
||||
- {id: 9, cat: TV/Documentary, desc: "Zona Documentales"}
|
||||
- {id: 10, cat: Movies, desc: "Zona Latino"}
|
||||
- {id: 6, cat: Books/Comics, desc: "Manga"}
|
||||
- {id: 11, cat: Books/EBook, desc: "Libros"}
|
||||
- {id: 12, cat: Books/Comics, desc: "Cómics"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid, tvdbid, tmdbid]
|
||||
movie-search: [q, imdbid, tmdbid]
|
||||
book-search: [q]
|
||||
music-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://tracker.milnueve.cc/\" target=\"_blank\">Milnueve</a> account <i>My Settings</i> page and clicking on the <b>API Key</b> tab."
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: single_file_release_use_filename
|
||||
type: checkbox
|
||||
label: Use filename as title for single file releases
|
||||
default: true
|
||||
- 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
|
||||
error:
|
||||
- selector: a[href*="/login"]
|
||||
message:
|
||||
text: "The API key was not accepted by {{ .Config.sitelink }}."
|
||||
- selector: :root:contains("Account is Banned")
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://hdinnovations.github.io/UNIT3D/torrent_api.html
|
||||
# https://github.com/HDInnovations/UNIT3D/blob/master/app/Http/Controllers/API/TorrentController.php#L657
|
||||
- path: api/torrents/filter
|
||||
response:
|
||||
type: json
|
||||
|
||||
headers:
|
||||
Authorization: ["Bearer {{ .Config.apikey }}"]
|
||||
|
||||
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
|
||||
$raw: "{{ range .Categories }}&categories[]={{.}}{{end}}"
|
||||
name: "{{ .Keywords }}"
|
||||
seasonNumber: "{{ .Query.Season }}"
|
||||
episodeNumber: "{{ .Query.Ep }}"
|
||||
imdbId: "{{ .Query.IMDBIDShort }}"
|
||||
tmdbId: "{{ .Query.TMDBID }}"
|
||||
tvdbId: "{{ .Query.TVDBID }}"
|
||||
"free[]": "{{ if .Config.freeleech }}100{{ else }}{{ end }}"
|
||||
sortField: "{{ .Config.sort }}"
|
||||
sortDirection: "{{ .Config.type }}"
|
||||
perPage: 100
|
||||
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
args: ["\\.", " "]
|
||||
|
||||
rows:
|
||||
selector: data
|
||||
attribute: attributes
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: category_id
|
||||
title_optional:
|
||||
selector: name
|
||||
title_filename:
|
||||
selector: "files[0].name"
|
||||
optional: true
|
||||
files:
|
||||
selector: num_file
|
||||
title:
|
||||
text: "{{ if and (.Config.single_file_release_use_filename) (eq .Result.files \"1\") (.Result.title_filename) }}{{ .Result.title_filename }}{{ else }}{{ .Result.title_optional }}{{ end }} Spanish"
|
||||
details:
|
||||
selector: details_link
|
||||
download:
|
||||
selector: download_link
|
||||
poster:
|
||||
selector: meta.poster
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["https://via.placeholder.com/90x135", ""]
|
||||
imdbid:
|
||||
selector: imdb_id
|
||||
tmdbid:
|
||||
selector: tmdb_id
|
||||
tvdbid:
|
||||
selector: tvdb_id
|
||||
genre:
|
||||
selector: meta.genres
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["(?i)(Ciencia ficción)", "Ciencia_ficción"]
|
||||
- name: re_replace
|
||||
args: ["(?i)(Película de TV)", "Película_de_TV"]
|
||||
- name: replace
|
||||
args: [" & ", "_&_"]
|
||||
_internal:
|
||||
selector: internal
|
||||
case:
|
||||
False: "{{ .False }}"
|
||||
True: "{{ .True }}"
|
||||
description:
|
||||
text: "{{ if .Result._internal }}Internal{{ else }}{{ end }}{{ if and .Result._internal .Result.genre }} | {{ else }}{{ end }}{{ .Result.genre }}"
|
||||
seeders:
|
||||
selector: seeders
|
||||
leechers:
|
||||
selector: leechers
|
||||
grabs:
|
||||
selector: times_completed
|
||||
date:
|
||||
# "created_at": "2021-10-18T00:34:50.000000Z" is returned by Newtonsoft.Json.Linq as 18/10/2021 00:34:50
|
||||
selector: created_at
|
||||
filters:
|
||||
- name: append
|
||||
args: " +00:00" # GMT
|
||||
- name: dateparse
|
||||
args: "MM/dd/yyyy HH:mm:ss zzz"
|
||||
size:
|
||||
selector: size
|
||||
_featured:
|
||||
selector: featured
|
||||
case:
|
||||
False: "{{ .False }}"
|
||||
True: "{{ .True }}"
|
||||
downloadvolumefactor_freeleech:
|
||||
# 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
|
||||
downloadvolumefactor:
|
||||
text: "{{ if .Result._featured }}0{{ else }}{{ .Result.downloadvolumefactor_freeleech }}{{ end }}"
|
||||
uploadvolumefactor_double_upload:
|
||||
# api returns False, True
|
||||
selector: double_upload
|
||||
case:
|
||||
False: 1 # normal
|
||||
True: 2 # double
|
||||
uploadvolumefactor:
|
||||
text: "{{ if .Result._featured }}2{{ else }}{{ .Result.uploadvolumefactor_double_upload }}{{ end }}"
|
||||
minimumratio:
|
||||
text: 1.0
|
||||
minimumseedtime:
|
||||
# 14 days (as seconds = 14 x 24 x 60 x 60)
|
||||
text: 1209600
|
||||
# json UNIT3D 9.2.0
|
||||
@@ -0,0 +1,175 @@
|
||||
---
|
||||
id: momentpt
|
||||
name: MomentPT
|
||||
description: "MomentPT is a CHINESE Private Torrent Tracker for Photography"
|
||||
language: zh-CN
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://www.momentpt.top/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 401, cat: Other, desc: "写真(Portraiture)"}
|
||||
- {id: 402, cat: Other, desc: "人像(Portrait)"}
|
||||
- {id: 403, cat: Other, desc: "风光(Landscape)"}
|
||||
- {id: 404, cat: Other, desc: "纪实(Documentary)"}
|
||||
- {id: 416, cat: Other, desc: "杂志(Magazine)"}
|
||||
- {id: 415, cat: Other, desc: "静物(Still Life)"}
|
||||
- {id: 414, cat: Other, desc: "儿童(Children)"}
|
||||
- {id: 413, cat: Other, desc: "超现实(Surreal)"}
|
||||
- {id: 412, cat: Other, desc: "美食(Cuisine)"}
|
||||
- {id: 411, cat: Other, desc: "动物(Animals)"}
|
||||
- {id: 405, cat: Other, desc: "人文(Humanity)"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
|
||||
settings:
|
||||
- name: cookie
|
||||
type: text
|
||||
label: Cookie
|
||||
- name: info_cookie
|
||||
type: info_cookie
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
default: 4
|
||||
options:
|
||||
4: created
|
||||
7: seeders
|
||||
5: size
|
||||
1: title
|
||||
- name: type
|
||||
type: select
|
||||
label: Order requested from site
|
||||
default: desc
|
||||
options:
|
||||
desc: desc
|
||||
asc: asc
|
||||
- name: info_tpp
|
||||
type: info
|
||||
label: Results Per Page
|
||||
default: For best results, change the <b>Torrents per page:</b> setting to <b>100</b> on your account profile.
|
||||
- name: info_activity
|
||||
type: info
|
||||
label: Account Inactivity
|
||||
default: "Account retention rules:<ol><li>Veteran User and above will be retained forever</li><li>Elite User and above will not have their account deleted after parking (in the control panel)</li><li>Users with a parked account will be deleted if they do not log in for 400 consecutive days</li><li>Users with a non-parked account will be deleted if they do not log in for 150 consecutive days</li><li>Users who have no traffic (i.e. upload/download data are both 0) will be deleted if they do not log in for 100 consecutive days.</li></ol>"
|
||||
|
||||
login:
|
||||
# using cookie method because site does a JS call to API/Challenge via JQuery to load response parm required for takelogin.php
|
||||
method: cookie
|
||||
inputs:
|
||||
cookie: "{{ .Config.cookie }}"
|
||||
test:
|
||||
path: index.php
|
||||
selector: a[href="logout.php"]
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: torrents.php
|
||||
inputs:
|
||||
$raw: "{{ range .Categories }}cat{{.}}=1&{{end}}"
|
||||
search: "{{ .Keywords }}"
|
||||
# 0 incldead, 1 active, 2 dead
|
||||
incldead: 0
|
||||
# 0 all, 1 normal, 2 free, 3 2x, 4 2xfree, 5 50%, 6 2x50%, 7 30%
|
||||
spstate: "{{ if .Config.freeleech }}2{{ else }}0{{ end }}"
|
||||
# 0 title, 1 descr, 3 uploader, 4 imdburl
|
||||
search_area: 0
|
||||
# 0 AND, 2 exact
|
||||
search_mode: 0
|
||||
sort: "{{ .Config.sort }}"
|
||||
type: "{{ .Config.type }}"
|
||||
notnewword: 1
|
||||
|
||||
rows:
|
||||
selector: table.torrents > tbody > tr:has(a[href*="download.php?id="])
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: a[href*="?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
title_default:
|
||||
selector: a[href*="details.php?id="]
|
||||
title:
|
||||
selector: a[title][href*="details.php?id="]
|
||||
attribute: title
|
||||
optional: true
|
||||
default: "{{ .Result.title_default }}"
|
||||
details:
|
||||
selector: a[href*="details.php?id="]
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href*="download.php?id="]
|
||||
attribute: href
|
||||
poster:
|
||||
selector: img[data-src]
|
||||
attribute: data-src
|
||||
date_elapsed:
|
||||
# time type: time elapsed (default)
|
||||
selector: td.rowfollow:nth-child(4) > span[title]
|
||||
attribute: title
|
||||
optional: true
|
||||
filters:
|
||||
- name: append
|
||||
args: " +08:00" # CST
|
||||
- name: dateparse
|
||||
args: "yyyy-MM-dd HH:mm:ss zzz"
|
||||
date_added:
|
||||
# time added
|
||||
selector: td.rowfollow:nth-child(4):not(:has(span))
|
||||
optional: true
|
||||
filters:
|
||||
- name: append
|
||||
args: " +08:00" # CST
|
||||
- name: dateparse
|
||||
args: "yyyy-MM-ddHH:mm:ss zzz"
|
||||
date:
|
||||
text: "{{ if or .Result.date_elapsed .Result.date_added }}{{ or .Result.date_elapsed .Result.date_added }}{{ else }}now{{ end }}"
|
||||
size:
|
||||
selector: td.rowfollow:nth-child(5)
|
||||
optional: true
|
||||
default: 512MB
|
||||
seeders:
|
||||
selector: td.rowfollow:nth-child(6)
|
||||
optional: true
|
||||
default: 0
|
||||
leechers:
|
||||
selector: td.rowfollow:nth-child(7)
|
||||
optional: true
|
||||
default: 0
|
||||
grabs:
|
||||
selector: td.rowfollow:nth-child(8)
|
||||
optional: true
|
||||
default: 0
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img.pro_free: 0
|
||||
img.pro_free2up: 0
|
||||
img.pro_50pctdown: 0.5
|
||||
img.pro_50pctdown2up: 0.5
|
||||
img.pro_30pctdown: 0.3
|
||||
"*": 1
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
img.pro_50pctdown2up: 2
|
||||
img.pro_free2up: 2
|
||||
img.pro_2up: 2
|
||||
"*": 1
|
||||
minimumratio:
|
||||
text: 2.0
|
||||
minimumseedtime:
|
||||
# 2 days (as seconds = 2 x 24 x 60 x 60)
|
||||
text: 172800
|
||||
description:
|
||||
selector: td.rowfollow:nth-child(2)
|
||||
remove: a, b, font, img, span
|
||||
# NexusPHP v1.9.7 2025-09-24 (custom)
|
||||
@@ -0,0 +1,169 @@
|
||||
---
|
||||
id: musopia
|
||||
name: Musopia (音乐乌托邦)
|
||||
description: "Musopia (音乐乌托邦) is a CHINESE Private Torrent Tracker for MUSIC"
|
||||
language: zh-CN
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://www.musopia.vip/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 406, cat: Audio/Video, desc: "音乐MV / Music Videos"}
|
||||
- {id: 407, cat: Audio/Lossless, desc: "音乐 / Audio"} # wrongly listed as Sports
|
||||
- {id: 408, cat: Audio/Lossless, desc: "音乐 / HQ Audio"}
|
||||
- {id: 409, cat: Audio/Other, desc: "其他 / Misc"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
music-search: [q]
|
||||
|
||||
settings:
|
||||
- name: cookie
|
||||
type: text
|
||||
label: Cookie
|
||||
- name: info_cookie
|
||||
type: info_cookie
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
default: 4
|
||||
options:
|
||||
4: created
|
||||
7: seeders
|
||||
5: size
|
||||
1: title
|
||||
- name: type
|
||||
type: select
|
||||
label: Order requested from site
|
||||
default: desc
|
||||
options:
|
||||
desc: desc
|
||||
asc: asc
|
||||
- name: info_tpp
|
||||
type: info
|
||||
label: Results Per Page
|
||||
default: For best results, change the <b>Torrents per page:</b> setting to <b>100</b> on your account profile.
|
||||
- name: info_activity
|
||||
type: info
|
||||
label: Account Inactivity
|
||||
default: "Account retention rules:<ol><li>Veteran User and above will be retained forever</li><li>Elite User and above will not have their account deleted after parking (in the control panel)</li><li>Users with a parked account will be deleted if they do not log in for 400 consecutive days</li><li>Users with a non-parked account will be deleted if they do not log in for 150 consecutive days</li><li>Users who have no traffic (i.e. upload/download data are both 0) will be deleted if they do not log in for 100 consecutive days.</li></ol>"
|
||||
|
||||
login:
|
||||
# using cookie method because site does a JS call to API/Challenge via JQuery to load response parm required for takelogin.php
|
||||
method: cookie
|
||||
inputs:
|
||||
cookie: "{{ .Config.cookie }}"
|
||||
test:
|
||||
path: index.php
|
||||
selector: a[href="logout.php"]
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: torrents.php
|
||||
inputs:
|
||||
$raw: "{{ range .Categories }}cat{{.}}=1&{{end}}"
|
||||
search: "{{ .Keywords }}"
|
||||
# 0 incldead, 1 active, 2 dead
|
||||
incldead: 0
|
||||
# 0 all, 1 normal, 2 free, 3 2x, 4 2xfree, 5 50%, 6 2x50%, 7 30%
|
||||
spstate: "{{ if .Config.freeleech }}2{{ else }}0{{ end }}"
|
||||
# 0 title, 1 descr, 3 uploader, 4 imdburl
|
||||
search_area: 0
|
||||
# 0 AND, 1 OR, 2 exact
|
||||
search_mode: 0
|
||||
sort: "{{ .Config.sort }}"
|
||||
type: "{{ .Config.type }}"
|
||||
notnewword: 1
|
||||
|
||||
rows:
|
||||
selector: table.torrents > tbody > tr:has(a[href^="download.php?id="])
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: a[href^="?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
title_default:
|
||||
selector: a[href^="details.php?id="]
|
||||
title:
|
||||
selector: a[title][href^="details.php?id="]
|
||||
attribute: title
|
||||
optional: true
|
||||
default: "{{ .Result.title_default }}"
|
||||
details:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href^="download.php?id="]
|
||||
attribute: href
|
||||
poster:
|
||||
selector: img[data-src]
|
||||
attribute: data-src
|
||||
date_elapsed:
|
||||
# time type: time elapsed (default)
|
||||
selector: td.rowfollow:nth-child(4) > span[title]
|
||||
attribute: title
|
||||
optional: true
|
||||
filters:
|
||||
- name: append
|
||||
args: " +08:00" # CST
|
||||
- name: dateparse
|
||||
args: "yyyy-MM-dd HH:mm:ss zzz"
|
||||
date_added:
|
||||
# time added
|
||||
selector: td.rowfollow:nth-child(4):not(:has(span))
|
||||
optional: true
|
||||
filters:
|
||||
- name: append
|
||||
args: " +08:00" # CST
|
||||
- name: dateparse
|
||||
args: "yyyy-MM-ddHH:mm:ss zzz"
|
||||
date:
|
||||
text: "{{ if or .Result.date_elapsed .Result.date_added }}{{ or .Result.date_elapsed .Result.date_added }}{{ else }}now{{ end }}"
|
||||
size:
|
||||
selector: td.rowfollow:nth-child(5)
|
||||
optional: true
|
||||
default: 512MB
|
||||
seeders:
|
||||
selector: td.rowfollow:nth-child(6)
|
||||
optional: true
|
||||
default: 0
|
||||
leechers:
|
||||
selector: td.rowfollow:nth-child(7)
|
||||
optional: true
|
||||
default: 0
|
||||
grabs:
|
||||
selector: td.rowfollow:nth-child(8)
|
||||
optional: true
|
||||
default: 0
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img.pro_free: 0
|
||||
img.pro_free2up: 0
|
||||
img.pro_50pctdown: 0.5
|
||||
img.pro_50pctdown2up: 0.5
|
||||
img.pro_30pctdown: 0.3
|
||||
"*": 1
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
img.pro_50pctdown2up: 2
|
||||
img.pro_free2up: 2
|
||||
img.pro_2up: 2
|
||||
"*": 1
|
||||
minimumratio:
|
||||
text: 1.0
|
||||
minimumseedtime:
|
||||
# 6 days (as seconds = 6 x 24 x 60 x 60)
|
||||
text: 518400
|
||||
description:
|
||||
selector: td.rowfollow:nth-child(2)
|
||||
remove: a, b, font, img, span
|
||||
# NexusPHP v1.10.2 2026-04-11 (custom)
|
||||
@@ -0,0 +1,194 @@
|
||||
---
|
||||
id: muxuege
|
||||
name: Muxuege
|
||||
description: "Muxuege is a CHINESE Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
language: zh-CN
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://pt.muxuege.org/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 401, cat: Movies, desc: "电影/Movies"}
|
||||
- {id: 402, cat: TV, desc: "电视剧/TVSeries"}
|
||||
- {id: 403, cat: TV, desc: "综艺/TV Shows"}
|
||||
- {id: 404, cat: TV/Documentary, desc: "纪录片/Documentary"}
|
||||
- {id: 405, cat: TV/Anime, desc: "动漫/Anime"}
|
||||
- {id: 406, cat: Audio/Video, desc: "MV/Music Videos"}
|
||||
- {id: 407, cat: TV/Sport, desc: "体育/Sports"}
|
||||
- {id: 408, cat: Audio, desc: "音乐/Music"}
|
||||
- {id: 418, cat: Audio, desc: "广播剧/Radio Dramas"}
|
||||
- {id: 417, cat: Audio/Audiobook, desc: "有声书/Audiobooks"}
|
||||
- {id: 416, cat: TV, desc: "短剧/Playlet"}
|
||||
- {id: 415, cat: PC, desc: "软件/Software"}
|
||||
- {id: 414, cat: Other, desc: "图片/Pictures"}
|
||||
- {id: 413, cat: Other, desc: "教育/Education"}
|
||||
- {id: 412, cat: Books, desc: "电子书/E-books"}
|
||||
- {id: 411, cat: Console, desc: "游戏/Games"}
|
||||
- {id: 410, cat: PC/ISO, desc: "系统镜像/System Images"}
|
||||
- {id: 409, cat: Other, desc: "其他/Misc"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid, doubanid]
|
||||
movie-search: [q, imdbid, doubanid]
|
||||
music-search: [q]
|
||||
book-search: [q]
|
||||
|
||||
settings:
|
||||
- name: cookie
|
||||
type: text
|
||||
label: Cookie
|
||||
- name: info_cookie
|
||||
type: info_cookie
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
default: 4
|
||||
options:
|
||||
4: created
|
||||
7: seeders
|
||||
5: size
|
||||
1: title
|
||||
- name: type
|
||||
type: select
|
||||
label: Order requested from site
|
||||
default: desc
|
||||
options:
|
||||
desc: desc
|
||||
asc: asc
|
||||
- name: info_tpp
|
||||
type: info
|
||||
label: Results Per Page
|
||||
default: For best results, change the <b>Torrents per page:</b> setting to <b>100</b> on your account profile.
|
||||
- name: info_activity
|
||||
type: info
|
||||
label: Account Inactivity
|
||||
default: "Account retention rules:<ol><li>Veteran User and above will be retained forever</li><li>Elite User and above will not have their account deleted after parking (in the control panel)</li><li>Users with a parked account will be deleted if they do not log in for 400 consecutive days</li><li>Users with a non-parked account will be deleted if they do not log in for 150 consecutive days</li><li>Users who have no traffic (i.e. upload/download data are both 0) will be deleted if they do not log in for 100 consecutive days.</li></ol>"
|
||||
|
||||
login:
|
||||
# using cookie method because site does a JS call to API/Challenge via JQuery to load response parm required for takelogin.php
|
||||
method: cookie
|
||||
inputs:
|
||||
cookie: "{{ .Config.cookie }}"
|
||||
test:
|
||||
path: index.php
|
||||
selector: a[href="logout.php"]
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: torrents.php
|
||||
inputs:
|
||||
$raw: "{{ range .Categories }}cat{{.}}=1&{{end}}"
|
||||
search: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{ else }}{{ end }}{{ if and .Query.DoubanID (eq .Query.IMDBID .False) }}{{ .Query.DoubanID }}{{ else }}{{ end }}{{ if and (eq .Query.IMDBID .False) (eq .Query.DoubanID .False) }}{{ .Keywords }}{{ else }}{{ end }}"
|
||||
# 0 incldead, 1 active, 2 dead
|
||||
incldead: 0
|
||||
# 0 all, 1 normal, 2 free, 3 2x, 4 2xfree, 5 50%, 6 2x50%, 7 30%
|
||||
spstate: "{{ if .Config.freeleech }}2{{ else }}0{{ end }}"
|
||||
# 0 title, 1 descr, 3 uploader, 4 imdburl
|
||||
search_area: "{{ if .Query.IMDBID }}4{{ else }}{{ end }}{{ if and .Query.DoubanID (eq .Query.IMDBID .False) }}1{{ else }}{{ end }}{{ if and (eq .Query.IMDBID .False) (eq .Query.DoubanID .False) }}0{{ else }}{{ end }}"
|
||||
# 0 AND, 2 exact
|
||||
search_mode: 0
|
||||
sort: "{{ .Config.sort }}"
|
||||
type: "{{ .Config.type }}"
|
||||
notnewword: 1
|
||||
|
||||
rows:
|
||||
selector: table.torrents > tbody > tr:has(a[href*="download.php?id="])
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: a[href*="?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
title_default:
|
||||
selector: a[href*="details.php?id="]
|
||||
title:
|
||||
selector: a[title][href*="details.php?id="]
|
||||
attribute: title
|
||||
optional: true
|
||||
default: "{{ .Result.title_default }}"
|
||||
details:
|
||||
selector: a[href*="details.php?id="]
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href*="download.php?id="]
|
||||
attribute: href
|
||||
poster:
|
||||
selector: img[data-src]
|
||||
attribute: data-src
|
||||
imdbid:
|
||||
# site currently only has a badge and rating, the id is not present. just in case a future update.
|
||||
selector: a[href*="imdb.com/title/tt"]
|
||||
attribute: href
|
||||
doubanid:
|
||||
# site currently only has a badge and rating, the id is not present. just in case a future update.
|
||||
selector: a[href*="movie.douban.com/subject/"]
|
||||
attribute: href
|
||||
date_elapsed:
|
||||
# time type: time elapsed (default)
|
||||
selector: td.rowfollow:nth-child(4) > span[title]
|
||||
attribute: title
|
||||
optional: true
|
||||
filters:
|
||||
- name: append
|
||||
args: " +08:00" # CST
|
||||
- name: dateparse
|
||||
args: "yyyy-MM-dd HH:mm:ss zzz"
|
||||
date_added:
|
||||
# time added
|
||||
selector: td.rowfollow:nth-child(4):not(:has(span))
|
||||
optional: true
|
||||
filters:
|
||||
- name: append
|
||||
args: " +08:00" # CST
|
||||
- name: dateparse
|
||||
args: "yyyy-MM-ddHH:mm:ss zzz"
|
||||
date:
|
||||
text: "{{ if or .Result.date_elapsed .Result.date_added }}{{ or .Result.date_elapsed .Result.date_added }}{{ else }}now{{ end }}"
|
||||
size:
|
||||
selector: td.rowfollow:nth-child(5)
|
||||
optional: true
|
||||
default: 512MB
|
||||
seeders:
|
||||
selector: td.rowfollow:nth-child(6)
|
||||
optional: true
|
||||
default: 0
|
||||
leechers:
|
||||
selector: td.rowfollow:nth-child(7)
|
||||
optional: true
|
||||
default: 0
|
||||
grabs:
|
||||
selector: td.rowfollow:nth-child(8)
|
||||
optional: true
|
||||
default: 0
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img.pro_free: 0
|
||||
img.pro_free2up: 0
|
||||
img.pro_50pctdown: 0.5
|
||||
img.pro_50pctdown2up: 0.5
|
||||
img.pro_30pctdown: 0.3
|
||||
"*": 1
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
img.pro_50pctdown2up: 2
|
||||
img.pro_free2up: 2
|
||||
img.pro_2up: 2
|
||||
"*": 1
|
||||
minimumratio:
|
||||
text: 2.0
|
||||
minimumseedtime:
|
||||
# 2 days (as seconds = 2 x 24 x 60 x 60)
|
||||
text: 172800
|
||||
description:
|
||||
selector: td.rowfollow:nth-child(2)
|
||||
remove: a, b, font, img, span
|
||||
# NexusPHP v1.10.2 2026-04-11
|
||||
@@ -0,0 +1,174 @@
|
||||
---
|
||||
id: nanyangpt
|
||||
name: NanyangPT (南洋)
|
||||
description: "NanyangPT (南洋) is a CHINESE Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
language: zh-CN
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://nanyangpt.com/
|
||||
legacylinks:
|
||||
- https://52pt.site/ # loaded in error when first set up from template
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 401, cat: Movies, desc: "Movies/电影"}
|
||||
- {id: 402, cat: TV, desc: "TV Series/剧集"}
|
||||
- {id: 403, cat: TV/Anime, desc: "Anime/动漫"}
|
||||
- {id: 404, cat: TV, desc: "TV Shows/综艺"}
|
||||
- {id: 405, cat: TV/Sport, desc: "Sports/运体"}
|
||||
- {id: 406, cat: TV/Documentary, desc: "Documentaries/纪录"}
|
||||
- {id: 407, cat: Audio, desc: "Music/音乐"}
|
||||
- {id: 408, cat: Other, desc: "Study/学习"}
|
||||
- {id: 409, cat: PC, desc: "Software/软件"}
|
||||
- {id: 410, cat: Console, desc: "Games/游戏"}
|
||||
- {id: 411, cat: Other, desc: "Misc/其它"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid, doubanid]
|
||||
movie-search: [q, imdbid, doubanid]
|
||||
music-search: [q]
|
||||
|
||||
settings:
|
||||
- name: cookie
|
||||
type: text
|
||||
label: Cookie
|
||||
- name: info_cookie
|
||||
type: info_cookie
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
default: 4
|
||||
options:
|
||||
4: created
|
||||
7: seeders
|
||||
5: size
|
||||
1: title
|
||||
- name: type
|
||||
type: select
|
||||
label: Order requested from site
|
||||
default: desc
|
||||
options:
|
||||
desc: desc
|
||||
asc: asc
|
||||
- name: info_tpp
|
||||
type: info
|
||||
label: Results Per Page
|
||||
default: For best results, change the <b>Torrents per page:</b> setting to <b>100</b> on your account profile.
|
||||
- name: info_activity
|
||||
type: info
|
||||
label: Account Inactivity
|
||||
default: "Account retention rules:<ol><li>University lecturer and above users will be retained forever</li><li>Excellent master's degree and above users will not be deleted after the account is parked (in the control panel)</li><li>Users with a parked account who do not log in for 400 consecutive days will be deleted</li><li>Users with non-parked account will be deleted if they do not log in for 150 consecutive days</li></ol>"
|
||||
|
||||
login:
|
||||
# using cookie method as login.php is different depending on IP address
|
||||
method: cookie
|
||||
inputs:
|
||||
cookie: "{{ .Config.cookie }}"
|
||||
test:
|
||||
path: index.php
|
||||
selector: a[href$="usercp.php"]
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: torrents.php
|
||||
inputs:
|
||||
$raw: "{{ range .Categories }}cat{{.}}=1&{{end}}"
|
||||
# currently supports only one query id at one time.
|
||||
search: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{ else }}{{ end }}{{ if and .Query.DoubanID (eq .Query.IMDBID .False) }}{{ .Query.DoubanID }}{{ else }}{{ end }}{{ if and (eq .Query.IMDBID .False) (eq .Query.DoubanID .False) }}{{ .Keywords }}{{ else }}{{ end }}"
|
||||
# 0 incldead, 1 active, 2 dead, 3 noseeds
|
||||
incldead: 0
|
||||
# 0 all, 1 normal, 2 free, 3 2x, 4 2xfree, 5 50%, 6 2x50%, 7 30%
|
||||
spstate: "{{ if .Config.freeleech }}2{{ else }}0{{ end }}"
|
||||
# 0 title, 1 descr, 3 uploader, 4 imdburl
|
||||
search_area: "{{ if .Query.IMDBID }}4{{ else }}{{ end }}{{ if and .Query.DoubanID (eq .Query.IMDBID .False) }}1{{ else }}{{ end }}{{ if and (eq .Query.IMDBID .False) (eq .Query.DoubanID .False) }}0{{ else }}{{ end }}"
|
||||
# 0 AND, 1 OR, 2 exact
|
||||
search_mode: 0
|
||||
sort: "{{ .Config.sort }}"
|
||||
type: "{{ .Config.type }}"
|
||||
notnewword: 1
|
||||
# does not return imdb or doubanid in results
|
||||
|
||||
rows:
|
||||
selector: table.torrents > tbody > tr:has(table.torrentname)
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: a[href*="?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
title_default:
|
||||
selector: a[href*="details.php?id="]
|
||||
title:
|
||||
selector: a[title][href*="details.php?id="]
|
||||
attribute: title
|
||||
optional: true
|
||||
default: "{{ .Result.title_default }}"
|
||||
details:
|
||||
selector: a[href*="details.php?id="]
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href*="download.php?id="]
|
||||
attribute: href
|
||||
date_elapsed:
|
||||
# time type: time elapsed (default)
|
||||
selector: td:nth-child(4) > span[title]
|
||||
attribute: title
|
||||
optional: true
|
||||
filters:
|
||||
- name: append
|
||||
args: " +08:00" # CST
|
||||
- name: dateparse
|
||||
args: "yyyy-MM-dd HH:mm:ss zzz"
|
||||
date_added:
|
||||
# time added
|
||||
selector: td:nth-child(4):not(:has(span))
|
||||
optional: true
|
||||
filters:
|
||||
- name: append
|
||||
args: " +08:00" # CST
|
||||
- name: dateparse
|
||||
args: "yyyy-MM-ddHH:mm:ss zzz"
|
||||
date:
|
||||
text: "{{ if or .Result.date_elapsed .Result.date_added }}{{ or .Result.date_elapsed .Result.date_added }}{{ else }}now{{ end }}"
|
||||
size:
|
||||
selector: td.rowfollow:nth-child(5)
|
||||
optional: true
|
||||
default: 512MB
|
||||
seeders:
|
||||
selector: td.rowfollow:nth-child(6)
|
||||
optional: true
|
||||
default: 0
|
||||
leechers:
|
||||
selector: td.rowfollow:nth-child(7)
|
||||
optional: true
|
||||
default: 0
|
||||
grabs:
|
||||
selector: td.rowfollow:nth-child(8)
|
||||
optional: true
|
||||
default: 0
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img.pro_free: 0
|
||||
img.pro_free2up: 0
|
||||
img.pro_50pctdown: 0.5
|
||||
img.pro_50pctdown2up: 0.5
|
||||
img.pro_30pctdown: 0.3
|
||||
"*": 1
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
img.pro_50pctdown2up: 2
|
||||
img.pro_free2up: 2
|
||||
img.pro_2up: 2
|
||||
"*": 1
|
||||
description:
|
||||
selector: td:nth-child(2)
|
||||
remove: a, b, font, img, span
|
||||
# NYPT Project v1.0 2014-10-01 (based on NexusPHP)
|
||||
@@ -0,0 +1,478 @@
|
||||
---
|
||||
id: new-team
|
||||
name: New-Team
|
||||
description: "New-Team is a RUSSIAN Semi-Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
language: ru-RU
|
||||
type: semi-private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://new-team.org/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
# Кинематограф, театр, видео
|
||||
- {id: 241, cat: Movies, desc: "|- Релизы от Scarabey"}
|
||||
- {id: 1170, cat: Movies, desc: "|-- Зарубежные и российские фильмы 2019 - 2023"}
|
||||
- {id: 1137, cat: Movies, desc: "|-- ТРЕБУЕТСЯ СИД."}
|
||||
- {id: 1116, cat: Movies, desc: "|-- Группа 'Сиды' - хранение раздач"}
|
||||
- {id: 1040, cat: Movies, desc: "|-- Зарубежные и российские фильмы до 1990 года"}
|
||||
- {id: 1041, cat: Movies, desc: "|-- Зарубежные и российские фильмы 1991-2000"}
|
||||
- {id: 1042, cat: Movies, desc: "|-- Зарубежные и российские фильмы 2001-2009"}
|
||||
- {id: 1039, cat: Movies, desc: "|-- Зарубежные и российские фильмы 2010-2013"}
|
||||
- {id: 1088, cat: Movies, desc: "|-- Зарубежные и российские фильмы 2014-2015"}
|
||||
- {id: 1112, cat: Movies, desc: "|-- Зарубежные и российские фильмы 2016-2018"}
|
||||
- {id: 1110, cat: Movies, desc: "|-- Зарубежные и российские фильмы в MKV (AVC / BDRip 720p /..."}
|
||||
- {id: 1111, cat: Movies/Other, desc: "|-- Аниме"}
|
||||
- {id: 1051, cat: Movies/Foreign, desc: "|-- Азиатские фильмы"}
|
||||
- {id: 1035, cat: TV, desc: "|-- Сериалы"}
|
||||
- {id: 1096, cat: TV, desc: "|--- Сериал '24 часа'"}
|
||||
- {id: 1092, cat: TV, desc: "|--- Сериал 'Во все тяжкие'"}
|
||||
- {id: 1094, cat: TV, desc: "|--- Сериал 'Игра престолов'"}
|
||||
- {id: 1098, cat: TV, desc: "|--- Сериал 'Остаться в живых'"}
|
||||
- {id: 1097, cat: TV, desc: "|--- Сериал 'Подпольная империя'"}
|
||||
- {id: 1090, cat: TV, desc: "|--- Сериал 'Спартак'"}
|
||||
- {id: 1093, cat: TV, desc: "|--- Сериал 'Ходячие мертвецы'"}
|
||||
- {id: 1095, cat: TV, desc: "|--- Сериал 'Шерлок'"}
|
||||
- {id: 124, cat: Movies, desc: "|- Кинофильмы"}
|
||||
- {id: 191, cat: Movies/Foreign, desc: "|-- Зарубежное кино до 1990 года"}
|
||||
- {id: 192, cat: Movies/Foreign, desc: "|-- Зарубежное кино 1990 - 1999"}
|
||||
- {id: 160, cat: Movies/Foreign, desc: "|-- Зарубежное кино 2000 - 2009"}
|
||||
- {id: 125, cat: Movies/Foreign, desc: "|-- Зарубежное кино 2010 - 2019"}
|
||||
- {id: 1142, cat: Movies/Foreign, desc: "|-- Зарубежное кино 2020 - 2024"}
|
||||
- {id: 1182, cat: Movies/Foreign, desc: "|-- Зарубежное кино 2025 (Новинки)"}
|
||||
- {id: 126, cat: Movies/Foreign, desc: "|-- Зарубежное кино (HD и DVD Video)"}
|
||||
- {id: 162, cat: Movies, desc: "|-- Российское кино"}
|
||||
- {id: 164, cat: Movies, desc: "|--- Российское кино (HD и DVD Video)"}
|
||||
- {id: 1144, cat: Movies, desc: "|--- Детское российское кино"}
|
||||
- {id: 900, cat: Movies, desc: "|-- Советское кино"}
|
||||
- {id: 1181, cat: Movies, desc: "|--- Советское кино (HD и DVD Video)"}
|
||||
- {id: 1143, cat: Movies, desc: "|--- Детское советское кино"}
|
||||
- {id: 1104, cat: Movies, desc: "|--- Фильмы довоенные и созданные во время войны"}
|
||||
- {id: 1177, cat: Movies, desc: "|--- Телеспектакль"}
|
||||
- {id: 891, cat: Movies/3D, desc: "|-- Кинофильмы 3D"}
|
||||
- {id: 338, cat: Movies/Foreign, desc: "|-- Классика зарубежного кино"}
|
||||
- {id: 337, cat: Movies/Foreign, desc: "|-- Азиатские фильмы"}
|
||||
- {id: 917, cat: Movies, desc: "|-- Арт-хаус и авторское кино"}
|
||||
- {id: 207, cat: Movies, desc: "|-- Сборники"}
|
||||
- {id: 203, cat: Movies/Other, desc: "|-- Трейлеры и дополнительные материалы"}
|
||||
- {id: 826, cat: Audio/Other, desc: "|-- Звуковые дорожки и переводы"}
|
||||
- {id: 827, cat: Audio/Other, desc: "|--- Авторский перевод"}
|
||||
- {id: 828, cat: Audio/Other, desc: "|--- Закадровый перевод"}
|
||||
- {id: 134, cat: TV/Documentary, desc: "|- Документальные фильмы и телепередачи"}
|
||||
- {id: 999, cat: TV/Documentary, desc: "|-- Флора и фауна"}
|
||||
- {id: 254, cat: TV/Documentary, desc: "|-- Великая Отечественная война"}
|
||||
- {id: 478, cat: TV/Documentary, desc: "|-- Научно-популярные фильмы"}
|
||||
- {id: 1058, cat: TV/Documentary, desc: "|-- История: Города и Страны / Архитектура / Музеи мира"}
|
||||
- {id: 136, cat: TV/Documentary, desc: "|-- История: Биографии / Кумиры / Личности / События"}
|
||||
- {id: 253, cat: TV/Documentary, desc: "|-- Планета Земля / Космос / Вселенная"}
|
||||
- {id: 256, cat: TV/Documentary, desc: "|-- Вера и религия / Диагностика кармы"}
|
||||
- {id: 252, cat: TV/Documentary, desc: "|-- Тайны века / Спецслужбы / Теории Заговоров"}
|
||||
- {id: 255, cat: TV/Documentary, desc: "|-- Развлекательные телепередачи и шоу, приколы и юмор"}
|
||||
- {id: 135, cat: TV/Documentary, desc: "|-- Документальные фильмы и телепередачи (DVD, HD Video)"}
|
||||
- {id: 889, cat: TV/Documentary, desc: "|-- Документальные фильмы и телепередачи (3D)"}
|
||||
# Сериалы
|
||||
- {id: 845, cat: TV, desc: "|- Отечественные cериалы"}
|
||||
- {id: 850, cat: TV, desc: "|-- Обсуждение сериалов"}
|
||||
- {id: 854, cat: TV, desc: "|-- Исторические, военные"}
|
||||
- {id: 847, cat: TV, desc: "|- Отечественные сериалы (HD, DVD Video)"}
|
||||
- {id: 1188, cat: TV, desc: "|-- Детектив, боевик, криминал"}
|
||||
- {id: 857, cat: TV, desc: "|-- Исторические, военные"}
|
||||
- {id: 846, cat: TV/Foreign, desc: "|- Зарубежные сериалы"}
|
||||
- {id: 856, cat: TV/Foreign, desc: "|-- Исторические, военные"}
|
||||
- {id: 848, cat: TV/Foreign, desc: "|- Зарубежные сериалы (HD, DVD Video)"}
|
||||
- {id: 858, cat: TV/Foreign, desc: "|-- Исторические, военные"}
|
||||
# Мультипликация
|
||||
- {id: 869, cat: Movies/Other, desc: "|- Мультфильмы"}
|
||||
- {id: 890, cat: Movies/Other, desc: "|-- Мультфильмы 3D"}
|
||||
- {id: 871, cat: Movies/Other, desc: "|-- Отечественные Мультфильмы"}
|
||||
- {id: 875, cat: Movies/Other, desc: "|-- Отечественные Мультфильмы (DVD, HD Video)"}
|
||||
- {id: 1068, cat: Movies/Other, desc: "|- Короткометражные отечественные мультфильмы"}
|
||||
- {id: 1189, cat: Movies/Other, desc: "|- Короткометражные отечественные мультфильмы (DVD, HD Video)"}
|
||||
- {id: 877, cat: Movies/Other, desc: "|-- Сборники отечественных мультфильмов"}
|
||||
- {id: 870, cat: Movies/Other, desc: "|-- Зарубежные Мультфильмы"}
|
||||
- {id: 874, cat: Movies/Other, desc: "|-- Зарубежные Мультфильмы (DVD, HD Video)"}
|
||||
- {id: 1067, cat: Movies/Other, desc: "|- Короткометражные иностранные мультфильмы"}
|
||||
- {id: 1066, cat: Movies/Other, desc: "|- Короткометражные мультфильмы (DVD, HD Video)"}
|
||||
- {id: 876, cat: Movies/Other, desc: "|-- Сборники зарубежных мультфильмов"}
|
||||
- {id: 872, cat: TV/Anime, desc: "|- Мультсериалы"}
|
||||
- {id: 878, cat: TV/Anime, desc: "|-- Отечественные Мультсериалы"}
|
||||
- {id: 879, cat: TV/Anime, desc: "|-- Зарубежные Мультсериалы"}
|
||||
- {id: 873, cat: TV/Anime, desc: "|- Аниме"}
|
||||
- {id: 886, cat: TV/Anime, desc: "|-- Рипы Аниме"}
|
||||
- {id: 884, cat: TV/Anime, desc: "|-- Аниме (DVD)"}
|
||||
- {id: 885, cat: TV/Anime, desc: "|-- Аниме (HD Video)"}
|
||||
- {id: 883, cat: TV/Anime, desc: "|-- Манга"}
|
||||
# Музыка
|
||||
- {id: 571, cat: Audio/Lossless, desc: "|- Камерная и сольная инструментальная музыка (lossless)"}
|
||||
- {id: 567, cat: Audio/Lossless, desc: "|- Вокальная и хоровая музыка (lossless)"}
|
||||
- {id: 577, cat: Audio, desc: "|- Classical Crossover (lossy и lossless)"}
|
||||
- {id: 565, cat: Audio, desc: "|- Полные собрания сочинений и многодисковые издания..."}
|
||||
- {id: 569, cat: Audio/Lossless, desc: "|- Оркестровая музыка (lossless)"}
|
||||
- {id: 574, cat: Audio/MP3, desc: "|- Вокальная и хоровая музыка (lossy)"}
|
||||
- {id: 576, cat: Audio/MP3, desc: "|- Камерная и сольная инструментальная музыка (lossy)"}
|
||||
- {id: 579, cat: Audio/MP3, desc: "|- Восточноевропейский фолк (lossy)"}
|
||||
- {id: 580, cat: Audio/Lossless, desc: "|- Восточноевропейский фолк (lossless)"}
|
||||
- {id: 581, cat: Audio/MP3, desc: "|- Западноевропейский фолк (lossy)"}
|
||||
- {id: 582, cat: Audio/Lossless, desc: "|- Западноевропейский фолк (lossless)"}
|
||||
- {id: 583, cat: Audio, desc: "|- Klezmer и Еврейский фольклор (lossy и lossless)"}
|
||||
- {id: 584, cat: Audio/MP3, desc: "|- Этническая музыка Сибири, Средней и Восточной Азии (lossy)"}
|
||||
- {id: 585, cat: Audio/Lossless, desc: "|- Этническая музыка Сибири, Средней и Восточной Азии..."}
|
||||
- {id: 587, cat: Audio/Lossless, desc: "|- Этническая музыка Индии (lossless)"}
|
||||
- {id: 589, cat: Audio/Lossless, desc: "|- Этническая музыка Африки и Ближнего Востока (lossless)"}
|
||||
- {id: 590, cat: Audio, desc: "|- Этническая музыка Кавказа и Закавказья (lossy и lossless)"}
|
||||
- {id: 591, cat: Audio/MP3, desc: "|- Этническая музыка Северной и Южной Америки (lossy)"}
|
||||
- {id: 592, cat: Audio/Lossless, desc: "|- Этническая музыка Северной и Южной Америки (lossless)"}
|
||||
- {id: 593, cat: Audio, desc: "|- Этническая музыка Австралии, островов Тихого и Индийского..."}
|
||||
- {id: 595, cat: Audio/Lossless, desc: "|- Country, Bluegrass (lossless)"}
|
||||
- {id: 608, cat: Audio/Lossless, desc: "|- Nouveau Flamenco, Mediterranean Guitar, Acoustic guitar..."}
|
||||
- {id: 607, cat: Audio, desc: "|- Nouveau Flamenco, Mediterranean Guitar, Acoustic guitar..."}
|
||||
- {id: 487, cat: Audio, desc: "|- Fields Recordings, Nature Sounds (Звуки природы)"}
|
||||
- {id: 481, cat: Audio/Lossless, desc: "|- New Age, Celtic New Age (lossless)"}
|
||||
- {id: 483, cat: Audio/MP3, desc: "|- New Age, Celtic New Age (lossy)"}
|
||||
- {id: 1048, cat: Audio/Lossless, desc: "|- Enigmatic, Gregorianic, Ambientpop, Mysticpop (lossless)"}
|
||||
- {id: 1049, cat: Audio/MP3, desc: "|- Enigmatic, Gregorianic, Ambientpop, Mysticpop (lossy)"}
|
||||
- {id: 484, cat: Audio/Lossless, desc: "|- Meditative, Healing, Relax & Nature (lossless)"}
|
||||
- {id: 485, cat: Audio/MP3, desc: "|- Meditative, Healing, Relax & Nature (lossy)"}
|
||||
- {id: 490, cat: Audio/Lossless, desc: "|- World Music, Ethnicbeat, Worldbeat, World Fusion..."}
|
||||
- {id: 491, cat: Audio/MP3, desc: "|- World Music, Ethnicbeat, Worldbeat, World Fusion (lossy)"}
|
||||
- {id: 492, cat: Audio/Lossless, desc: "|- Mantras, Ragas, Kirtans (lossless)"}
|
||||
- {id: 493, cat: Audio/MP3, desc: "|- Mantras, Ragas, Kirtans (lossy)"}
|
||||
- {id: 652, cat: Audio/MP3, desc: "|- Отечественный Рэп, Хип-Хоп (lossy)"}
|
||||
- {id: 653, cat: Audio/MP3, desc: "|- Отечественный R'n'B (lossy)"}
|
||||
- {id: 654, cat: Audio/Lossless, desc: "|- Отечественный Рэп, Хип-Хоп, R'n'B (lossless)"}
|
||||
- {id: 657, cat: Audio/MP3, desc: "|- Зарубежный Рэп, Хип-Хоп (lossy)"}
|
||||
- {id: 659, cat: Audio/Lossless, desc: "|- Зарубежный Рэп, Хип-Хоп (lossless)"}
|
||||
- {id: 660, cat: Audio/Lossless, desc: "|- Зарубежный R'n'B (lossless)"}
|
||||
- {id: 756, cat: Audio/Lossless, desc: "|- Ska, Ska-Punk, Ska-Jazz (lossless)"}
|
||||
- {id: 752, cat: Audio/MP3, desc: "|- Reggae (lossy)"}
|
||||
- {id: 755, cat: Audio/Lossless, desc: "|- Reggae, Dancehall, Dub (lossless)"}
|
||||
- {id: 549, cat: Audio, desc: "|- Саундтреки и Караоке"}
|
||||
- {id: 765, cat: Audio, desc: "|-- Минусовки (lossy и lossless)"}
|
||||
- {id: 767, cat: Audio/Lossless, desc: "|-- Саундтреки к отечественным фильмам (lossless)"}
|
||||
- {id: 768, cat: Audio/MP3, desc: "|-- Саундтреки к отечественным фильмам (lossy)"}
|
||||
- {id: 769, cat: Audio/Lossless, desc: "|-- Саундтреки к зарубежным фильмам (lossless)"}
|
||||
- {id: 770, cat: Audio/MP3, desc: "|-- Саундтреки к зарубежным фильмам (lossy)"}
|
||||
- {id: 772, cat: Audio/Lossless, desc: "|-- Саундтреки к играм (lossless)"}
|
||||
- {id: 776, cat: Audio/Lossless, desc: "|- Отечественный шансон (lossless)"}
|
||||
- {id: 777, cat: Audio/MP3, desc: "|- Отечественный шансон (lossy)"}
|
||||
- {id: 778, cat: Audio/MP3, desc: "|- Сборники отечественного шансона (lossy)"}
|
||||
- {id: 779, cat: Audio/Lossless, desc: "|- Военная песня (lossless)"}
|
||||
- {id: 780, cat: Audio/MP3, desc: "|- Военная песня (lossy)"}
|
||||
- {id: 781, cat: Audio/Lossless, desc: "|- Авторская песня (lossless)"}
|
||||
- {id: 782, cat: Audio/MP3, desc: "|- Авторская песня (lossy)"}
|
||||
- {id: 952, cat: Audio/Lossless, desc: "|- Зарубежный шансон, Chanson (lossless)"}
|
||||
- {id: 1175, cat: Audio/Lossless, desc: "|- Итальянская поп-музыка (lossless)"}
|
||||
- {id: 1174, cat: Audio/Lossless, desc: "|- Латиноамериканская поп-музыка (lossless)"}
|
||||
- {id: 1173, cat: Audio/Lossless, desc: "|- Easy Listening, Instrumental Pop (lossless)"}
|
||||
- {id: 836, cat: Audio/MP3, desc: "|- Отечественная поп-музыка (lossy)"}
|
||||
- {id: 837, cat: Audio/Lossless, desc: "|- Отечественная поп-музыка (lossless)"}
|
||||
- {id: 838, cat: Audio/MP3, desc: "|- Зарубежная поп-музыка (lossy)"}
|
||||
- {id: 839, cat: Audio/Lossless, desc: "|- Зарубежная поп-музыка (lossless)"}
|
||||
- {id: 843, cat: Audio/Lossless, desc: "|- Восточноазиатская поп-музыка (lossless)"}
|
||||
- {id: 1082, cat: Audio/Lossless, desc: "|- Disco, Italo-Disco, Euro-Disco, Hi-NRG (lossless)"}
|
||||
- {id: 1081, cat: Audio/Lossless, desc: "|- Eurodance, Euro-House, Technopop (lossless)"}
|
||||
- {id: 1084, cat: Audio/MP3, desc: "|- Disco, Italo-Disco, Euro-Disco, Hi-NRG (сборники) (lossy)"}
|
||||
- {id: 1083, cat: Audio/MP3, desc: "|- Eurodance, Euro-House, Technopop (сборники) (lossy)"}
|
||||
- {id: 1187, cat: Audio, desc: "|- Аудио, как приложение к журналам"}
|
||||
- {id: 794, cat: Audio, desc: "|- Orthodox spiritual music. Православные песнопения..."}
|
||||
- {id: 1140, cat: Audio, desc: "|- Аудиоматериал для тестирования и настройки"}
|
||||
- {id: 1099, cat: Audio/MP3, desc: "|- Профессиональная музыка для йоги и фитнеса (lossy)"}
|
||||
- {id: 789, cat: Audio/Lossless, desc: "|- Отечественная музыка других жанров (lossless)"}
|
||||
- {id: 788, cat: Audio/MP3, desc: "|- Отечественная музыка других жанров (lossy)"}
|
||||
- {id: 791, cat: Audio/Lossless, desc: "|- Зарубежная музыка других жанров (lossless)"}
|
||||
- {id: 790, cat: Audio/MP3, desc: "|- Зарубежная музыка других жанров (lossy)"}
|
||||
- {id: 795, cat: Audio, desc: "|- Сборники песен для детей (lossy и lossless)"}
|
||||
- {id: 798, cat: Audio, desc: "|- Мюзикл (lossy и lossless)"}
|
||||
- {id: 800, cat: Audio/MP3, desc: "|- Неофициальные и внежанровые сборники (lossy)"}
|
||||
- {id: 186, cat: Audio/Video, desc: "|- Музыкальное видео (DVD и HD Video)"}
|
||||
- {id: 185, cat: Audio/Video, desc: "|- Музыкальное видео"}
|
||||
- {id: 1160, cat: Audio/Foreign, desc: "|- Зарубежная поп-музыка"}
|
||||
- {id: 1159, cat: Audio, desc: "|- Советская эстрада, ретро, романсы"}
|
||||
- {id: 1158, cat: Audio, desc: "|- Отечественная поп-музыка"}
|
||||
- {id: 1157, cat: Audio, desc: "|- Инструментальная поп-музыка, эстрада"}
|
||||
- {id: 1156, cat: Audio, desc: "|- Джаз и блюз"}
|
||||
- {id: 1155, cat: Audio/Foreign, desc: "|- Зарубежная рок-музыка"}
|
||||
- {id: 1154, cat: Audio, desc: "|- Отечественная рок-музыка"}
|
||||
- {id: 1153, cat: Audio, desc: "|- Электронная музыка"}
|
||||
- {id: 1152, cat: Audio, desc: "|- Классика и классика в современной обработке"}
|
||||
# Электронная музыка
|
||||
- {id: 611, cat: Audio/Lossless, desc: "|- Goa Trance, Psy-Trance (lossless)"}
|
||||
- {id: 612, cat: Audio/MP3, desc: "|- Goa Trance, Psy-Trance (lossy)"}
|
||||
- {id: 613, cat: Audio/Lossless, desc: "|- PsyChill, Ambient Dub (lossless)"}
|
||||
- {id: 614, cat: Audio/MP3, desc: "|- PsyChill, Ambient Dub (lossy)"}
|
||||
- {id: 616, cat: Audio/Lossless, desc: "|- Trance (lossless)"}
|
||||
- {id: 617, cat: Audio/MP3, desc: "|- Trance (lossy)"}
|
||||
- {id: 618, cat: Audio/MP3, desc: "|- Trance (Singles, EPs) (lossy)"}
|
||||
- {id: 619, cat: Audio/MP3, desc: "|- Trance (Radioshows, Podcasts, Live Sets, Mixes) (lossy)"}
|
||||
- {id: 1061, cat: Audio/MP3, desc: "|- Trance discography (lossy)"}
|
||||
- {id: 621, cat: Audio/Lossless, desc: "|- Hardcore, Hardstyle, Jumpstyle (lossless)"}
|
||||
- {id: 622, cat: Audio/MP3, desc: "|- Hardcore, Hardstyle, Jumpstyle (lossy)"}
|
||||
- {id: 623, cat: Audio, desc: "|- Hardcore, Hardstyle, Jumpstyle (vinyl, web)"}
|
||||
- {id: 624, cat: Audio/Lossless, desc: "|- House (lossless)"}
|
||||
- {id: 625, cat: Audio, desc: "|- House (Radioshow, Podcast, Liveset, Mixes)"}
|
||||
- {id: 626, cat: Audio/MP3, desc: "|- House (lossy)"}
|
||||
- {id: 627, cat: Audio, desc: "|- House (Проморелизы, сборники)"}
|
||||
- {id: 628, cat: Audio/MP3, desc: "|- House (Singles, EPs) (lossy)"}
|
||||
- {id: 629, cat: Audio/Lossless, desc: "|- Techno (lossless)"}
|
||||
- {id: 630, cat: Audio/MP3, desc: "|- Techno (lossy)"}
|
||||
- {id: 631, cat: Audio/Other, desc: "|- Techno (Radioshows, Podcasts, Livesets, Mixes)"}
|
||||
- {id: 632, cat: Audio/MP3, desc: "|- Techno (Singles, EPs) (lossy)"}
|
||||
- {id: 643, cat: Audio/Lossless, desc: "|- Dubstep, Future Garage, Bass Music, UK Garage (lossless)"}
|
||||
- {id: 644, cat: Audio/MP3, desc: "|- Dubstep, Future Garage, Bass Music, UK Garage (lossy)"}
|
||||
- {id: 634, cat: Audio/Lossless, desc: "|- Electro, Electro-Freestyle, Nu Electro (lossless)"}
|
||||
- {id: 635, cat: Audio/MP3, desc: "|- Electro, Electro-Freestyle, Nu Electro (lossy)"}
|
||||
- {id: 636, cat: Audio/Lossless, desc: "|- Drum & Bass, Jungle (lossless)"}
|
||||
- {id: 637, cat: Audio/MP3, desc: "|- Drum & Bass, Jungle (lossy)"}
|
||||
- {id: 641, cat: Audio/Lossless, desc: "|- Breakbeat (lossless)"}
|
||||
- {id: 642, cat: Audio/MP3, desc: "|- Breakbeat (lossy)"}
|
||||
- {id: 645, cat: Audio/Lossless, desc: "|- IDM (lossless)"}
|
||||
- {id: 646, cat: Audio/MP3, desc: "|- IDM (lossy)"}
|
||||
- {id: 802, cat: Audio/Lossless, desc: "|- Chillout, Lounge, Downtempo (lossless)"}
|
||||
- {id: 803, cat: Audio/MP3, desc: "|- Chillout, Lounge, Downtempo (lossy)"}
|
||||
- {id: 804, cat: Audio/Lossless, desc: "|- Nu Jazz, Acid Jazz, Future Jazz (lossless)"}
|
||||
- {id: 805, cat: Audio/MP3, desc: "|- Nu Jazz, Acid Jazz, Future Jazz (lossy)"}
|
||||
- {id: 806, cat: Audio/Lossless, desc: "|- Trip Hop, Abstract Hip-Hop (lossless)"}
|
||||
- {id: 807, cat: Audio/MP3, desc: "|- Trip Hop, Abstract Hip-Hop (lossy)"}
|
||||
- {id: 1070, cat: Audio, desc: "|- 8-bit, Chiptune (lossy & lossless)"}
|
||||
- {id: 808, cat: Audio/Lossless, desc: "|- Experimental (lossless)"}
|
||||
- {id: 809, cat: Audio/MP3, desc: "|- Experimental (lossy)"}
|
||||
- {id: 810, cat: Audio/Lossless, desc: "|- Modern Classical, Electroacoustic (lossless)"}
|
||||
- {id: 811, cat: Audio/MP3, desc: "|- Modern Classical, Electroacoustic (lossy)"}
|
||||
- {id: 812, cat: Audio/Lossless, desc: "|- Traditional Electronic, Ambient (lossless)"}
|
||||
- {id: 813, cat: Audio/MP3, desc: "|- Traditional Electronic, Ambient (lossy)"}
|
||||
- {id: 815, cat: Audio/Lossless, desc: "|- EBM, Dark Electro, Aggrotech (lossless)"}
|
||||
- {id: 816, cat: Audio/MP3, desc: "|- EBM, Dark Electro, Aggrotech (lossy)"}
|
||||
- {id: 817, cat: Audio/Lossless, desc: "|- Industrial, Noise (lossless)"}
|
||||
- {id: 818, cat: Audio/MP3, desc: "|- Industrial, Noise (lossy)"}
|
||||
- {id: 1071, cat: Audio/Lossless, desc: "|- Darkwave, Neoclassical, Ethereal, Dungeon Synth (lossless)"}
|
||||
- {id: 1072, cat: Audio/MP3, desc: "|- Darkwave, Neoclassical, Ethereal, Dungeon Synth (lossy)"}
|
||||
- {id: 819, cat: Audio/Lossless, desc: "|- Synthpop, Futurepop, New Wave (lossless)"}
|
||||
- {id: 820, cat: Audio/MP3, desc: "|- Synthpop, Futurepop, New Wave (lossy)"}
|
||||
- {id: 512, cat: Audio/Lossless, desc: "|- Label Packs (lossless)"}
|
||||
- {id: 513, cat: Audio/MP3, desc: "|- Label packs, Scene packs, Radioshows packs (lossy)"}
|
||||
# Рок-музыка
|
||||
- {id: 524, cat: Audio, desc: "|- Зарубежный Rock"}
|
||||
- {id: 699, cat: Audio/Lossless, desc: "|-- Pop Rock & Soft Rock (lossless)"}
|
||||
- {id: 700, cat: Audio/MP3, desc: "|-- Pop Rock & Soft Rock (lossy)"}
|
||||
- {id: 696, cat: Audio/Lossless, desc: "|-- Folk Rock (lossless)"}
|
||||
- {id: 1167, cat: Audio/MP3, desc: "|-- Folk Rock (lossy)"}
|
||||
- {id: 692, cat: Audio/Lossless, desc: "|-- Classic Rock & Hard Rock (lossless)"}
|
||||
- {id: 693, cat: Audio/MP3, desc: "|-- Classic Rock & Hard Rock (lossy)"}
|
||||
- {id: 694, cat: Audio/Lossless, desc: "|-- Progressive & Art-Rock (lossless)"}
|
||||
- {id: 695, cat: Audio/MP3, desc: "|-- Progressive & Art-Rock (lossy)"}
|
||||
- {id: 697, cat: Audio/Lossless, desc: "|-- AOR (Melodic Hard Rock, Arena rock) (lossless)"}
|
||||
- {id: 698, cat: Audio/MP3, desc: "|-- AOR (Melodic Hard Rock, Arena rock) (lossy)"}
|
||||
- {id: 701, cat: Audio/Lossless, desc: "|-- Instrumental Guitar Rock (lossless)"}
|
||||
- {id: 702, cat: Audio/MP3, desc: "|-- Instrumental Guitar Rock (lossy)"}
|
||||
- {id: 703, cat: Audio/Lossless, desc: "|-- Rockabilly, Psychobilly, Rock'n'Roll (lossless)"}
|
||||
- {id: 704, cat: Audio/MP3, desc: "|-- Rockabilly, Psychobilly, Rock'n'Roll (lossy)"}
|
||||
- {id: 705, cat: Audio/Lossless, desc: "|-- Восточноазиатский рок (lossless)"}
|
||||
- {id: 706, cat: Audio/MP3, desc: "|-- Восточноазиатский рок (lossy)"}
|
||||
- {id: 918, cat: Audio/Lossless, desc: "|- Sludge, Stoner, Post-Metal (lossless)"}
|
||||
- {id: 919, cat: Audio/MP3, desc: "|- Sludge, Stoner, Post-Metal (lossly)"}
|
||||
- {id: 711, cat: Audio/Lossless, desc: "|- Death, Doom (lossless)"}
|
||||
- {id: 712, cat: Audio/MP3, desc: "|- Death, Doom (lossy)"}
|
||||
- {id: 707, cat: Audio/Lossless, desc: "|- Avant-garde, Experimental Metal (lossless)"}
|
||||
- {id: 708, cat: Audio/MP3, desc: "|- Avant-garde, Experimental Metal (lossy)"}
|
||||
- {id: 709, cat: Audio/Lossless, desc: "|- Black (lossless)"}
|
||||
- {id: 710, cat: Audio/MP3, desc: "|- Black (lossy)"}
|
||||
- {id: 713, cat: Audio/Lossless, desc: "|- Folk, Pagan, Viking (lossless)"}
|
||||
- {id: 714, cat: Audio/MP3, desc: "|- Folk, Pagan, Viking (lossy)"}
|
||||
- {id: 715, cat: Audio/Lossless, desc: "|- Gothic Metal (lossless)"}
|
||||
- {id: 716, cat: Audio/MP3, desc: "|- Gothic Metal (lossy)"}
|
||||
- {id: 717, cat: Audio/Lossless, desc: "|- Grind, Brutal Death (lossless)"}
|
||||
- {id: 718, cat: Audio/MP3, desc: "|- Grind, Brutal Death (lossy)"}
|
||||
- {id: 719, cat: Audio/Lossless, desc: "|- Heavy, Power, Progressive (lossless)"}
|
||||
- {id: 720, cat: Audio/MP3, desc: "|- Heavy, Power, Progressive (lossy)"}
|
||||
- {id: 721, cat: Audio/Lossless, desc: "|- Metalcore, Deathcore, Mathcore (lossless)"}
|
||||
- {id: 722, cat: Audio/MP3, desc: "|- Metalcore, Deathcore, Mathcore (lossy)"}
|
||||
- {id: 723, cat: Audio/Lossless, desc: "|- Thrash, Speed (lossless)"}
|
||||
- {id: 724, cat: Audio/MP3, desc: "|- Thrash, Speed (lossy)"}
|
||||
- {id: 725, cat: Audio/Lossless, desc: "|- Сборники (lossless)"}
|
||||
- {id: 726, cat: Audio/MP3, desc: "|- Сборники (lossy)"}
|
||||
- {id: 1122, cat: Audio/Lossless, desc: "|- Gothic Rock, Deathrock, Electrogoth, Dark Cabaret..."}
|
||||
- {id: 1125, cat: Audio/MP3, desc: "|- Gothic Rock, Deathrock, Electrogoth, Dark Cabaret (lossy)"}
|
||||
- {id: 1123, cat: Audio/Lossless, desc: "|- Dark Folk, Neofolk, Martial Industrial, Ritual Ambient..."}
|
||||
- {id: 1124, cat: Audio/MP3, desc: "|- Dark Folk, Neofolk, Martial Industrial, Ritual Ambient..."}
|
||||
- {id: 727, cat: Audio/Lossless, desc: "|- Alternative & Nu-metal (lossless)"}
|
||||
- {id: 728, cat: Audio/MP3, desc: "|- Alternative & Nu-metal (lossy)"}
|
||||
- {id: 729, cat: Audio/Lossless, desc: "|- Punk (lossless)"}
|
||||
- {id: 730, cat: Audio/MP3, desc: "|- Punk (lossy)"}
|
||||
- {id: 731, cat: Audio/Lossless, desc: "|- Hardcore (lossless)"}
|
||||
- {id: 732, cat: Audio/MP3, desc: "|- Hardcore (lossy)"}
|
||||
- {id: 733, cat: Audio/Lossless, desc: "|- Indie, Post-Rock & Post-Punk (lossless)"}
|
||||
- {id: 734, cat: Audio/MP3, desc: "|- Indie, Post-Rock & Post-Punk (lossy)"}
|
||||
- {id: 735, cat: Audio/Lossless, desc: "|- Industrial & Post-industrial (lossless)"}
|
||||
- {id: 736, cat: Audio/MP3, desc: "|- Industrial & Post-industrial (lossy)"}
|
||||
- {id: 737, cat: Audio/Lossless, desc: "|- Emocore, Post-hardcore (lossless)"}
|
||||
- {id: 738, cat: Audio/MP3, desc: "|- Emocore, Post-hardcore (lossy)"}
|
||||
- {id: 1074, cat: Audio/MP3, desc: "|- Сборники (lossy)"}
|
||||
- {id: 742, cat: Audio/Lossless, desc: "|- Рок, Панк, Альтернатива (lossless)"}
|
||||
- {id: 743, cat: Audio/MP3, desc: "|- Рок, Панк, Альтернатива (lossy)"}
|
||||
- {id: 744, cat: Audio/Lossless, desc: "|- Металл (lossless)"}
|
||||
- {id: 745, cat: Audio/MP3, desc: "|- Металл (lossy)"}
|
||||
- {id: 746, cat: Audio/Lossless, desc: "|- Рок на языках народов xUSSR (lossless)"}
|
||||
- {id: 747, cat: Audio/MP3, desc: "|- Рок на языках народов xUSSR (lossy)"}
|
||||
# Джазовая и блюзовая музыка
|
||||
- {id: 670, cat: Audio/Lossless, desc: "|- World Jazz, Ethnic Jazz (lossless)"}
|
||||
- {id: 666, cat: Audio/Lossless, desc: "|- Early Jazz, Swing, Gypsy (lossless)"}
|
||||
- {id: 667, cat: Audio/Lossless, desc: "|- Bop (lossless)"}
|
||||
- {id: 668, cat: Audio/Lossless, desc: "|- Mainstream Jazz, Cool (lossless)"}
|
||||
- {id: 669, cat: Audio/Lossless, desc: "|- Jazz Fusion (lossless)"}
|
||||
- {id: 671, cat: Audio/Lossless, desc: "|- Avant-Garde Jazz, Free Improvisation (lossless)"}
|
||||
- {id: 672, cat: Audio/Lossless, desc: "|- Modern Creative, Third Stream (lossless)"}
|
||||
- {id: 673, cat: Audio/Lossless, desc: "|- Smooth, Jazz-Pop (lossless)"}
|
||||
- {id: 674, cat: Audio/Lossless, desc: "|- Vocal Jazz (lossless)"}
|
||||
- {id: 675, cat: Audio/Lossless, desc: "|- Funk, Soul, R&B (lossless)"}
|
||||
- {id: 677, cat: Audio/MP3, desc: "|- Зарубежный джаз (lossy)"}
|
||||
- {id: 680, cat: Audio/Lossless, desc: "|- Blues Rock (lossless)"}
|
||||
- {id: 679, cat: Audio/Lossless, desc: "|- Blues (Texas, Chicago, Modern and Others) (lossless)"}
|
||||
- {id: 681, cat: Audio/Lossless, desc: "|- Roots, Pre-War Blues, Early R&B, Gospel (lossless)"}
|
||||
- {id: 683, cat: Audio/MP3, desc: "|- Зарубежный блюз (lossy)"}
|
||||
- {id: 686, cat: Audio/Lossless, desc: "|- Отечественный джаз (lossless)"}
|
||||
- {id: 687, cat: Audio/MP3, desc: "|- Отечественный джаз (lossy)"}
|
||||
- {id: 688, cat: Audio/Lossless, desc: "|- Отечественный блюз (lossless)"}
|
||||
- {id: 689, cat: Audio/MP3, desc: "|- Отечественный блюз (lossy)"}
|
||||
# Программное обеспечение
|
||||
- {id: 68, cat: PC, desc: "|- Программы под Windows"}
|
||||
- {id: 91, cat: PC, desc: "|-- Системы для бизнеса"}
|
||||
- {id: 95, cat: PC, desc: "|-- Программы для работы со звуком"}
|
||||
- {id: 94, cat: PC, desc: "|-- Редакторы видео"}
|
||||
- {id: 87, cat: PC, desc: "|-- 3D моделирование, рендеринг и плагины для них"}
|
||||
- {id: 98, cat: PC, desc: "|-- Системы навигации и карты"}
|
||||
# Книги и журналы
|
||||
- {id: 340, cat: Books, desc: "|- Предложения по улучшению раздела 'Книги и журналы..."}
|
||||
- {id: 341, cat: Books, desc: "|- Художественная литература"}
|
||||
- {id: 351, cat: Books, desc: "|-- Русская литература (Классика)"}
|
||||
- {id: 405, cat: Books, desc: "|-- Русская литература (Современная проза)"}
|
||||
- {id: 352, cat: Books/Foreign, desc: "|-- Зарубежная литература (до 1900 г.)"}
|
||||
- {id: 353, cat: Books/Foreign, desc: "|-- Зарубежная литература (XX и XXI век)"}
|
||||
- {id: 354, cat: Books, desc: "|-- Детектив / боевик / триллер"}
|
||||
- {id: 355, cat: Books, desc: "|-- Женский роман"}
|
||||
- {id: 315, cat: Books/Foreign, desc: "|-- Зарубежная фантастика / фэнтези / мистика"}
|
||||
- {id: 316, cat: Books, desc: "|-- Отечественная фантастика / фэнтези / мистика"}
|
||||
- {id: 356, cat: Books, desc: "|-- Приключения"}
|
||||
- {id: 358, cat: Books/Foreign, desc: "|-- Художественная литература на иностранных языках"}
|
||||
- {id: 365, cat: Books, desc: "|- Учебная литература для детского сада и начальной шко..."}
|
||||
- {id: 359, cat: Books, desc: "|- Художественная литературара для средних и старших классов"}
|
||||
- {id: 343, cat: Books, desc: "|- Гуманитарные науки, история, философия"}
|
||||
- {id: 378, cat: Books, desc: "|-- Исторические науки. Издания 1992-по н.в."}
|
||||
- {id: 377, cat: Books, desc: "|-- История России"}
|
||||
- {id: 376, cat: Books, desc: "|-- Эпоха СССР"}
|
||||
- {id: 375, cat: Books, desc: "|-- История отдельных стран и регионов"}
|
||||
- {id: 371, cat: Books, desc: "|-- Философия"}
|
||||
- {id: 368, cat: Books, desc: "|-- Психотерапия, психодиагностика, консультирование и психокоррекция"}
|
||||
- {id: 367, cat: Books, desc: "|-- Эзотерика, саморазвитие и самосовершенствование"}
|
||||
- {id: 382, cat: Books, desc: "|- Электроника / радио"}
|
||||
- {id: 345, cat: Books, desc: "|- Компьютерная литература"}
|
||||
- {id: 394, cat: Books, desc: "|-- Веб-дизайн и программирование"}
|
||||
- {id: 393, cat: Books, desc: "|-- Программирование"}
|
||||
- {id: 898, cat: Books, desc: "|-- СУБД"}
|
||||
- {id: 392, cat: Books, desc: "|-- Графика, обработка видео"}
|
||||
- {id: 391, cat: Books, desc: "|-- Сети / VoIP"}
|
||||
- {id: 389, cat: Books, desc: "|-- Компьютерные журналы и приложения к ним"}
|
||||
- {id: 396, cat: Books/Other, desc: "|- Прочее"}
|
||||
- {id: 349, cat: Books/Mags, desc: "|- Журналы и газеты (общий раздел)"}
|
||||
- {id: 350, cat: Books/Other, desc: "|- Разное"}
|
||||
- {id: 342, cat: Books, desc: "|-- Учебная литература - для детей, родителей и учителей"}
|
||||
- {id: 370, cat: Books, desc: "|-- Экономика, бизнес, менеджмент, маркетинг"}
|
||||
- {id: 398, cat: Books, desc: "|-- Прочие хобби"}
|
||||
- {id: 399, cat: Books, desc: "|-- Кулинария (книги)"}
|
||||
- {id: 400, cat: Books, desc: "|-- Охота и рыбалка"}
|
||||
- {id: 336, cat: Books, desc: "|-- Физкультура, фитнес, бодибилдинг, йога"}
|
||||
# Разное
|
||||
- {id: 242, cat: Other, desc: "|- Другое"}
|
||||
# Скрытые разделы
|
||||
- {id: 1184, cat: Other, desc: "|- Для оформления релизов AVP Studio"}
|
||||
# undocumented
|
||||
- {id: 556, cat: Audio, desc: "Архив раздач (общий музыкальный)"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q]
|
||||
movie-search: [q]
|
||||
music-search: [q]
|
||||
book-search: [q]
|
||||
|
||||
settings:
|
||||
- name: username
|
||||
type: text
|
||||
label: Username
|
||||
- name: password
|
||||
type: password
|
||||
label: Password
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
default: 1
|
||||
options:
|
||||
1: created
|
||||
10: seeders
|
||||
7: size
|
||||
2: title
|
||||
- name: type
|
||||
type: select
|
||||
label: Order requested from site
|
||||
default: 2
|
||||
options:
|
||||
2: desc
|
||||
1: asc
|
||||
|
||||
login:
|
||||
path: login.php
|
||||
method: form
|
||||
form: form[action="./login.php"]
|
||||
inputs:
|
||||
login_username: "{{ .Config.username }}"
|
||||
login_password: "{{ .Config.password }}"
|
||||
redirect: "index.php"
|
||||
login: Вход
|
||||
error:
|
||||
- selector: table.error
|
||||
test:
|
||||
path: index.php
|
||||
selector: a[href^="/login.php?logout=1"]
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: tracker.php
|
||||
inputs:
|
||||
f: "{{ join .Categories \",\" }}"
|
||||
nm: "{{ .Keywords }}"
|
||||
o: "{{ .Config.sort }}"
|
||||
s: "{{ .Config.type }}"
|
||||
tm: -1
|
||||
|
||||
rows:
|
||||
selector: tr[id^="tor_"]:has(a[href^="/download.php?id="])
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: a[href^="tracker.php?f="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: f
|
||||
title:
|
||||
selector: a.tLink
|
||||
details:
|
||||
selector: a.tLink
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href^="/download.php?id="]
|
||||
attribute: href
|
||||
size:
|
||||
selector: td:nth-child(6) > u
|
||||
seeders:
|
||||
selector: td.seedmed > b
|
||||
leechers:
|
||||
selector: td.leechmed > b
|
||||
grabs:
|
||||
selector: td:nth-child(9)
|
||||
date:
|
||||
selector: td:last-child > u
|
||||
downloadvolumefactor:
|
||||
text: 1
|
||||
uploadvolumefactor:
|
||||
text: 1
|
||||
# engine n/a
|
||||
@@ -0,0 +1,203 @@
|
||||
---
|
||||
id: njtupt
|
||||
name: njtupt (浦园)
|
||||
description: "njtupt (浦园) is a CHINESE Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
language: zh-CN
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://njtupt.top/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 401, cat: Movies, desc: "电影/Movies"}
|
||||
- {id: 402, cat: TV, desc: "剧集/TV-Series"}
|
||||
- {id: 403, cat: TV, desc: "综艺/TV-Show"}
|
||||
- {id: 405, cat: TV/Anime, desc: "动漫/Anime"}
|
||||
- {id: 406, cat: Audio, desc: "音乐/Music"}
|
||||
- {id: 422, cat: Audio/Video, desc: "演出/MusicVideo"}
|
||||
- {id: 404, cat: TV/Documentary, desc: "纪录片/Documentary"}
|
||||
- {id: 407, cat: TV/Sport, desc: "体育/Sports"}
|
||||
- {id: 415, cat: TV, desc: "资料/Education"}
|
||||
- {id: 425, cat: PC/Games, desc: "游戏/Game"}
|
||||
- {id: 428, cat: PC/0day, desc: "软件/Software"}
|
||||
- {id: 409, cat: Other, desc: "其他/Other"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid, doubanid]
|
||||
movie-search: [q, imdbid, doubanid]
|
||||
music-search: [q]
|
||||
|
||||
settings:
|
||||
- name: username
|
||||
type: text
|
||||
label: Username
|
||||
- name: password
|
||||
type: password
|
||||
label: Password
|
||||
- name: 2facode
|
||||
type: text
|
||||
label: 2FA code
|
||||
- name: info_2fa
|
||||
type: info
|
||||
label: "About 2FA code"
|
||||
default: "Only fill in the <b>2FA code</b> box if you have enabled <b>2FA</b> on the njtupt (浦园) Web Site. Otherwise just leave it empty."
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
default: 4
|
||||
options:
|
||||
4: created
|
||||
7: seeders
|
||||
5: size
|
||||
1: title
|
||||
- name: type
|
||||
type: select
|
||||
label: Order requested from site
|
||||
default: desc
|
||||
options:
|
||||
desc: desc
|
||||
asc: asc
|
||||
- name: info_tpp
|
||||
type: info
|
||||
label: Results Per Page
|
||||
default: For best results, change the <b>Torrents per page:</b> setting to <b>100</b> on your account profile.
|
||||
- name: info_activity
|
||||
type: info
|
||||
label: Account Inactivity
|
||||
default: "Account Retention Rules:<ol><li>Veteran User or above would never be deleted; (Not enabled for the time being).</li><li>Elite User or above would never be deleted if parked (at User CP); (Not enabled for the time being).</li><li>Parked accounts would be deleted if users have not logged in for more than 400 days in a row.</li><li>Unparked accounts would be deleted if users have not logged in for more than 150 days in a row.</li></ol>"
|
||||
|
||||
login:
|
||||
path: login.php
|
||||
method: form
|
||||
form: form[action="takelogin.php"]
|
||||
captcha:
|
||||
type: image
|
||||
selector: img[alt="CAPTCHA"]
|
||||
input: imagestring
|
||||
inputs:
|
||||
secret: ""
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
two_step_code: "{{ .Config.2facode }}"
|
||||
logout: ""
|
||||
securelogin: ""
|
||||
ssl: yes
|
||||
trackerssl: yes
|
||||
error:
|
||||
- selector: td.embedded:has(h2:contains("失败"))
|
||||
test:
|
||||
path: index.php
|
||||
selector: a[href="logout.php"]
|
||||
search:
|
||||
paths:
|
||||
- path: torrents.php
|
||||
inputs:
|
||||
$raw: "{{ range .Categories }}cat{{.}}=1&{{end}}"
|
||||
search: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{ else }}{{ end }}{{ if and .Query.DoubanID (eq .Query.IMDBID .False) }}{{ .Query.DoubanID }}{{ else }}{{ end }}{{ if and (eq .Query.IMDBID .False) (eq .Query.DoubanID .False) }}{{ .Keywords }}{{ else }}{{ end }}"
|
||||
# 0 incldead, 1 active, 2 dead
|
||||
incldead: 0
|
||||
# 0 all, 1 normal, 2 free, 3 2x, 4 2xfree, 5 50%, 6 2x50%, 7 30%
|
||||
spstate: "{{ if .Config.freeleech }}2{{ else }}0{{ end }}"
|
||||
# 0 title, 1 descr, 3 uploader, 4 imdburl
|
||||
search_area: "{{ if .Query.IMDBID }}4{{ else }}{{ end }}{{ if and .Query.DoubanID (eq .Query.IMDBID .False) }}1{{ else }}{{ end }}{{ if and (eq .Query.IMDBID .False) (eq .Query.DoubanID .False) }}0{{ else }}{{ end }}"
|
||||
# 0 AND, 2 exact
|
||||
search_mode: 0
|
||||
sort: "{{ .Config.sort }}"
|
||||
type: "{{ .Config.type }}"
|
||||
notnewword: 1
|
||||
|
||||
rows:
|
||||
selector: table.torrents > tbody > tr:has(a[href*="download.php?id="])
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: a[href*="?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
title_default:
|
||||
selector: a[href*="details.php?id="]
|
||||
title:
|
||||
selector: a[title][href*="details.php?id="]
|
||||
attribute: title
|
||||
optional: true
|
||||
default: "{{ .Result.title_default }}"
|
||||
details:
|
||||
selector: a[href*="details.php?id="]
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href*="download.php?id="]
|
||||
attribute: href
|
||||
poster:
|
||||
selector: img[data-src]
|
||||
attribute: data-src
|
||||
imdbid:
|
||||
# site currently only has a badge and rating, the id is not present. just in case a future update.
|
||||
selector: a[href*="imdb.com/title/tt"]
|
||||
attribute: href
|
||||
doubanid:
|
||||
# site currently only has a badge and rating, the id is not present. just in case a future update.
|
||||
selector: a[href*="movie.douban.com/subject/"]
|
||||
attribute: href
|
||||
date_elapsed:
|
||||
# time type: time elapsed (default)
|
||||
selector: td.rowfollow:nth-child(4) > span[title]
|
||||
attribute: title
|
||||
optional: true
|
||||
filters:
|
||||
- name: append
|
||||
args: " +08:00" # CST
|
||||
- name: dateparse
|
||||
args: "yyyy-MM-dd HH:mm:ss zzz"
|
||||
date_added:
|
||||
# time added
|
||||
selector: td.rowfollow:nth-child(4):not(:has(span))
|
||||
optional: true
|
||||
filters:
|
||||
- name: append
|
||||
args: " +08:00" # CST
|
||||
- name: dateparse
|
||||
args: "yyyy-MM-ddHH:mm:ss zzz"
|
||||
date:
|
||||
text: "{{ if or .Result.date_elapsed .Result.date_added }}{{ or .Result.date_elapsed .Result.date_added }}{{ else }}now{{ end }}"
|
||||
size:
|
||||
selector: td.rowfollow:nth-child(5)
|
||||
optional: true
|
||||
default: 512MB
|
||||
seeders:
|
||||
selector: td.rowfollow:nth-child(6)
|
||||
optional: true
|
||||
default: 0
|
||||
leechers:
|
||||
selector: td.rowfollow:nth-child(7)
|
||||
optional: true
|
||||
default: 0
|
||||
grabs:
|
||||
selector: td.rowfollow:nth-child(8)
|
||||
optional: true
|
||||
default: 0
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img.pro_free: 0
|
||||
img.pro_free2up: 0
|
||||
img.pro_50pctdown: 0.5
|
||||
img.pro_50pctdown2up: 0.5
|
||||
img.pro_30pctdown: 0.3
|
||||
"*": 1
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
img.pro_50pctdown2up: 2
|
||||
img.pro_free2up: 2
|
||||
img.pro_2up: 2
|
||||
"*": 1
|
||||
description:
|
||||
selector: td:nth-child(2)
|
||||
remove: a, b, font, img, span
|
||||
# NexusPHP v1.8.15 2024-11-27
|
||||
@@ -0,0 +1,192 @@
|
||||
---
|
||||
id: nobs
|
||||
name: NOBS
|
||||
description: "NOBS (NUCLEAR ORDER BIT SYNDICATE) is a SPANISH Private Torrent Tracker for MOVIES / TV"
|
||||
language: es-ES
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://nobs.rawsmoke.net/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: Movies, desc: "Movies"}
|
||||
- {id: 2, cat: TV, desc: "TV"}
|
||||
- {id: 3, cat: Console, desc: "Retro Arcade"}
|
||||
- {id: 4, cat: Movies/Other, desc: "Anime Movies"}
|
||||
- {id: 5, cat: TV/Anime, desc: "Anime TV Shows"}
|
||||
- {id: 7, cat: Books, desc: "E-Books"}
|
||||
- {id: 8, cat: Audio/Audiobook, desc: "Audiobooks"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid, tvdbid, tmdbid]
|
||||
movie-search: [q, imdbid, tmdbid]
|
||||
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://nobs.rawsmoke.net/\" target=\"_blank\">NOBS</a> account <i>My Settings</i> page and clicking on the <b>API Key</b> tab."
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: single_file_release_use_filename
|
||||
type: checkbox
|
||||
label: Use filename as title for single file releases
|
||||
default: true
|
||||
- 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
|
||||
error:
|
||||
- selector: a[href*="/login"]
|
||||
message:
|
||||
text: "The API key was not accepted by {{ .Config.sitelink }}."
|
||||
- selector: :root:contains("Account is Banned")
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://hdinnovations.github.io/UNIT3D/torrent_api.html
|
||||
# https://github.com/HDInnovations/UNIT3D/blob/master/app/Http/Controllers/API/TorrentController.php#L657
|
||||
- path: api/torrents/filter
|
||||
response:
|
||||
type: json
|
||||
|
||||
headers:
|
||||
Authorization: ["Bearer {{ .Config.apikey }}"]
|
||||
|
||||
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
|
||||
$raw: "{{ range .Categories }}&categories[]={{.}}{{end}}"
|
||||
name: "{{ .Keywords }}"
|
||||
seasonNumber: "{{ .Query.Season }}"
|
||||
episodeNumber: "{{ .Query.Ep }}"
|
||||
imdbId: "{{ .Query.IMDBIDShort }}"
|
||||
tmdbId: "{{ .Query.TMDBID }}"
|
||||
tvdbId: "{{ .Query.TVDBID }}"
|
||||
"free[]": "{{ if .Config.freeleech }}100{{ else }}{{ end }}"
|
||||
sortField: "{{ .Config.sort }}"
|
||||
sortDirection: "{{ .Config.type }}"
|
||||
perPage: 100
|
||||
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
args: ["\\.", " "]
|
||||
|
||||
rows:
|
||||
selector: data
|
||||
attribute: attributes
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: category_id
|
||||
title_optional:
|
||||
selector: name
|
||||
title_filename:
|
||||
selector: "files[0].name"
|
||||
optional: true
|
||||
files:
|
||||
selector: num_file
|
||||
title:
|
||||
text: "{{ if and (.Config.single_file_release_use_filename) (eq .Result.files \"1\") (.Result.title_filename) }}{{ .Result.title_filename }}{{ else }}{{ .Result.title_optional }}{{ end }} Spanish"
|
||||
details:
|
||||
selector: details_link
|
||||
download:
|
||||
selector: download_link
|
||||
poster:
|
||||
selector: meta.poster
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["https://via.placeholder.com/90x135", ""]
|
||||
imdbid:
|
||||
selector: imdb_id
|
||||
tmdbid:
|
||||
selector: tmdb_id
|
||||
tvdbid:
|
||||
selector: tvdb_id
|
||||
genre:
|
||||
selector: meta.genres
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["(?i)(Science Fiction)", "Science_Fiction"]
|
||||
- name: re_replace
|
||||
args: ["(?i)(TV Movie)", "TV_Movie"]
|
||||
- name: replace
|
||||
args: [" & ", "_&_"]
|
||||
_internal:
|
||||
selector: internal
|
||||
case:
|
||||
False: "{{ .False }}"
|
||||
True: "{{ .True }}"
|
||||
description:
|
||||
text: "{{ if .Result._internal }}Internal{{ else }}{{ end }}{{ if and .Result._internal .Result.genre }} | {{ else }}{{ end }}{{ .Result.genre }}"
|
||||
seeders:
|
||||
selector: seeders
|
||||
leechers:
|
||||
selector: leechers
|
||||
grabs:
|
||||
selector: times_completed
|
||||
date:
|
||||
# "created_at": "2021-10-18T00:34:50.000000Z" is returned by Newtonsoft.Json.Linq as 18/10/2021 00:34:50
|
||||
selector: created_at
|
||||
filters:
|
||||
- name: append
|
||||
args: " +00:00" # GMT
|
||||
- name: dateparse
|
||||
args: "MM/dd/yyyy HH:mm:ss zzz"
|
||||
size:
|
||||
selector: size
|
||||
_featured:
|
||||
selector: featured
|
||||
case:
|
||||
False: "{{ .False }}"
|
||||
True: "{{ .True }}"
|
||||
downloadvolumefactor_freeleech:
|
||||
# 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
|
||||
downloadvolumefactor:
|
||||
text: "{{ if .Result._featured }}0{{ else }}{{ .Result.downloadvolumefactor_freeleech }}{{ end }}"
|
||||
uploadvolumefactor_double_upload:
|
||||
# api returns False, True
|
||||
selector: double_upload
|
||||
case:
|
||||
False: 1 # normal
|
||||
True: 2 # double
|
||||
uploadvolumefactor:
|
||||
text: "{{ if .Result._featured }}2{{ else }}{{ .Result.uploadvolumefactor_double_upload }}{{ end }}"
|
||||
# global MR is 0.4 but torrents must be seeded for 4 days regardless of ratio
|
||||
# minimumratio:
|
||||
# text: 0.4
|
||||
minimumseedtime:
|
||||
# 4 days (as seconds = 4 x 24 x 60 x 60)
|
||||
text: 345600
|
||||
# json UNIT3D 9.2.0
|
||||
@@ -0,0 +1,203 @@
|
||||
---
|
||||
id: nordicbytes
|
||||
replaces:
|
||||
- danishbytes-api
|
||||
name: NordicBytes
|
||||
description: "NordicBytes is a Mixed NORDIC Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
language: en-US
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://nordicbytes.org/
|
||||
legacylinks:
|
||||
- https://danishbytes.org/
|
||||
- https://danishbytes.art/
|
||||
- https://danishbytes.club/
|
||||
- https://danishbytes2.org/
|
||||
- https://dbytes.org/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: Movies, desc: "Movies"}
|
||||
- {id: 2, cat: TV, desc: "TV"}
|
||||
- {id: 3, cat: PC/0day, desc: "Apps"}
|
||||
- {id: 4, cat: PC/Games, desc: "Games"}
|
||||
- {id: 5, cat: Audio, desc: "Sound"}
|
||||
- {id: 6, cat: Books, desc: "Books"}
|
||||
- {id: 7, cat: Audio/Audiobook, desc: "AudioBooks"}
|
||||
- {id: 8, cat: Audio/Other, desc: "Podcasts"}
|
||||
- {id: 9, cat: XXX, desc: "XXX"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid, tvdbid, tmdbid]
|
||||
movie-search: [q, imdbid, tmdbid]
|
||||
music-search: [q]
|
||||
book-search: [q]
|
||||
|
||||
settings:
|
||||
- name: apikey
|
||||
type: text
|
||||
label: APIKey
|
||||
- name: info_apikey
|
||||
type: info
|
||||
label: About your API key
|
||||
default: "Find or Generate a new API Key by accessing the <a href=\"https://nordicbytes.org/account/apikey/\" target=\"_blank\">NordicBytes Account API Key</a> page."
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: single_file_release_use_filename
|
||||
type: checkbox
|
||||
label: Use filename as title for single file releases
|
||||
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
|
||||
- name: info_activity
|
||||
type: info
|
||||
label: Account Inactivity
|
||||
default: "Your account is automatically disabled after 90 days of no activity."
|
||||
|
||||
login:
|
||||
path: api/torrents
|
||||
method: get
|
||||
error:
|
||||
- selector: a[href*="/login"]
|
||||
message:
|
||||
text: "The API key was not accepted by {{ .Config.sitelink }}."
|
||||
- selector: :root:contains("Account is Banned")
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://hdinnovations.github.io/UNIT3D/torrent_api.html
|
||||
# https://github.com/HDInnovations/UNIT3D/blob/master/app/Http/Controllers/API/TorrentController.php#L657
|
||||
- path: api/torrents/filter
|
||||
response:
|
||||
type: json
|
||||
|
||||
headers:
|
||||
Authorization: ["Bearer {{ .Config.apikey }}"]
|
||||
|
||||
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
|
||||
$raw: "{{ range .Categories }}&categories[]={{.}}{{end}}"
|
||||
name: "{{ .Keywords }}"
|
||||
seasonNumber: "{{ .Query.Season }}"
|
||||
episodeNumber: "{{ .Query.Ep }}"
|
||||
imdbId: "{{ .Query.IMDBIDShort }}"
|
||||
tmdbId: "{{ .Query.TMDBID }}"
|
||||
tvdbId: "{{ .Query.TVDBID }}"
|
||||
"free[]": "{{ if .Config.freeleech }}100{{ else }}{{ end }}"
|
||||
sortField: "{{ .Config.sort }}"
|
||||
sortDirection: "{{ .Config.type }}"
|
||||
perPage: 100
|
||||
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
args: ["\\.", " "]
|
||||
|
||||
rows:
|
||||
selector: data
|
||||
attribute: attributes
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: category_id
|
||||
title_optional:
|
||||
selector: name
|
||||
title_filename:
|
||||
selector: "files[0].name"
|
||||
optional: true
|
||||
files:
|
||||
selector: num_file
|
||||
title:
|
||||
text: "{{ if and (.Config.single_file_release_use_filename) (eq .Result.files \"1\") (.Result.title_filename) }}{{ .Result.title_filename }}{{ else }}{{ .Result.title_optional }}{{ end }}"
|
||||
details:
|
||||
selector: details_link
|
||||
download:
|
||||
selector: download_link
|
||||
infohash:
|
||||
selector: info_hash
|
||||
poster:
|
||||
selector: meta.poster
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["https://placehold.co/90x135", ""]
|
||||
imdbid:
|
||||
selector: imdb_id
|
||||
tmdbid:
|
||||
selector: tmdb_id
|
||||
tvdbid:
|
||||
selector: tvdb_id
|
||||
genre:
|
||||
selector: meta.genres
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["(?i)(Science Fiction)", "Science_Fiction"]
|
||||
- name: re_replace
|
||||
args: ["(?i)(TV Movie)", "TV_Movie"]
|
||||
- name: replace
|
||||
args: [" & ", "_&_"]
|
||||
description:
|
||||
text: "{{ .Result.genre }}"
|
||||
seeders:
|
||||
selector: seeders
|
||||
leechers:
|
||||
selector: leechers
|
||||
grabs:
|
||||
selector: times_completed
|
||||
date:
|
||||
# "created_at": "2021-10-18T00:34:50.000000Z" is returned by Newtonsoft.Json.Linq as 18/10/2021 00:34:50
|
||||
selector: created_at
|
||||
filters:
|
||||
- name: append
|
||||
args: " +00:00" # GMT
|
||||
- name: dateparse
|
||||
args: "MM/dd/yyyy HH:mm:ss zzz"
|
||||
size:
|
||||
selector: size
|
||||
_featured:
|
||||
selector: featured
|
||||
case:
|
||||
False: "{{ .False }}"
|
||||
True: "{{ .True }}"
|
||||
downloadvolumefactor_freeleech:
|
||||
# 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
|
||||
downloadvolumefactor:
|
||||
text: "{{ if .Result._featured }}0{{ else }}{{ .Result.downloadvolumefactor_freeleech }}{{ end }}"
|
||||
uploadvolumefactor_double_upload:
|
||||
# api returns False, True
|
||||
selector: double_upload
|
||||
case:
|
||||
False: 1 # normal
|
||||
True: 2 # double
|
||||
uploadvolumefactor:
|
||||
text: "{{ if .Result._featured }}2{{ else }}{{ .Result.uploadvolumefactor_double_upload }}{{ end }}"
|
||||
minimumratio:
|
||||
text: 1.0
|
||||
minimumseedtime:
|
||||
# 2 day (as seconds = 2 x 24 x 60 x 60)
|
||||
text: 172800
|
||||
# json Traxary v0.0.187 (based on UNIT3D 8.2.0)
|
||||
@@ -0,0 +1,181 @@
|
||||
---
|
||||
id: nostradamus
|
||||
name: Nostradamus
|
||||
description: "Nostradamus is a ratioless FRENCH Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
language: fr-FR
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://nostradamus.foo/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
# from https://nostradamus.foo/api?t=caps&apikey=YOUR-API-KEY
|
||||
- {id: 2000, cat: Movies, desc: "Films"}
|
||||
- {id: 2020, cat: Movies, desc: "Films/Film"}
|
||||
- {id: 2010, cat: Movies/Other, desc: "Films/Animation"}
|
||||
- {id: 2030, cat: TV/Documentary, desc: "Films/Documentaire"}
|
||||
- {id: 2040, cat: Audio/Video, desc: "Films/Spectacle"}
|
||||
- {id: 2060, cat: Audio/Video, desc: "Films/Concert"}
|
||||
- {id: 2510, cat: Movies/Other, desc: "Films/Court-métrage"}
|
||||
- {id: 5000, cat: TV, desc: "Séries TV"}
|
||||
- {id: 5040, cat: TV, desc: "Séries TV/Série TV"}
|
||||
- {id: 5070, cat: TV/Anime, desc: "Séries TV/Animation Série"}
|
||||
- {id: 5080, cat: TV, desc: "Séries TV/Emission TV"}
|
||||
- {id: 5090, cat: Audio/Video, desc: "Vidéo"}
|
||||
- {id: 5060, cat: TV/Sport, desc: "Vidéo/Sport"}
|
||||
- {id: 5091, cat: Audio/Video, desc: "Vidéo/Vidéo-clips"}
|
||||
- {id: 5092, cat: Audio/Video, desc: "Vidéo/Autre"}
|
||||
- {id: 7000, cat: Books, desc: "eBook"}
|
||||
- {id: 7010, cat: Audio/Audiobook, desc: "eBook/Audio"}
|
||||
- {id: 7030, cat: Books/Comics, desc: "eBook/BDs"}
|
||||
- {id: 7040, cat: Books/Comics, desc: "eBook/Comics"}
|
||||
- {id: 7020, cat: Books/EBook, desc: "eBook/Livres"}
|
||||
- {id: 7050, cat: Books/Comics, desc: "eBook/Mangas"}
|
||||
- {id: 7060, cat: Books/Mags, desc: "eBook/Presse"}
|
||||
- {id: 3000, cat: Audio, desc: "Audio"}
|
||||
- {id: 3030, cat: Audio/Other, desc: "Audio/Karaoke"}
|
||||
- {id: 3010, cat: Audio, desc: "Audio/Musique"}
|
||||
- {id: 3040, cat: Audio/Other, desc: "Audio/Podcast Radio"}
|
||||
- {id: 3050, cat: Audio/Other, desc: "Audio/Samples"}
|
||||
- {id: 1000, cat: Console, desc: "Jeu vidéo"}
|
||||
- {id: 1099, cat: Console/Other, desc: "Jeu vidéo/Autre"}
|
||||
- {id: 1091, cat: PC/Games, desc: "Jeu vidéo/Linux"}
|
||||
- {id: 1092, cat: PC/Games, desc: "Jeu vidéo/MacOS"}
|
||||
- {id: 1040, cat: PC/Games, desc: "Jeu vidéo/Microsoft"}
|
||||
- {id: 1030, cat: Console/NDS, desc: "Jeu vidéo/Nintendo"}
|
||||
- {id: 1060, cat: Console/Other, desc: "Jeu vidéo/Smartphone"}
|
||||
- {id: 1080, cat: Console/PS4, desc: "Jeu vidéo/Sony"}
|
||||
- {id: 1061, cat: Console/Other, desc: "Jeu vidéo/Tablette"}
|
||||
- {id: 1090, cat: PC/Games, desc: "Jeu vidéo/Windows"}
|
||||
- {id: 8000, cat: Other, desc: "eBook/Littérature & Audio/Autre & Séries TV/Documentaire"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, tvdbid]
|
||||
movie-search: [q, imdbid]
|
||||
music-search: [q]
|
||||
book-search: [q]
|
||||
|
||||
settings:
|
||||
- name: apikey
|
||||
type: text
|
||||
label: API Key
|
||||
- name: info_key
|
||||
type: info
|
||||
label: About your API Key
|
||||
default: "You can find your API Key by accessing the <a href=\"https://nostradamus.foo/api-access\" target=\"_blank\">Nostradamus API access</a> page and scrolling down to the <b>API Credentials</b> section."
|
||||
- name: multilang
|
||||
type: checkbox
|
||||
label: Replace MULTi by another language in release name
|
||||
default: false
|
||||
- name: multilanguage
|
||||
type: select
|
||||
label: Replace MULTi by this language
|
||||
default: FRENCH
|
||||
options:
|
||||
FRENCH: FRENCH
|
||||
MULTi.FRENCH: MULTi.FRENCH
|
||||
ENGLISH: ENGLISH
|
||||
MULTi.ENGLISH: MULTi.ENGLISH
|
||||
VOSTFR: VOSTFR
|
||||
MULTi.VOSTFR: MULTi.VOSTFR
|
||||
- name: vostfr
|
||||
type: checkbox
|
||||
label: Replace VOSTFR and SUBFRENCH with ENGLISH
|
||||
default: false
|
||||
|
||||
login:
|
||||
# returns "401 Unauthorized, check your credentials" if passkey is invalid
|
||||
path: api
|
||||
method: get
|
||||
inputs:
|
||||
apikey: "{{ .Config.apikey }}"
|
||||
t: search
|
||||
limit: 1
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: api
|
||||
response:
|
||||
type: xml
|
||||
|
||||
inputs:
|
||||
apikey: "{{ .Config.apikey }}"
|
||||
t: "{{ if .Query.IMDBID }}movie{{ else }}{{ end }}{{ if .Query.TVDBID }}tvsearch{{ else }}{{ end }}{{ if or .Query.TVDBID .Query.IMDBID }}{{ else }}search{{ end }}"
|
||||
q: "{{ .Keywords }}"
|
||||
cat: "{{ join .Categories \",\" }}"
|
||||
season: "{{ .Query.Season }}"
|
||||
ep: "{{ .Query.Ep }}"
|
||||
imdbid: "{{ .Query.IMDBID }}"
|
||||
tvdbid: "{{ .Query.TVDBID }}"
|
||||
limit: 100
|
||||
|
||||
keywordsfilters:
|
||||
# replace spaces between words with percent wildcard
|
||||
- name: re_replace
|
||||
args: ["\\W+", "%"]
|
||||
|
||||
rows:
|
||||
selector: rss > channel > item
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: "[name=category]"
|
||||
attribute: value
|
||||
title_phase1:
|
||||
selector: title
|
||||
title_vostfr:
|
||||
text: "{{ .Result.title_phase1 }}"
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["(?i)\\b(vostfr|subfrench)\\b", "ENGLISH"]
|
||||
title_phase2:
|
||||
text: "{{ if .Config.vostfr }}{{ .Result.title_vostfr }}{{ else }}{{ .Result.title_phase1 }}{{ end }}"
|
||||
title_multilang:
|
||||
text: "{{ .Result.title_phase2 }}"
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["(?i)\\b(MULTI(?!.*(?:FRENCH|ENGLISH|VOSTFR|VF2|VFF|VFQ|VOQ|VFI|VOF)))\\b", "{{ .Config.multilanguage }}"]
|
||||
title:
|
||||
text: "{{ if .Config.multilang }}{{ .Result.title_multilang }}{{ else }}{{ .Result.title_phase2 }}{{ end }}"
|
||||
details:
|
||||
selector: link
|
||||
download:
|
||||
selector: enclosure
|
||||
attribute: url
|
||||
infohash:
|
||||
selector: "[name=infohash]"
|
||||
attribute: value
|
||||
date:
|
||||
# Thu, 15 Jan 2026 16:24:34 +0000
|
||||
selector: pubDate
|
||||
filters:
|
||||
- name: dateparse
|
||||
args: "ddd, dd MMM yyyy HH:mm:ss zzz"
|
||||
size:
|
||||
selector: "[name=size]"
|
||||
attribute: value
|
||||
imdbid:
|
||||
selector: "[name=imdbid]"
|
||||
attribute: value
|
||||
tmdbid:
|
||||
selector: "[name=tmdbid]"
|
||||
attribute: value
|
||||
seeders:
|
||||
selector: "[name=seeders]"
|
||||
attribute: value
|
||||
leechers:
|
||||
selector: "[name=leechers]"
|
||||
attribute: value
|
||||
grabs:
|
||||
selector: "[name=grabs]"
|
||||
attribute: value
|
||||
downloadvolumefactor:
|
||||
text: 0
|
||||
uploadvolumefactor:
|
||||
text: 1
|
||||
minimumseedtime:
|
||||
# 3 days (as seconds = 3 x 24 x 60 x 60)
|
||||
text: 259200
|
||||
# torznab xml
|
||||
@@ -0,0 +1,145 @@
|
||||
---
|
||||
id: order66
|
||||
name: Order66
|
||||
description: "Order66 is a Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
language: en-US
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://executeorder66.info/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 47, cat: PC/0day, desc: "Apps: WINDOWS/O/S"}
|
||||
- {id: 18, cat: PC, desc: "Apps: PC"}
|
||||
- {id: 20, cat: PC, desc: "Apps: Linux"}
|
||||
- {id: 62, cat: Console, desc: "Games: XBOX360/ALL"}
|
||||
- {id: 10, cat: PC/Games, desc: "Games: PC"}
|
||||
- {id: 9, cat: Audio, desc: "Karaoke: All"}
|
||||
- {id: 63, cat: Books/Mags, desc: "Mags: mags"}
|
||||
- {id: 54, cat: Movies/DVD, desc: "Movies: DVD-R"}
|
||||
- {id: 52, cat: Movies/BluRay, desc: "Movies: BD-Rip"}
|
||||
- {id: 55, cat: Movies/BluRay, desc: "Movies: HD/Bluray"}
|
||||
- {id: 56, cat: Movies, desc: "Movies: Kids"}
|
||||
- {id: 57, cat: Movies/HD, desc: "Movies: MP4"}
|
||||
- {id: 58, cat: Movies, desc: "Movies: Packs"}
|
||||
- {id: 53, cat: Movies/SD, desc: "Movies: Cam"}
|
||||
- {id: 60, cat: Movies/HD, desc: "Movies: x265"}
|
||||
- {id: 51, cat: Movies/BluRay, desc: "Movies: BD-R"}
|
||||
- {id: 50, cat: Movies/UHD, desc: "Movies: 4K"}
|
||||
- {id: 49, cat: Movies/SD, desc: "Movies: 480p"}
|
||||
- {id: 48, cat: Movies/BluRay, desc: "Movies: BluRay/AVI/MKV"}
|
||||
- {id: 61, cat: Movies/SD, desc: "Movies: Xvid"}
|
||||
- {id: 59, cat: Movies/WEB-DL, desc: "Movies: WEBRip/Web-DL"}
|
||||
- {id: 1, cat: Movies/Other, desc: "Movies: R3-En-Code"}
|
||||
- {id: 64, cat: Audio, desc: "Music: Wav"}
|
||||
- {id: 22, cat: Audio, desc: "Music: MP3/Flac"}
|
||||
- {id: 26, cat: Audio, desc: "Music: SiteDJExclusivemix"}
|
||||
- {id: 41, cat: TV/HD, desc: "TV: HD"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
music-search: [q]
|
||||
|
||||
settings:
|
||||
- name: cookie
|
||||
type: text
|
||||
label: Cookie
|
||||
- name: info_cookie
|
||||
type: info_cookie
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Filter 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
|
||||
- name: info_results
|
||||
type: info
|
||||
label: Search results
|
||||
default: "If you are getting <b>0 results</b> then access the site with your browser and <b>mark as read</b> all PMs."
|
||||
|
||||
login:
|
||||
# using cookie method because login page has embedded Cloudflare turnstile
|
||||
method: cookie
|
||||
inputs:
|
||||
cookie: "{{ .Config.cookie }}"
|
||||
test:
|
||||
path: index.php
|
||||
selector: a[href="account-logout.php"]
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://executeorder66.info/torrents.php?search=&cat=
|
||||
- path: torrents.php
|
||||
inputs:
|
||||
search: "{{ .Keywords }}"
|
||||
cat: 0
|
||||
sort: "{{ .Config.sort }}"
|
||||
order: "{{ .Config.type }}"
|
||||
|
||||
keywordsfilters:
|
||||
# replace spaces between words with percent wildcard
|
||||
- name: re_replace
|
||||
args: ["\\W+", "%"]
|
||||
|
||||
rows:
|
||||
selector: "table.ttbl > tbody > tr:has(a[href^=\"download.php?id=\"]){{ if .Config.freeleech }}:has(span.badge-free){{ else }}{{ end }}"
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: a[href^="torrents.php?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
title:
|
||||
selector: a[href^="torrents-details.php?id="]
|
||||
details:
|
||||
selector: a[href^="torrents-details.php?id="]
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href^="download.php?id="]
|
||||
attribute: href
|
||||
poster:
|
||||
selector: div.cov-tip > img
|
||||
attribute: src
|
||||
size:
|
||||
selector: td:nth-child(6)
|
||||
date:
|
||||
# auto adjusted by site account profile
|
||||
# 16-06-26<br>09:08
|
||||
selector: td:nth-child(8)
|
||||
filters:
|
||||
- name: dateparse
|
||||
args: "dd-MM-yyHH:mm"
|
||||
seeders:
|
||||
selector: span[class^="num-s"]
|
||||
leechers:
|
||||
selector: span[class^="num-l"]
|
||||
grabs:
|
||||
selector: td:nth-child(7)
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
span.badge-free: 0
|
||||
"*": 1
|
||||
uploadvolumefactor:
|
||||
text: 1
|
||||
minimumratio:
|
||||
text: 0.5
|
||||
# TorrentTrader 3.8.3
|
||||
@@ -0,0 +1,89 @@
|
||||
---
|
||||
id: pandacd
|
||||
name: PandaCD
|
||||
description: "PandaCD is a Public Tracker for MUSIC (Creative Commons and artist-permitted content)"
|
||||
language: en-US
|
||||
type: public
|
||||
encoding: UTF-8
|
||||
|
||||
links:
|
||||
- https://pandacd.io/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
# https://pandacd.io/api/torznab?t=caps
|
||||
- {id: 3000, cat: Audio, desc: "Audio"}
|
||||
- {id: 3010, cat: Audio/MP3, desc: "MP3"}
|
||||
- {id: 3040, cat: Audio/Lossless, desc: "Lossless"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
music-search: [q, artist, album, genre]
|
||||
|
||||
settings: []
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: api/torznab
|
||||
response:
|
||||
type: xml
|
||||
|
||||
inputs:
|
||||
t: "{{ .Query.Type }}"
|
||||
q: "{{ .Keywords }}"
|
||||
cat: "{{ join .Categories \",\" }}"
|
||||
artist: "{{ .Query.Artist }}"
|
||||
album: "{{ .Query.Album }}"
|
||||
genre: "{{ .Query.Genre }}"
|
||||
limit: 100
|
||||
|
||||
rows:
|
||||
selector: rss > channel > item
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: "[name=category]"
|
||||
attribute: value
|
||||
title:
|
||||
selector: title
|
||||
details:
|
||||
selector: guid
|
||||
download:
|
||||
selector: enclosure
|
||||
attribute: url
|
||||
date:
|
||||
# Wed, 15 Apr 2026 02:01:34 +0000
|
||||
selector: pubDate
|
||||
filters:
|
||||
- name: dateparse
|
||||
args: "ddd, dd MMM yyyy HH:mm:ss zzz"
|
||||
size:
|
||||
selector: "[name=size]"
|
||||
attribute: value
|
||||
seeders:
|
||||
selector: "[name=seeders]"
|
||||
attribute: value
|
||||
leechers:
|
||||
selector: "[name=leechers]"
|
||||
attribute: value
|
||||
grabs:
|
||||
selector: "[name=grabs]"
|
||||
attribute: value
|
||||
files:
|
||||
selector: "[name=files]"
|
||||
attribute: value
|
||||
infohash:
|
||||
selector: "[name=infohash]"
|
||||
attribute: value
|
||||
genre:
|
||||
selector: "[name=genre]"
|
||||
attribute: value
|
||||
description:
|
||||
text: "{{ .Result.genre }}"
|
||||
downloadvolumefactor:
|
||||
selector: "[name=downloadvolumefactor]"
|
||||
attribute: value
|
||||
uploadvolumefactor:
|
||||
selector: "[name=uploadvolumefactor]"
|
||||
attribute: value
|
||||
# torznab xml
|
||||
@@ -0,0 +1,196 @@
|
||||
---
|
||||
id: peergarden
|
||||
name: PeerGarden
|
||||
description: "PeerGarden (PG) is a Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
language: en-US
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://peergarden.org/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: Movies, desc: "Movies"}
|
||||
- {id: 2, cat: TV, desc: "TV"}
|
||||
- {id: 3, cat: PC/0day, desc: "Apps"}
|
||||
- {id: 4, cat: PC/Games, desc: "Games"}
|
||||
- {id: 5, cat: Audio, desc: "Music"}
|
||||
- {id: 6, cat: Books, desc: "Books"}
|
||||
- {id: 7, cat: Audio/Audiobook, desc: "AudioBooks"}
|
||||
- {id: 8, cat: Audio/Other, desc: "Podcasts"}
|
||||
- {id: 10, cat: TV/Sport, desc: "Sports"}
|
||||
- {id: 11, cat: TV/Anime, desc: "Anime"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid, tvdbid, tmdbid]
|
||||
movie-search: [q, imdbid, tmdbid]
|
||||
music-search: [q]
|
||||
book-search: [q]
|
||||
|
||||
settings:
|
||||
- name: apikey
|
||||
type: text
|
||||
label: APIKey
|
||||
- name: info_apikey
|
||||
type: info
|
||||
label: About your API key
|
||||
default: "Find or Generate a new API Key by accessing the <a href=\"https://peergarden.org/account/apikey/\" target=\"_blank\">PeerGarden Account API Key</a> page."
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: single_file_release_use_filename
|
||||
type: checkbox
|
||||
label: Use filename as title for single file releases
|
||||
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
|
||||
- name: info_activity
|
||||
type: info
|
||||
label: Account Inactivity
|
||||
default: "Your account is automatically disabled after 90 days of no activity."
|
||||
|
||||
login:
|
||||
path: api/torrents
|
||||
method: get
|
||||
error:
|
||||
- selector: a[href*="/login"]
|
||||
message:
|
||||
text: "The API key was not accepted by {{ .Config.sitelink }}."
|
||||
- selector: :root:contains("Account is Banned")
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://hdinnovations.github.io/UNIT3D/torrent_api.html
|
||||
# https://github.com/HDInnovations/UNIT3D/blob/master/app/Http/Controllers/API/TorrentController.php#L657
|
||||
- path: api/torrents/filter
|
||||
response:
|
||||
type: json
|
||||
|
||||
headers:
|
||||
Authorization: ["Bearer {{ .Config.apikey }}"]
|
||||
|
||||
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
|
||||
$raw: "{{ range .Categories }}&categories[]={{.}}{{end}}"
|
||||
name: "{{ .Keywords }}"
|
||||
seasonNumber: "{{ .Query.Season }}"
|
||||
episodeNumber: "{{ .Query.Ep }}"
|
||||
imdbId: "{{ .Query.IMDBIDShort }}"
|
||||
tmdbId: "{{ .Query.TMDBID }}"
|
||||
tvdbId: "{{ .Query.TVDBID }}"
|
||||
"free[]": "{{ if .Config.freeleech }}100{{ else }}{{ end }}"
|
||||
sortField: "{{ .Config.sort }}"
|
||||
sortDirection: "{{ .Config.type }}"
|
||||
perPage: 100
|
||||
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
args: ["\\.", " "]
|
||||
|
||||
rows:
|
||||
selector: data
|
||||
attribute: attributes
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: category_id
|
||||
title_optional:
|
||||
selector: name
|
||||
title_filename:
|
||||
selector: "files[0].name"
|
||||
optional: true
|
||||
files:
|
||||
selector: num_file
|
||||
title:
|
||||
text: "{{ if and (.Config.single_file_release_use_filename) (eq .Result.files \"1\") (.Result.title_filename) }}{{ .Result.title_filename }}{{ else }}{{ .Result.title_optional }}{{ end }}"
|
||||
details:
|
||||
selector: details_link
|
||||
download:
|
||||
selector: download_link
|
||||
infohash:
|
||||
selector: info_hash
|
||||
poster:
|
||||
selector: meta.poster
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["https://placehold.co/90x135", ""]
|
||||
imdbid:
|
||||
selector: imdb_id
|
||||
tmdbid:
|
||||
selector: tmdb_id
|
||||
tvdbid:
|
||||
selector: tvdb_id
|
||||
genre:
|
||||
selector: meta.genres
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["(?i)(Science Fiction)", "Science_Fiction"]
|
||||
- name: re_replace
|
||||
args: ["(?i)(TV Movie)", "TV_Movie"]
|
||||
- name: replace
|
||||
args: [" & ", "_&_"]
|
||||
description:
|
||||
text: "{{ .Result.genre }}"
|
||||
seeders:
|
||||
selector: seeders
|
||||
leechers:
|
||||
selector: leechers
|
||||
grabs:
|
||||
selector: times_completed
|
||||
date:
|
||||
# "created_at": "2021-10-18T00:34:50.000000Z" is returned by Newtonsoft.Json.Linq as 18/10/2021 00:34:50
|
||||
selector: created_at
|
||||
filters:
|
||||
- name: append
|
||||
args: " +00:00" # GMT
|
||||
- name: dateparse
|
||||
args: "MM/dd/yyyy HH:mm:ss zzz"
|
||||
size:
|
||||
selector: size
|
||||
_featured:
|
||||
selector: featured
|
||||
case:
|
||||
False: "{{ .False }}"
|
||||
True: "{{ .True }}"
|
||||
downloadvolumefactor_freeleech:
|
||||
# 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
|
||||
downloadvolumefactor:
|
||||
text: "{{ if .Result._featured }}0{{ else }}{{ .Result.downloadvolumefactor_freeleech }}{{ end }}"
|
||||
uploadvolumefactor_double_upload:
|
||||
# api returns False, True
|
||||
selector: double_upload
|
||||
case:
|
||||
False: 1 # normal
|
||||
True: 2 # double
|
||||
uploadvolumefactor:
|
||||
text: "{{ if .Result._featured }}2{{ else }}{{ .Result.uploadvolumefactor_double_upload }}{{ end }}"
|
||||
minimumratio:
|
||||
text: 1.0
|
||||
minimumseedtime:
|
||||
# 2 day (as seconds = 2 x 24 x 60 x 60)
|
||||
text: 172800
|
||||
# json Traxary v0.0.187 (based on UNIT3D 8.2.0)
|
||||
@@ -0,0 +1,171 @@
|
||||
---
|
||||
id: playletpt
|
||||
name: PlayletPT
|
||||
description: "PlayletPT is a CHINESE Private Torrent Tracker for Short Drama"
|
||||
language: zh-CN
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://playlet.cc/
|
||||
legacylinks:
|
||||
- https://playletpt.xyz/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 408, cat: TV, desc: "短剧/Drama"}
|
||||
- {id: 409, cat: TV, desc: "漫画/Comedy"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid]
|
||||
|
||||
settings:
|
||||
- name: cookie
|
||||
type: text
|
||||
label: Cookie
|
||||
- name: info_cookie
|
||||
type: info_cookie
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
default: 4
|
||||
options:
|
||||
4: created
|
||||
7: seeders
|
||||
5: size
|
||||
1: title
|
||||
- name: type
|
||||
type: select
|
||||
label: Order requested from site
|
||||
default: desc
|
||||
options:
|
||||
desc: desc
|
||||
asc: asc
|
||||
- name: info_tpp
|
||||
type: info
|
||||
label: Results Per Page
|
||||
default: For best results, change the <b>Torrents per page:</b> setting to <b>100</b> on your account profile.
|
||||
- name: info_activity
|
||||
type: info
|
||||
label: Account Inactivity
|
||||
default: "Account retention rules:<ol><li>Veteran User and above will be retained forever</li><li>Elite User and above will not have their account deleted after parking (in the control panel)</li><li>Users with a parked account will be deleted if they do not log in for 400 consecutive days</li><li>Users with a non-parked account will be deleted if they do not log in for 150 consecutive days</li></ol>"
|
||||
|
||||
login:
|
||||
# using cookie method because site does a JS call to API/Challenge via JQuery to load response parm required for takelogin.php
|
||||
method: cookie
|
||||
inputs:
|
||||
cookie: "{{ .Config.cookie }}"
|
||||
test:
|
||||
path: index.php
|
||||
selector: a[href="logout.php"]
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: torrents.php
|
||||
inputs:
|
||||
$raw: "{{ range .Categories }}cat{{.}}=1&{{end}}"
|
||||
search: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{ else }}{{ .Keywords }}{{ end }}"
|
||||
# 0 incldead, 1 active, 2 dead
|
||||
incldead: 0
|
||||
# 0 all, 1 normal, 2 free, 3 2x, 4 2xfree, 5 50%, 6 2x50%, 7 30%
|
||||
spstate: "{{ if .Config.freeleech }}2{{ else }}0{{ end }}"
|
||||
# 0 title, 1 descr, 3 uploader, 4 imdburl
|
||||
search_area: "{{ if .Query.IMDBID }}4{{ else }}0{{ end }}"
|
||||
# 0 AND, 2 exact
|
||||
search_mode: 0
|
||||
sort: "{{ .Config.sort }}"
|
||||
type: "{{ .Config.type }}"
|
||||
notnewword: 1
|
||||
|
||||
rows:
|
||||
selector: table.torrents > tbody > tr:has(a[href*="download.php?id="])
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: a[href*="?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
title_default:
|
||||
selector: a[href*="details.php?id="]
|
||||
title:
|
||||
selector: a[title][href*="details.php?id="]
|
||||
attribute: title
|
||||
optional: true
|
||||
default: "{{ .Result.title_default }}"
|
||||
details:
|
||||
selector: a[href*="details.php?id="]
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href*="download.php?id="]
|
||||
attribute: href
|
||||
poster:
|
||||
selector: img[data-src]
|
||||
attribute: data-src
|
||||
imdbid:
|
||||
# site currently only has a badge and rating, the id is not present. just in case a future update.
|
||||
selector: a[href*="imdb.com/title/tt"]
|
||||
attribute: href
|
||||
date_elapsed:
|
||||
# time type: time elapsed (default)
|
||||
selector: td.rowfollow:nth-child(4) > span[title]
|
||||
attribute: title
|
||||
optional: true
|
||||
filters:
|
||||
- name: append
|
||||
args: " +08:00" # CST
|
||||
- name: dateparse
|
||||
args: "yyyy-MM-dd HH:mm:ss zzz"
|
||||
date_added:
|
||||
# time added
|
||||
selector: td.rowfollow:nth-child(4):not(:has(span))
|
||||
optional: true
|
||||
filters:
|
||||
- name: append
|
||||
args: " +08:00" # CST
|
||||
- name: dateparse
|
||||
args: "yyyy-MM-ddHH:mm:ss zzz"
|
||||
date:
|
||||
text: "{{ if or .Result.date_elapsed .Result.date_added }}{{ or .Result.date_elapsed .Result.date_added }}{{ else }}now{{ end }}"
|
||||
size:
|
||||
selector: td.rowfollow:nth-child(5)
|
||||
optional: true
|
||||
default: 512MB
|
||||
seeders:
|
||||
selector: td.rowfollow:nth-child(6)
|
||||
optional: true
|
||||
default: 0
|
||||
leechers:
|
||||
selector: td.rowfollow:nth-child(7)
|
||||
optional: true
|
||||
default: 0
|
||||
grabs:
|
||||
selector: td.rowfollow:nth-child(8)
|
||||
optional: true
|
||||
default: 0
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img.pro_free: 0
|
||||
img.pro_free2up: 0
|
||||
img.pro_50pctdown: 0.5
|
||||
img.pro_50pctdown2up: 0.5
|
||||
img.pro_30pctdown: 0.3
|
||||
"*": 1
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
img.pro_50pctdown2up: 2
|
||||
img.pro_free2up: 2
|
||||
img.pro_2up: 2
|
||||
"*": 1
|
||||
minimumseedtime:
|
||||
# 1 days (as seconds = 1 x 24 x 60 x 60)
|
||||
text: 86400
|
||||
description:
|
||||
selector: td.rowfollow:nth-child(2)
|
||||
remove: a, b, font, img, span
|
||||
# NexusPHP v1.9.6 2025-06-25 (custom)
|
||||
@@ -0,0 +1,192 @@
|
||||
---
|
||||
id: podzemlje
|
||||
name: Podzemlje
|
||||
description: "Podzemlje is an EX-YU Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
language: en-US
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://podzemlje.net/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: Movies, desc: "Movies"}
|
||||
- {id: 2, cat: TV, desc: "TV"}
|
||||
- {id: 3, cat: PC/Games, desc: "Igre"}
|
||||
- {id: 4, cat: Audio, desc: "Muzika"}
|
||||
- {id: 5, cat: PC/0day, desc: "Programi"}
|
||||
- {id: 6, cat: Books, desc: "Knjige"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid, tvdbid, tmdbid]
|
||||
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://podzemlje.net/\" target=\"_blank\">Podzemlje</a> account <i>My Settings</i> page and clicking on the <b>API Key</b> tab."
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: single_file_release_use_filename
|
||||
type: checkbox
|
||||
label: Use filename as title for single file releases
|
||||
default: true
|
||||
- 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
|
||||
error:
|
||||
- selector: a[href*="/login"]
|
||||
message:
|
||||
text: "The API key was not accepted by {{ .Config.sitelink }}."
|
||||
- selector: :root:contains("Account is Banned")
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://hdinnovations.github.io/UNIT3D/torrent_api.html
|
||||
# https://github.com/HDInnovations/UNIT3D/blob/master/app/Http/Controllers/API/TorrentController.php#L657
|
||||
- path: api/torrents/filter
|
||||
response:
|
||||
type: json
|
||||
|
||||
headers:
|
||||
Authorization: ["Bearer {{ .Config.apikey }}"]
|
||||
|
||||
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
|
||||
$raw: "{{ range .Categories }}&categories[]={{.}}{{end}}"
|
||||
name: "{{ .Keywords }}"
|
||||
seasonNumber: "{{ .Query.Season }}"
|
||||
episodeNumber: "{{ .Query.Ep }}"
|
||||
imdbId: "{{ .Query.IMDBIDShort }}"
|
||||
tmdbId: "{{ .Query.TMDBID }}"
|
||||
tvdbId: "{{ .Query.TVDBID }}"
|
||||
"free[]": "{{ if .Config.freeleech }}100{{ else }}{{ end }}"
|
||||
sortField: "{{ .Config.sort }}"
|
||||
sortDirection: "{{ .Config.type }}"
|
||||
perPage: 100
|
||||
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
args: ["\\.", " "]
|
||||
|
||||
rows:
|
||||
selector: data
|
||||
attribute: attributes
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: category_id
|
||||
title_optional:
|
||||
selector: name
|
||||
title_filename:
|
||||
selector: "files[0].name"
|
||||
optional: true
|
||||
files:
|
||||
selector: num_file
|
||||
title:
|
||||
text: "{{ if and (.Config.single_file_release_use_filename) (eq .Result.files \"1\") (.Result.title_filename) }}{{ .Result.title_filename }}{{ else }}{{ .Result.title_optional }}{{ end }}"
|
||||
details:
|
||||
selector: details_link
|
||||
download:
|
||||
selector: download_link
|
||||
poster:
|
||||
selector: meta.poster
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["https://via.placeholder.com/90x135", ""]
|
||||
imdbid:
|
||||
selector: imdb_id
|
||||
tmdbid:
|
||||
selector: tmdb_id
|
||||
tvdbid:
|
||||
selector: tvdb_id
|
||||
genre:
|
||||
selector: meta.genres
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["(?i)(Science Fiction)", "Science_Fiction"]
|
||||
- name: re_replace
|
||||
args: ["(?i)(TV Movie)", "TV_Movie"]
|
||||
- name: replace
|
||||
args: [" & ", "_&_"]
|
||||
_internal:
|
||||
selector: internal
|
||||
case:
|
||||
False: "{{ .False }}"
|
||||
True: "{{ .True }}"
|
||||
description:
|
||||
text: "{{ if .Result._internal }}Internal{{ else }}{{ end }}{{ if and .Result._internal .Result.genre }} | {{ else }}{{ end }}{{ .Result.genre }}"
|
||||
seeders:
|
||||
selector: seeders
|
||||
leechers:
|
||||
selector: leechers
|
||||
grabs:
|
||||
selector: times_completed
|
||||
date:
|
||||
# "created_at": "2021-10-18T00:34:50.000000Z" is returned by Newtonsoft.Json.Linq as 18/10/2021 00:34:50
|
||||
selector: created_at
|
||||
filters:
|
||||
- name: append
|
||||
args: " +00:00" # GMT
|
||||
- name: dateparse
|
||||
args: "MM/dd/yyyy HH:mm:ss zzz"
|
||||
size:
|
||||
selector: size
|
||||
_featured:
|
||||
selector: featured
|
||||
case:
|
||||
False: "{{ .False }}"
|
||||
True: "{{ .True }}"
|
||||
downloadvolumefactor_freeleech:
|
||||
# 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
|
||||
downloadvolumefactor:
|
||||
text: "{{ if .Result._featured }}0{{ else }}{{ .Result.downloadvolumefactor_freeleech }}{{ end }}"
|
||||
uploadvolumefactor_double_upload:
|
||||
# api returns False, True
|
||||
selector: double_upload
|
||||
case:
|
||||
False: 1 # normal
|
||||
True: 2 # double
|
||||
uploadvolumefactor:
|
||||
text: "{{ if .Result._featured }}2{{ else }}{{ .Result.uploadvolumefactor_double_upload }}{{ end }}"
|
||||
# global MR is 0.7 but torrents must be seeded for 3 days regardless of ratio
|
||||
# minimumratio:
|
||||
# text: 0.7
|
||||
minimumseedtime:
|
||||
# 3 days (as seconds = 3 x 24 x 60 x 60)
|
||||
text: 259200
|
||||
# json UNIT3D 9.2.0
|
||||
@@ -0,0 +1,72 @@
|
||||
---
|
||||
id: pornxlab
|
||||
replaces:
|
||||
- ptorrents
|
||||
name: PornXLab
|
||||
description: "PornXLab is a Public tracker for 3X"
|
||||
language: en-US
|
||||
type: public
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://www.pornxlab.com/
|
||||
legacylinks:
|
||||
- https://www.ptorrents.com/
|
||||
|
||||
caps:
|
||||
categories:
|
||||
XXX: XXX
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
|
||||
settings: []
|
||||
|
||||
download:
|
||||
selectors:
|
||||
- selector: a.download-button
|
||||
attribute: href
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: "{{ if .Keywords }}s.php?search={{ .Keywords }}{{ else }}{{ end }}"
|
||||
|
||||
rows:
|
||||
selector: div.image-wrapper
|
||||
|
||||
fields:
|
||||
category:
|
||||
text: XXX
|
||||
title:
|
||||
selector: a.overlay
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["^.+?\\] ", ""]
|
||||
details:
|
||||
selector: a.overlay
|
||||
attribute: href
|
||||
download:
|
||||
selector: a.overlay
|
||||
attribute: href
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "-(\\d+).html"
|
||||
- name: prepend
|
||||
args: "/dl.php?t="
|
||||
poster:
|
||||
selector: img
|
||||
attribute: src
|
||||
date:
|
||||
text: now
|
||||
size:
|
||||
selector: span.size
|
||||
seeders:
|
||||
text: 1
|
||||
leechers:
|
||||
text: 1
|
||||
downloadvolumefactor:
|
||||
text: 0
|
||||
uploadvolumefactor:
|
||||
text: 1
|
||||
description:
|
||||
selector: div.catalog a
|
||||
# engine n/a
|
||||
@@ -0,0 +1,186 @@
|
||||
---
|
||||
id: ptcc
|
||||
name: PTCC (我的PT)
|
||||
description: "PTCC (我的PT) is a CHINESE Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
language: zh-CN
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://cc.mypt.cc/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 401, cat: Movies, desc: "Movies/电影"}
|
||||
- {id: 402, cat: TV, desc: "TV Series/剧集"}
|
||||
- {id: 403, cat: TV, desc: "TV Shows/节目"}
|
||||
- {id: 404, cat: TV/Documentary, desc: "DOCU/纪录片"}
|
||||
- {id: 405, cat: TV/Anime, desc: "Animations/动画片"}
|
||||
- {id: 406, cat: Audio/Video, desc: "MTV/演唱会/唱片"}
|
||||
- {id: 407, cat: TV/Sport, desc: "Sports/运动/体育"}
|
||||
- {id: 408, cat: TV/Other, desc: "Playlet/短剧"}
|
||||
- {id: 409, cat: Movies/Other, desc: "Opera/戏曲"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid]
|
||||
movie-search: [q, imdbid]
|
||||
|
||||
settings:
|
||||
- name: cookie
|
||||
type: text
|
||||
label: Cookie
|
||||
- name: info_cookie
|
||||
type: info_cookie
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
default: 4
|
||||
options:
|
||||
4: created
|
||||
7: seeders
|
||||
5: size
|
||||
1: title
|
||||
- name: type
|
||||
type: select
|
||||
label: Order requested from site
|
||||
default: desc
|
||||
options:
|
||||
desc: desc
|
||||
asc: asc
|
||||
- name: info_tpp
|
||||
type: info
|
||||
label: Results Per Page
|
||||
default: For best results, change the <b>Torrents per page:</b> setting to <b>100</b> on your account profile.
|
||||
- name: info_activity
|
||||
type: info
|
||||
label: Account Inactivity
|
||||
default: "Account retention rules:<ol><li>Veteran User and above will be retained forever</li><li>Elite User and above will not have their account deleted after parking (in the control panel)</li><li> Users with a parked account will be deleted if they do not log in for 400 consecutive days</li><li>Users with a non-parked account will be deleted if they do not log in for 150 consecutive days</li><li>Users with no traffic (i.e. upload/download data is 0) will be deleted if they have not logged in for more than 100 consecutive days.</li></ol>"
|
||||
|
||||
login:
|
||||
# using cookie method because site does a JS call to API/Challenge via JQuery to load response parm required for takelogin.php
|
||||
method: cookie
|
||||
inputs:
|
||||
cookie: "{{ .Config.cookie }}"
|
||||
test:
|
||||
path: index.php
|
||||
selector: a[href="logout.php"]
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: torrents.php
|
||||
inputs:
|
||||
$raw: "{{ range .Categories }}cat{{.}}=1&{{end}}"
|
||||
search: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{ else }}{{ .Keywords }}{{ end }}"
|
||||
# 0 incldead, 1 active, 2 dead
|
||||
incldead: 0
|
||||
# 0 all, 1 normal, 2 free, 3 2x, 4 2xfree, 5 50%, 6 2x50%, 7 30%
|
||||
spstate: "{{ if .Config.freeleech }}2{{ else }}0{{ end }}"
|
||||
# 0 title, 1 descr (broken so cannot search doubanid), 3 uploader, 4 imdburl
|
||||
search_area: "{{ if .Query.IMDBID }}4{{ else }}0{{ end }}"
|
||||
# 0 AND, 2 exact
|
||||
search_mode: 0
|
||||
sort: "{{ .Config.sort }}"
|
||||
type: "{{ .Config.type }}"
|
||||
notnewword: 1
|
||||
|
||||
rows:
|
||||
selector: table.torrents > tbody > tr:has(a[href^="download.php?id="])
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: a[href^="?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
title_default:
|
||||
selector: a[href^="details.php?id="]
|
||||
title:
|
||||
selector: a[title][href^="details.php?id="]
|
||||
attribute: title
|
||||
optional: true
|
||||
default: "{{ .Result.title_default }}"
|
||||
details:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href^="download.php?id="]
|
||||
attribute: href
|
||||
imdbid:
|
||||
# site currently only has a badge and rating, the id is not present. just in case a future update.
|
||||
selector: a[href*="imdb.com/title/tt"]
|
||||
attribute: href
|
||||
doubanid:
|
||||
# site currently only has a badge and rating, the id is not present. just in case a future update.
|
||||
selector: a[href*="movie.douban.com/subject/"]
|
||||
attribute: href
|
||||
date_elapsed:
|
||||
# time type: time elapsed (default)
|
||||
selector: td.rowfollow:nth-child(4) > span[title]
|
||||
attribute: title
|
||||
optional: true
|
||||
filters:
|
||||
- name: append
|
||||
args: " +08:00" # CST
|
||||
- name: dateparse
|
||||
args: "yyyy-MM-dd HH:mm:ss zzz"
|
||||
date_added:
|
||||
# time added
|
||||
selector: td.rowfollow:nth-child(4):not(:has(span))
|
||||
optional: true
|
||||
filters:
|
||||
- name: append
|
||||
args: " +08:00" # CST
|
||||
- name: dateparse
|
||||
args: "yyyy-MM-ddHH:mm:ss zzz"
|
||||
date:
|
||||
text: "{{ if or .Result.date_elapsed .Result.date_added }}{{ or .Result.date_elapsed .Result.date_added }}{{ else }}now{{ end }}"
|
||||
size:
|
||||
selector: td.rowfollow:nth-child(5)
|
||||
optional: true
|
||||
default: 512MB
|
||||
seeders:
|
||||
selector: td.rowfollow:nth-child(6)
|
||||
optional: true
|
||||
default: 0
|
||||
leechers:
|
||||
selector: td.rowfollow:nth-child(7)
|
||||
optional: true
|
||||
default: 0
|
||||
grabs:
|
||||
selector: td.rowfollow:nth-child(8)
|
||||
optional: true
|
||||
default: 0
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img.pro_free: 0
|
||||
img.pro_free2up: 0
|
||||
img.pro_50pctdown: 0.5
|
||||
img.pro_50pctdown2up: 0.5
|
||||
img.pro_30pctdown: 0.3
|
||||
"*": 1
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
img.pro_50pctdown2up: 2
|
||||
img.pro_free2up: 2
|
||||
img.pro_2up: 2
|
||||
"*": 1
|
||||
minimumseedtime:
|
||||
# 1 day (as seconds = 24 x 60 x 60)
|
||||
text: 86400
|
||||
description_verified:
|
||||
case:
|
||||
span[title="通过"], span[title="通過"], span[title="Allowed"]: "Verified:"
|
||||
span[title="未审"], span[title="未審"], span[title="Not reviewed"]: "Unverified:"
|
||||
span[title="拒绝"], span[title="拒絕"], span[title="Denied"]: "Banned:"
|
||||
description:
|
||||
selector: td.rowfollow:nth-child(2)
|
||||
remove: a, b, font, img, span
|
||||
filters:
|
||||
- name: prepend
|
||||
args: "{{ .Result.description_verified }} "
|
||||
# NexusPHP v1.8.15 2024-12-23
|
||||
@@ -0,0 +1,173 @@
|
||||
---
|
||||
id: ptlao
|
||||
name: PTLAO
|
||||
description: "PTLAO is a CHINESE Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
language: zh-CN
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://ptlao.top/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 401, cat: Movies, desc: "Movies"}
|
||||
- {id: 402, cat: TV, desc: "TV Series"}
|
||||
- {id: 403, cat: TV, desc: "TV Shows"}
|
||||
- {id: 405, cat: TV/Anime, desc: "Animations"}
|
||||
- {id: 404, cat: TV/Documentary, desc: "Documentaries"}
|
||||
- {id: 408, cat: Audio, desc: "HQ Audio"}
|
||||
- {id: 409, cat: Other, desc: "Misc"}
|
||||
- {id: 407, cat: TV/Sport, desc: "Sports"}
|
||||
- {id: 406, cat: Audio/Video, desc: "Music Videos"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid, doubanid]
|
||||
movie-search: [q, imdbid, doubanid]
|
||||
music-search: [q]
|
||||
|
||||
settings:
|
||||
- name: cookie
|
||||
type: text
|
||||
label: Cookie
|
||||
- name: info_cookie
|
||||
type: info_cookie
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
default: 4
|
||||
options:
|
||||
4: created
|
||||
7: seeders
|
||||
5: size
|
||||
1: title
|
||||
- name: type
|
||||
type: select
|
||||
label: Order requested from site
|
||||
default: desc
|
||||
options:
|
||||
desc: desc
|
||||
asc: asc
|
||||
- name: info_tpp
|
||||
type: info
|
||||
label: Results Per Page
|
||||
default: For best results, change the <b>Torrents per page:</b> setting to <b>100</b> on your account profile.
|
||||
- name: info_activity
|
||||
type: info
|
||||
label: Account Inactivity
|
||||
default: "Account retention rules:<ol><li>Veteran User and above will be retained forever</li><li>Elite Users and above will not be deleted after parking (in the control panel)</li><li>Users with a parked account will be banned if they do not log in for 300 consecutive days</li><li>Users who do not log in for 150 consecutive days will be banned</li><li>Newly registered users with no traffic within 30 days, will be banned.</li></ol>"
|
||||
|
||||
login:
|
||||
# using cookie method because site does a JS call to API/Challenge via JQuery to load response parm required for takelogin.php
|
||||
method: cookie
|
||||
inputs:
|
||||
cookie: "{{ .Config.cookie }}"
|
||||
test:
|
||||
path: index.php
|
||||
selector: a[href="logout.php"]
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: torrents.php
|
||||
inputs:
|
||||
$raw: "{{ range .Categories }}cat{{.}}=1&{{end}}"
|
||||
search: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{ else }}{{ end }}{{ if and .Query.DoubanID (eq .Query.IMDBID .False) }}{{ .Query.DoubanID }}{{ else }}{{ end }}{{ if and (eq .Query.IMDBID .False) (eq .Query.DoubanID .False) }}{{ .Keywords }}{{ else }}{{ end }}"
|
||||
# 0 incldead, 1 active, 2 dead
|
||||
incldead: 0
|
||||
# 0 all, 1 normal, 2 free, 3 2x, 4 2xfree, 5 50%, 6 2x50%, 7 30%
|
||||
spstate: "{{ if .Config.freeleech }}2{{ else }}0{{ end }}"
|
||||
# 0 title, 1 descr, 3 uploader, 4 imdburl
|
||||
search_area: "{{ if .Query.IMDBID }}4{{ else }}{{ end }}{{ if and .Query.DoubanID (eq .Query.IMDBID .False) }}1{{ else }}{{ end }}{{ if and (eq .Query.IMDBID .False) (eq .Query.DoubanID .False) }}0{{ else }}{{ end }}"
|
||||
# 0 AND, 2 exact
|
||||
search_mode: 0
|
||||
sort: "{{ .Config.sort }}"
|
||||
type: "{{ .Config.type }}"
|
||||
notnewword: 1
|
||||
|
||||
rows:
|
||||
selector: table.torrents > tbody > tr:has(a[href^="download.php?id="])
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: a[href^="?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
title_default:
|
||||
selector: a[href^="details.php?id="]
|
||||
title:
|
||||
selector: a[title][href^="details.php?id="]
|
||||
attribute: title
|
||||
optional: true
|
||||
default: "{{ .Result.title_default }}"
|
||||
details:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href^="download.php?id="]
|
||||
attribute: href
|
||||
poster:
|
||||
selector: img[data-src]
|
||||
attribute: data-src
|
||||
date_elapsed:
|
||||
# time type: time elapsed (default)
|
||||
selector: td.rowfollow:nth-child(4) > span[title]
|
||||
attribute: title
|
||||
optional: true
|
||||
filters:
|
||||
- name: append
|
||||
args: " +08:00" # CST
|
||||
- name: dateparse
|
||||
args: "yyyy-MM-dd HH:mm:ss zzz"
|
||||
date_added:
|
||||
# time added
|
||||
selector: td.rowfollow:nth-child(4):not(:has(span))
|
||||
optional: true
|
||||
filters:
|
||||
- name: append
|
||||
args: " +08:00" # CST
|
||||
- name: dateparse
|
||||
args: "yyyy-MM-ddHH:mm:ss zzz"
|
||||
date:
|
||||
text: "{{ if or .Result.date_elapsed .Result.date_added }}{{ or .Result.date_elapsed .Result.date_added }}{{ else }}now{{ end }}"
|
||||
size:
|
||||
selector: td.rowfollow:nth-child(5)
|
||||
optional: true
|
||||
default: 512MB
|
||||
seeders:
|
||||
selector: td.rowfollow:nth-child(6)
|
||||
optional: true
|
||||
default: 0
|
||||
leechers:
|
||||
selector: td.rowfollow:nth-child(7)
|
||||
optional: true
|
||||
default: 0
|
||||
grabs:
|
||||
selector: td.rowfollow:nth-child(8)
|
||||
optional: true
|
||||
default: 0
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img.pro_free: 0
|
||||
img.pro_free2up: 0
|
||||
img.pro_50pctdown: 0.5
|
||||
img.pro_50pctdown2up: 0.5
|
||||
img.pro_30pctdown: 0.3
|
||||
"*": 1
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
img.pro_50pctdown2up: 2
|
||||
img.pro_free2up: 2
|
||||
img.pro_2up: 2
|
||||
"*": 1
|
||||
minimumratio:
|
||||
text: 0.6
|
||||
description:
|
||||
selector: td.rowfollow:nth-child(2)
|
||||
remove: a, b, font, img, span
|
||||
# NexusPHP v1.9.14 2026-01-23
|
||||
@@ -0,0 +1,203 @@
|
||||
---
|
||||
id: ptlgs
|
||||
name: PTLGS
|
||||
description: "PTLGS is a CHINESE Private Torrent Tracker for MOVIES / TV"
|
||||
language: zh-CN
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://ptlgs.org/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 409, cat: Other/Misc, desc: "其他(Other)"}
|
||||
- {id: 407, cat: TV/Sport, desc: "体育(Sports)"}
|
||||
- {id: 406, cat: Audio/Video, desc: "音乐(Music Video)"}
|
||||
- {id: 403, cat: TV, desc: "综艺(Variety Shows)"}
|
||||
- {id: 402, cat: TV, desc: "剧集(Drama Serie)"}
|
||||
- {id: 405, cat: TV/Anime, desc: "动漫/Anime)"}
|
||||
- {id: 404, cat: TV/Documentary, desc: "纪录片/Documentary)"}
|
||||
- {id: 401, cat: Movies, desc: "电影(Movies)"}
|
||||
- {id: 411, cat: Other, desc: "字幕组(Subtitle Group)"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid, doubanid]
|
||||
movie-search: [q, imdbid, doubanid]
|
||||
|
||||
settings:
|
||||
- name: username
|
||||
type: text
|
||||
label: Username
|
||||
- name: password
|
||||
type: password
|
||||
label: Password
|
||||
- name: 2facode
|
||||
type: text
|
||||
label: 2FA code
|
||||
- name: info_2fa
|
||||
type: info
|
||||
label: "About 2FA code"
|
||||
default: "Only fill in the <b>2FA code</b> box if you have enabled <b>2FA</b> on the PTLGS Web Site. Otherwise just leave it empty."
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
default: 4
|
||||
options:
|
||||
4: created
|
||||
7: seeders
|
||||
5: size
|
||||
1: title
|
||||
- name: type
|
||||
type: select
|
||||
label: Order requested from site
|
||||
default: desc
|
||||
options:
|
||||
desc: desc
|
||||
asc: asc
|
||||
- name: info_tpp
|
||||
type: info
|
||||
label: Results Per Page
|
||||
default: For best results, change the <b>Torrents per page:</b> setting to <b>100</b> on your account profile.
|
||||
- name: info_activity
|
||||
type: info
|
||||
label: Account Inactivity
|
||||
default: "Account retention rules:<ol><li>All users' accounts will be retained forever, and data will be retained forever</li><li>Newly registered accounts without traffic (i.e., upload/download data are 0) will be automatically frozen by the system if they do not log in for 7 consecutive days</li><li>Accounts that have been inactive for more than 30 days will be automatically banned by the system</li><li>determination method: When there is an unread announcement, it is necessary to manually confirm that the announcement has been read to be considered active; When there are no unread announcements, you need to visit the homepage to be active.</li></ol>"
|
||||
|
||||
login:
|
||||
path: login.php
|
||||
method: form
|
||||
form: form[action="takelogin.php"]
|
||||
captcha:
|
||||
type: image
|
||||
selector: img[alt="CAPTCHA"]
|
||||
input: imagestring
|
||||
inputs:
|
||||
secret: ""
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
two_step_code: "{{ .Config.2facode }}"
|
||||
logout: ""
|
||||
securelogin: ""
|
||||
ssl: yes
|
||||
trackerssl: yes
|
||||
error:
|
||||
- selector: td.embedded:has(h2:contains("失败"))
|
||||
test:
|
||||
path: index.php
|
||||
selector: a[href="logout.php"]
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: torrents.php
|
||||
inputs:
|
||||
$raw: "{{ range .Categories }}cat{{.}}=1&{{end}}"
|
||||
search: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{ else }}{{ end }}{{ if and .Query.DoubanID (eq .Query.IMDBID .False) }}{{ .Query.DoubanID }}{{ else }}{{ end }}{{ if and (eq .Query.IMDBID .False) (eq .Query.DoubanID .False) }}{{ .Keywords }}{{ else }}{{ end }}"
|
||||
# 0 incldead, 1 active, 2 dead
|
||||
incldead: 0
|
||||
# 0 all, 1 normal, 2 free, 3 2x, 4 2xfree, 5 50%, 6 2x50%, 7 30%
|
||||
spstate: "{{ if .Config.freeleech }}2{{ else }}0{{ end }}"
|
||||
# 0 title, 1 descr, 3 uploader, 4 imdburl
|
||||
search_area: "{{ if .Query.IMDBID }}4{{ else }}{{ end }}{{ if and .Query.DoubanID (eq .Query.IMDBID .False) }}1{{ else }}{{ end }}{{ if and (eq .Query.IMDBID .False) (eq .Query.DoubanID .False) }}0{{ else }}{{ end }}"
|
||||
# 0 AND, 2 exact
|
||||
search_mode: 0
|
||||
sort: "{{ .Config.sort }}"
|
||||
type: "{{ .Config.type }}"
|
||||
notnewword: 1
|
||||
|
||||
rows:
|
||||
selector: table.torrents > tbody > tr:has(a[href*="download.php?id="])
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: a[href*="?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
title_default:
|
||||
selector: a[href*="details.php?id="]
|
||||
title:
|
||||
selector: a[title][href*="details.php?id="]
|
||||
attribute: title
|
||||
optional: true
|
||||
default: "{{ .Result.title_default }}"
|
||||
details:
|
||||
selector: a[href*="details.php?id="]
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href*="download.php?id="]
|
||||
attribute: href
|
||||
poster:
|
||||
selector: img[data-src]
|
||||
attribute: data-src
|
||||
imdbid:
|
||||
# site currently only has a badge and rating, the id is not present. just in case a future update.
|
||||
selector: a[href*="imdb.com/title/tt"]
|
||||
attribute: href
|
||||
doubanid:
|
||||
# site currently only has a badge and rating, the id is not present. just in case a future update.
|
||||
selector: a[href*="movie.douban.com/subject/"]
|
||||
attribute: href
|
||||
date_elapsed:
|
||||
# time type: time elapsed (default)
|
||||
selector: td.rowfollow:nth-child(4) > span[title]
|
||||
attribute: title
|
||||
optional: true
|
||||
filters:
|
||||
- name: append
|
||||
args: " +08:00" # CST
|
||||
- name: dateparse
|
||||
args: "yyyy-MM-dd HH:mm:ss zzz"
|
||||
date_added:
|
||||
# time added
|
||||
selector: td.rowfollow:nth-child(4):not(:has(span))
|
||||
optional: true
|
||||
filters:
|
||||
- name: append
|
||||
args: " +08:00" # CST
|
||||
- name: dateparse
|
||||
args: "yyyy-MM-ddHH:mm:ss zzz"
|
||||
date:
|
||||
text: "{{ if or .Result.date_elapsed .Result.date_added }}{{ or .Result.date_elapsed .Result.date_added }}{{ else }}now{{ end }}"
|
||||
size:
|
||||
selector: td.rowfollow:nth-child(5)
|
||||
optional: true
|
||||
default: 512MB
|
||||
seeders:
|
||||
selector: td.rowfollow:nth-child(6)
|
||||
optional: true
|
||||
default: 0
|
||||
leechers:
|
||||
selector: td.rowfollow:nth-child(7)
|
||||
optional: true
|
||||
default: 0
|
||||
grabs:
|
||||
selector: td.rowfollow:nth-child(8)
|
||||
optional: true
|
||||
default: 0
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img.pro_free: 0
|
||||
img.pro_free2up: 0
|
||||
img.pro_50pctdown: 0.5
|
||||
img.pro_50pctdown2up: 0.5
|
||||
img.pro_30pctdown: 0.3
|
||||
"*": 1
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
img.pro_50pctdown2up: 2
|
||||
img.pro_free2up: 2
|
||||
img.pro_2up: 2
|
||||
"*": 1
|
||||
minimumseedtime:
|
||||
# 5 hours (as seconds = 5 x 60 x 60)
|
||||
text: 18000
|
||||
description:
|
||||
selector: td.rowfollow:nth-child(2)
|
||||
remove: a, b, font, img, span
|
||||
# NexusPHP v1.8.13 2024-09-21
|
||||
@@ -0,0 +1,168 @@
|
||||
---
|
||||
id: pttey
|
||||
name: PTTey
|
||||
description: "PTTey is a CHINESE Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
language: zh-CN
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://pt.tey.cc/
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 401, cat: Movies, desc: "Movies(电影)"}
|
||||
- {id: 402, cat: TV, desc: "TV Series(电视剧)"}
|
||||
- {id: 404, cat: TV/Documentary, desc: "Documentaries(记录片)"}
|
||||
- {id: 403, cat: TV/Other, desc: "TV Shows(电视节目)"}
|
||||
- {id: 405, cat: TV/Anime, desc: "Animations(动漫)"}
|
||||
- {id: 407, cat: TV/Sport, desc: "Sports(体育)"}
|
||||
- {id: 406, cat: Audio/Video, desc: "Music Videos(MV)"}
|
||||
- {id: 408, cat: Audio, desc: "Music(音乐)"}
|
||||
- {id: 409, cat: Other, desc: "Misc(其他)"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid]
|
||||
movie-search: [q, imdbid]
|
||||
music-search: [q]
|
||||
|
||||
settings:
|
||||
- name: cookie
|
||||
type: text
|
||||
label: Cookie
|
||||
- name: info_cookie
|
||||
type: info_cookie
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
default: 4
|
||||
options:
|
||||
4: created
|
||||
7: seeders
|
||||
5: size
|
||||
1: title
|
||||
- name: type
|
||||
type: select
|
||||
label: Order requested from site
|
||||
default: desc
|
||||
options:
|
||||
desc: desc
|
||||
asc: asc
|
||||
- name: info_tpp
|
||||
type: info
|
||||
label: Results Per Page
|
||||
default: For best results, change the <b>Torrents per page:</b> setting to <b>100</b> on your account profile.
|
||||
- name: info_activity
|
||||
type: info
|
||||
label: Account Inactivity
|
||||
default: "Cherish your user account. Inactive accounts would be deleted based on the following rules:<ol><li>Veteran User or above would never be deleted.</li><li>Elite User or above would never be deleted if parked (at User CP).</li><li>Parked accounts would be deleted if users have not logged in for more than 400 days in a row.</li><li>Unparked accounts would be deleted if users have not logged in for more than 150 days in a row.</li><li>Accounts with both uploaded and downloaded amount being 0 would be deleted if users have not logged in for more than 100 days in a row.</li></ol>"
|
||||
|
||||
login:
|
||||
# using cookie method because login page has embedded Cloudflare turnstile
|
||||
method: cookie
|
||||
inputs:
|
||||
cookie: "{{ .Config.cookie }}"
|
||||
test:
|
||||
path: index.php
|
||||
selector: a[href*="logout.php"]
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: torrents.php
|
||||
inputs:
|
||||
$raw: "{{ range .Categories }}cat{{.}}=1&{{end}}"
|
||||
search: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{ else }}{{ .Keywords }}{{ end }}"
|
||||
# 0 incldead, 1 active, 2 dead
|
||||
incldead: 0
|
||||
# 0 all, 1 normal, 2 free, 3 2x, 4 2xfree, 5 50%, 6 2x50%, 7 30%
|
||||
spstate: "{{ if .Config.freeleech }}2{{ else }}0{{ end }}"
|
||||
# 0 title, 1 descr, 3 uploader, 4 imdburl
|
||||
search_area: "{{ if .Query.IMDBID }}4{{ else }}0{{ end }}"
|
||||
# 0 AND, 1 OR, 2 exact
|
||||
search_mode: 0
|
||||
sort: "{{ .Config.sort }}"
|
||||
type: "{{ .Config.type }}"
|
||||
notnewword: 1
|
||||
# does not return imdb link in results
|
||||
|
||||
rows:
|
||||
selector: table.torrents > tbody > tr:has(a[href*="download.php?id="])
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: a[href*="?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
title_default:
|
||||
selector: table.torrentname td a[href^="details.php?id="]
|
||||
title:
|
||||
selector: a[title][href*="details.php?id="]
|
||||
attribute: title
|
||||
optional: true
|
||||
default: "{{ .Result.title_default }}"
|
||||
details:
|
||||
selector: a[href*="details.php?id="]
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href*="download.php?id="]
|
||||
attribute: href
|
||||
poster:
|
||||
selector: img[data-src]
|
||||
attribute: data-src
|
||||
date_elapsed:
|
||||
# time type: time elapsed (default)
|
||||
selector: td.rowfollow:nth-child(4) > span[title]
|
||||
attribute: title
|
||||
optional: true
|
||||
filters:
|
||||
- name: append
|
||||
args: " +08:00" # CST
|
||||
- name: dateparse
|
||||
args: "yyyy-MM-dd HH:mm:ss zzz"
|
||||
date_added:
|
||||
# time added
|
||||
selector: td.rowfollow:nth-child(4):not(:has(span))
|
||||
optional: true
|
||||
filters:
|
||||
- name: append
|
||||
args: " +08:00" # CST
|
||||
- name: dateparse
|
||||
args: "yyyy-MM-ddHH:mm:ss zzz"
|
||||
date:
|
||||
text: "{{ if or .Result.date_elapsed .Result.date_added }}{{ or .Result.date_elapsed .Result.date_added }}{{ else }}now{{ end }}"
|
||||
size:
|
||||
selector: td.rowfollow:nth-child(5)
|
||||
optional: true
|
||||
default: 512MB
|
||||
seeders:
|
||||
selector: td.rowfollow:nth-child(6)
|
||||
optional: true
|
||||
default: 0
|
||||
leechers:
|
||||
selector: td.rowfollow:nth-child(7)
|
||||
optional: true
|
||||
default: 0
|
||||
grabs:
|
||||
selector: td.rowfollow:nth-child(8)
|
||||
optional: true
|
||||
default: 0
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img.pro_free: 0
|
||||
img.pro_free2up: 0
|
||||
img.pro_50pctdown: 0.5
|
||||
img.pro_50pctdown2up: 0.5
|
||||
img.pro_30pctdown: 0.3
|
||||
"*": 1
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
img.pro_50pctdown2up: 2
|
||||
img.pro_free2up: 2
|
||||
img.pro_2up: 2
|
||||
"*": 1
|
||||
# NexusPHP v1.10.2 2026-04-11
|
||||
@@ -0,0 +1,204 @@
|
||||
---
|
||||
id: ptying
|
||||
name: PTYING (樱花)
|
||||
description: "PTYING (樱花) is a CHINESE Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
language: zh-CN
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://pt.ying.us.kg/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 409, cat: Other, desc: "HQ Misc/其他"}
|
||||
- {id: 408, cat: Audio, desc: "HQ Audio/音频"}
|
||||
- {id: 406, cat: Audio/Video, desc: "Music Video/MV"}
|
||||
- {id: 407, cat: TV/Sport, desc: "Sports/体育"}
|
||||
- {id: 410, cat: TV, desc: "Playlet/短剧"}
|
||||
- {id: 404, cat: TV/Documentary, desc: "Documentaries/纪录片"}
|
||||
- {id: 405, cat: TV/Anime, desc: "Anime/动漫"}
|
||||
- {id: 403, cat: TV, desc: "TV Shows/综艺"}
|
||||
- {id: 402, cat: TV, desc: "TV Series/电视剧"}
|
||||
- {id: 401, cat: Movies, desc: "Movies/电影"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid, doubanid]
|
||||
movie-search: [q, imdbid, doubanid]
|
||||
music-search: [q]
|
||||
|
||||
settings:
|
||||
- name: username
|
||||
type: text
|
||||
label: Username
|
||||
- name: password
|
||||
type: password
|
||||
label: Password
|
||||
- name: 2facode
|
||||
type: text
|
||||
label: 2FA code
|
||||
- name: info_2fa
|
||||
type: info
|
||||
label: "About 2FA code"
|
||||
default: "Only fill in the <b>2FA code</b> box if you have enabled <b>2FA</b> on the PTYING Web Site. Otherwise just leave it empty."
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
default: 4
|
||||
options:
|
||||
4: created
|
||||
7: seeders
|
||||
5: size
|
||||
1: title
|
||||
- name: type
|
||||
type: select
|
||||
label: Order requested from site
|
||||
default: desc
|
||||
options:
|
||||
desc: desc
|
||||
asc: asc
|
||||
- name: info_tpp
|
||||
type: info
|
||||
label: Results Per Page
|
||||
default: For best results, change the <b>Torrents per page:</b> setting to <b>100</b> on your account profile.
|
||||
- name: info_activity
|
||||
type: info
|
||||
label: Account Inactivity
|
||||
default: "Account retention rules:<ol><li>Veteran User and above will be retained forever</li><li>Elite User and above will not have their account deleted after parking (in the control panel)</li><li>Users with a parked account will be deleted if they do not log in for 400 consecutive days</li><li>Users with a non-parked account will be deleted if they do not log in for 150 consecutive days</li></ol>"
|
||||
|
||||
login:
|
||||
path: login.php
|
||||
method: form
|
||||
form: form[action="takelogin.php"]
|
||||
captcha:
|
||||
type: image
|
||||
selector: img[alt="CAPTCHA"]
|
||||
input: imagestring
|
||||
inputs:
|
||||
secret: ""
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
two_step_code: "{{ .Config.2facode }}"
|
||||
logout: ""
|
||||
securelogin: ""
|
||||
ssl: yes
|
||||
trackerssl: yes
|
||||
error:
|
||||
- selector: td.embedded:has(h2:contains("失败"))
|
||||
test:
|
||||
path: index.php
|
||||
selector: a[href="logout.php"]
|
||||
search:
|
||||
paths:
|
||||
- path: torrents.php
|
||||
inputs:
|
||||
$raw: "{{ range .Categories }}cat{{.}}=1&{{end}}"
|
||||
search: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{ else }}{{ end }}{{ if and .Query.DoubanID (eq .Query.IMDBID .False) }}{{ .Query.DoubanID }}{{ else }}{{ end }}{{ if and (eq .Query.IMDBID .False) (eq .Query.DoubanID .False) }}{{ .Keywords }}{{ else }}{{ end }}"
|
||||
# 0 incldead, 1 active, 2 dead
|
||||
incldead: 0
|
||||
# 0 all, 1 normal, 2 free, 3 2x, 4 2xfree, 5 50%, 6 2x50%, 7 30%
|
||||
spstate: "{{ if .Config.freeleech }}2{{ else }}0{{ end }}"
|
||||
# 0 title, 1 descr, 3 uploader, 4 imdburl
|
||||
search_area: "{{ if .Query.IMDBID }}4{{ else }}{{ end }}{{ if and .Query.DoubanID (eq .Query.IMDBID .False) }}1{{ else }}{{ end }}{{ if and (eq .Query.IMDBID .False) (eq .Query.DoubanID .False) }}0{{ else }}{{ end }}"
|
||||
# 0 AND, 2 exact
|
||||
search_mode: 0
|
||||
sort: "{{ .Config.sort }}"
|
||||
type: "{{ .Config.type }}"
|
||||
notnewword: 1
|
||||
|
||||
rows:
|
||||
selector: table.torrents > tbody > tr:has(a[href^="download.php?id="])
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: a[href^="?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
title_default:
|
||||
selector: a[href^="details.php?id="]
|
||||
title:
|
||||
selector: a[title][href^="details.php?id="]
|
||||
attribute: title
|
||||
optional: true
|
||||
default: "{{ .Result.title_default }}"
|
||||
details:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href^="download.php?id="]
|
||||
attribute: href
|
||||
poster:
|
||||
selector: img[data-src]
|
||||
attribute: data-src
|
||||
imdbid:
|
||||
# site currently only has a badge and rating, the id is not present. just in case a future update.
|
||||
selector: a[href*="imdb.com/title/tt"]
|
||||
attribute: href
|
||||
doubanid:
|
||||
# site currently only has a badge and rating, the id is not present. just in case a future update.
|
||||
selector: a[href*="movie.douban.com/subject/"]
|
||||
attribute: href
|
||||
date_elapsed:
|
||||
# time type: time elapsed (default)
|
||||
selector: td.rowfollow:nth-child(4) > span[title]
|
||||
attribute: title
|
||||
optional: true
|
||||
filters:
|
||||
- name: append
|
||||
args: " +08:00" # CST
|
||||
- name: dateparse
|
||||
args: "yyyy-MM-dd HH:mm:ss zzz"
|
||||
date_added:
|
||||
# time added
|
||||
selector: td.rowfollow:nth-child(4):not(:has(span))
|
||||
optional: true
|
||||
filters:
|
||||
- name: append
|
||||
args: " +08:00" # CST
|
||||
- name: dateparse
|
||||
args: "yyyy-MM-ddHH:mm:ss zzz"
|
||||
date:
|
||||
text: "{{ if or .Result.date_elapsed .Result.date_added }}{{ or .Result.date_elapsed .Result.date_added }}{{ else }}now{{ end }}"
|
||||
size:
|
||||
selector: td.rowfollow:nth-child(5)
|
||||
optional: true
|
||||
default: 512MB
|
||||
seeders:
|
||||
selector: td.rowfollow:nth-child(6)
|
||||
optional: true
|
||||
default: 0
|
||||
leechers:
|
||||
selector: td.rowfollow:nth-child(7)
|
||||
optional: true
|
||||
default: 0
|
||||
grabs:
|
||||
selector: td.rowfollow:nth-child(8)
|
||||
optional: true
|
||||
default: 0
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img.pro_free: 0
|
||||
img.pro_free2up: 0
|
||||
img.pro_50pctdown: 0.5
|
||||
img.pro_50pctdown2up: 0.5
|
||||
img.pro_30pctdown: 0.3
|
||||
"*": 1
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
img.pro_50pctdown2up: 2
|
||||
img.pro_free2up: 2
|
||||
img.pro_2up: 2
|
||||
"*": 1
|
||||
description:
|
||||
selector: td:nth-child(2)
|
||||
remove: a, b, font, img, span
|
||||
minimumseedtime:
|
||||
# 1 day (as seconds = 24 x 60 x 60)
|
||||
text: 86400
|
||||
# NexusPHP v1.8.15 2024-12-23
|
||||
@@ -0,0 +1,189 @@
|
||||
---
|
||||
id: ptzone
|
||||
name: PTzone
|
||||
description: "PTzone is a CHINESE Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
language: zh-CN
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://ptzone.xyz/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 401, cat: Movies, desc: "Movies(电影)"}
|
||||
- {id: 402, cat: TV, desc: "TV Series(电视剧)"}
|
||||
- {id: 403, cat: TV, desc: "TV Shows(综艺)"}
|
||||
- {id: 404, cat: TV/Documentary, desc: "Documentaries(纪录片)"}
|
||||
- {id: 405, cat: TV/Anime, desc: "Animations(动漫)"}
|
||||
- {id: 406, cat: Audio, desc: "Music(音乐)"}
|
||||
- {id: 407, cat: TV/Sport, desc: "Sports(体育)"}
|
||||
- {id: 408, cat: Other, desc: "Others(其它)"}
|
||||
- {id: 410, cat: PC/0day, desc: "Software(软件)"}
|
||||
- {id: 411, cat: PC/Games, desc: "Games(游戏)"}
|
||||
- {id: 409, cat: TV, desc: "Others(其它)"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid, doubanid]
|
||||
movie-search: [q, imdbid, doubanid]
|
||||
music-search: [q]
|
||||
|
||||
settings:
|
||||
- name: cookie
|
||||
type: text
|
||||
label: Cookie
|
||||
- name: info_cookie
|
||||
type: info_cookie
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
default: 4
|
||||
options:
|
||||
4: created
|
||||
7: seeders
|
||||
5: size
|
||||
1: title
|
||||
- name: type
|
||||
type: select
|
||||
label: Order requested from site
|
||||
default: desc
|
||||
options:
|
||||
desc: desc
|
||||
asc: asc
|
||||
- name: info_tpp
|
||||
type: info
|
||||
label: Results Per Page
|
||||
default: For best results, change the <b>Torrents per page:</b> setting to <b>100</b> on your account profile.
|
||||
- name: info_activity
|
||||
type: info
|
||||
label: Account Inactivity
|
||||
default: "Account retention rules:<ol><li>Veteran User and above will be retained forever</li><li>Elite User and above will not have their account deleted after parking (in the control panel)</li><li>Users with a parked account will be deleted if they do not log in for 400 consecutive days</li><li>Users with a non-parked account will be deleted if they do not log in for 150 consecutive days</li><li>Users who have no traffic (i.e. upload/download data are both 0) will be deleted if they do not log in for 100 consecutive days.</li></ol>"
|
||||
|
||||
login:
|
||||
# using cookie method because site regularly disables login page and goes into silent mode during the year
|
||||
method: cookie
|
||||
inputs:
|
||||
cookie: "{{ .Config.cookie }}"
|
||||
test:
|
||||
path: index.php
|
||||
selector: a[href="logout.php"]
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: torrents.php
|
||||
inputs:
|
||||
$raw: "{{ range .Categories }}cat{{.}}=1&{{end}}"
|
||||
search: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{ else }}{{ end }}{{ if and .Query.DoubanID (eq .Query.IMDBID .False) }}{{ .Query.DoubanID }}{{ else }}{{ end }}{{ if and (eq .Query.IMDBID .False) (eq .Query.DoubanID .False) }}{{ .Keywords }}{{ else }}{{ end }}"
|
||||
# 0 incldead, 1 active, 2 dead
|
||||
incldead: 0
|
||||
# 0 all, 1 normal, 2 free, 3 2x, 4 2xfree, 5 50%, 6 2x50%, 7 30%
|
||||
spstate: "{{ if .Config.freeleech }}2{{ else }}0{{ end }}"
|
||||
# 0 title, 1 descr, 3 uploader, 4 imdburl
|
||||
search_area: "{{ if .Query.IMDBID }}4{{ else }}{{ end }}{{ if and .Query.DoubanID (eq .Query.IMDBID .False) }}1{{ else }}{{ end }}{{ if and (eq .Query.IMDBID .False) (eq .Query.DoubanID .False) }}0{{ else }}{{ end }}"
|
||||
# 0 AND, 1 OR, 2 exact
|
||||
search_mode: 0
|
||||
sort: "{{ .Config.sort }}"
|
||||
type: "{{ .Config.type }}"
|
||||
notnewword: 1
|
||||
|
||||
rows:
|
||||
selector: table.torrents > tbody > tr:has(a[href^="details.php?id="])
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: a[href^="?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
title_default:
|
||||
selector: a[href^="details.php?id="]
|
||||
title:
|
||||
selector: a[title][href^="details.php?id="]
|
||||
attribute: title
|
||||
optional: true
|
||||
default: "{{ .Result.title_default }}"
|
||||
details:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href^="download.php?id="]
|
||||
attribute: href
|
||||
poster:
|
||||
selector: img[data-src]
|
||||
attribute: data-src
|
||||
imdbid:
|
||||
# site currently only has a badge and rating, the id is not present. just in case a future update.
|
||||
selector: a[href*="imdb.com/title/tt"]
|
||||
attribute: href
|
||||
doubanid:
|
||||
# site currently only has a badge and rating, the id is not present. just in case a future update.
|
||||
selector: a[href*="movie.douban.com/subject/"]
|
||||
attribute: href
|
||||
date_elapsed:
|
||||
# time type: time elapsed (default)
|
||||
selector: td.rowfollow:nth-child(4) > span[title]
|
||||
attribute: title
|
||||
optional: true
|
||||
filters:
|
||||
- name: append
|
||||
args: " +08:00" # CST
|
||||
- name: dateparse
|
||||
args: "yyyy-MM-dd HH:mm:ss zzz"
|
||||
date_added:
|
||||
# time added
|
||||
selector: td.rowfollow:nth-child(4):not(:has(span))
|
||||
optional: true
|
||||
filters:
|
||||
- name: append
|
||||
args: " +08:00" # CST
|
||||
- name: dateparse
|
||||
args: "yyyy-MM-ddHH:mm:ss zzz"
|
||||
date:
|
||||
text: "{{ if or .Result.date_elapsed .Result.date_added }}{{ or .Result.date_elapsed .Result.date_added }}{{ else }}now{{ end }}"
|
||||
size:
|
||||
selector: td.rowfollow:nth-child(5)
|
||||
optional: true
|
||||
default: 512MB
|
||||
seeders:
|
||||
selector: td.rowfollow:nth-child(6)
|
||||
optional: true
|
||||
default: 0
|
||||
leechers:
|
||||
selector: td.rowfollow:nth-child(7)
|
||||
optional: true
|
||||
default: 0
|
||||
grabs:
|
||||
selector: td.rowfollow:nth-child(8)
|
||||
optional: true
|
||||
default: 0
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img.pro_free: 0
|
||||
img.pro_free2up: 0
|
||||
img.pro_50pctdown: 0.5
|
||||
img.pro_50pctdown2up: 0.5
|
||||
img.pro_30pctdown: 0.3
|
||||
"*": 1
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
img.pro_50pctdown2up: 2
|
||||
img.pro_free2up: 2
|
||||
img.pro_2up: 2
|
||||
"*": 1
|
||||
description_verified:
|
||||
case:
|
||||
span[title="通过"], span[title="通過"], span[title="Allowed"]: "Verified:"
|
||||
span[title="未审"], span[title="未審"], span[title="Not reviewed"]: "Unverified:"
|
||||
span[title="拒绝"], span[title="拒絕"], span[title="Denied"]: "Banned:"
|
||||
description:
|
||||
selector: td.rowfollow:nth-child(2)
|
||||
remove: a, b, font, img, span
|
||||
filters:
|
||||
- name: prepend
|
||||
args: "{{ .Result.description_verified }} "
|
||||
# NexusPHP v1.9.9 2025-10-02
|
||||
@@ -0,0 +1,149 @@
|
||||
---
|
||||
id: pwtorrents2fa
|
||||
name: PWTorrents2FA
|
||||
description: "PWTorrents (PWT) is a Private Torrent Tracker for PROFESSIONAL WRESTLING. This indexer uses cookie login for 2FA."
|
||||
language: en-US
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://pwtorrents.net/
|
||||
legacylinks:
|
||||
- http://pwtorrents.net/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 26, cat: TV/Sport, desc: "AEW Dark"}
|
||||
- {id: 21, cat: TV/Sport, desc: "AEW Dynamite"}
|
||||
- {id: 20, cat: TV/Sport, desc: "AEW PPV"}
|
||||
- {id: 23, cat: TV/Sport, desc: "AEW Rampage"}
|
||||
- {id: 28, cat: TV/Sport, desc: "AEW Collision"}
|
||||
- {id: 1, cat: TV/Sport, desc: "Boxing"}
|
||||
- {id: 2, cat: TV/Sport, desc: "Documentaries"}
|
||||
- {id: 3, cat: TV/Sport, desc: "DVD"}
|
||||
- {id: 4, cat: TV/Sport, desc: "ECW"}
|
||||
- {id: 13, cat: TV/Sport, desc: "Impact PPV"}
|
||||
- {id: 14, cat: TV/Sport, desc: "Impact Weekly"}
|
||||
- {id: 6, cat: TV/Sport, desc: "Indy's"}
|
||||
- {id: 7, cat: TV/Sport, desc: "Matches"}
|
||||
- {id: 8, cat: TV/Sport, desc: "Misc."}
|
||||
- {id: 9, cat: TV/Sport, desc: "MMA"}
|
||||
- {id: 11, cat: TV/Sport, desc: "Puro"}
|
||||
- {id: 10, cat: TV/Sport, desc: "PWT Packs"}
|
||||
- {id: 12, cat: TV/Sport, desc: "Ring Of Honor"}
|
||||
- {id: 15, cat: TV/Sport, desc: "WCW"}
|
||||
- {id: 18, cat: TV/Sport, desc: "WWE Network"}
|
||||
- {id: 16, cat: TV/Sport, desc: "WWE PPV"}
|
||||
- {id: 24, cat: TV/Sport, desc: "WWE RAW"}
|
||||
- {id: 25, cat: TV/Sport, desc: "WWE Smackdown"}
|
||||
- {id: 17, cat: TV/Sport, desc: "WWE Weekly"}
|
||||
- {id: 27, cat: TV/Sport, desc: "WWE NXT"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
|
||||
settings:
|
||||
- name: cookie
|
||||
type: text
|
||||
label: Cookie
|
||||
- name: info_cookie
|
||||
type: info_cookie
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: seedbox
|
||||
type: checkbox
|
||||
label: "Use SeedBox Download Link"
|
||||
default: false
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
default: 4
|
||||
options:
|
||||
4: created
|
||||
7: seeders
|
||||
5: size
|
||||
1: title
|
||||
- name: type
|
||||
type: select
|
||||
label: Order requested from site
|
||||
default: desc
|
||||
options:
|
||||
desc: desc
|
||||
asc: asc
|
||||
|
||||
login:
|
||||
# using cookie method because login page can present second page for 2FA when enabled
|
||||
method: cookie
|
||||
inputs:
|
||||
cookie: "{{ .Config.cookie }}"
|
||||
test:
|
||||
path: my.php
|
||||
selector: a[href="logout.php"]
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://pwtorrents.net/browse.php?c18=1&c16=1&c17=1&incldead=0
|
||||
- path: browse.php
|
||||
inputs:
|
||||
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
|
||||
# 0 active, 1 incldead, 2 onlydead, 3 freeleech
|
||||
incldead: "{{ if .Config.freeleech }}3{{ else }}1{{ end }}"
|
||||
search: "{{ .Keywords }}"
|
||||
sort: "{{ .Config.sort }}"
|
||||
type: "{{ .Config.type }}"
|
||||
|
||||
rows:
|
||||
selector: table[border="1"][cellspacing="0"][cellpadding="5"] tr:has(a[href^="download.php?id="])
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: a[href^="browse.php?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
title:
|
||||
selector: a[href^="details.php?id="]
|
||||
optional: true
|
||||
default: No Title
|
||||
details:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
download_1:
|
||||
selector: a[href^="download.php?id="]
|
||||
attribute: href
|
||||
download_2:
|
||||
selector: a[href^="seeddownload.php?id="]
|
||||
attribute: href
|
||||
download:
|
||||
text: "{{ if .Config.seedbox }}{{ .Result.download_2 }}{{ else }}{{ .Result.download_1 }}{{ end }}"
|
||||
date:
|
||||
selector: td:nth-child(4)
|
||||
filters:
|
||||
- name: append
|
||||
args: " +00:00" # GMT
|
||||
- name: dateparse
|
||||
args: "yyyy-MM-ddHH:mm:ss zzz"
|
||||
size:
|
||||
selector: td:nth-child(5)
|
||||
grabs:
|
||||
selector: td:nth-child(6)
|
||||
seeders:
|
||||
selector: td:nth-child(9)
|
||||
leechers:
|
||||
selector: td:nth-child(10)
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img[src="pic/freeleech.png"]: 0
|
||||
"*": 1
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
img[src="gold.png"]: 2
|
||||
img[src="silver.png"]: 1.5
|
||||
img[src="bronze.png"]: 1.25
|
||||
"*": 1
|
||||
minimumratio:
|
||||
text: 0.7
|
||||
# engine n/a
|
||||
@@ -0,0 +1,184 @@
|
||||
---
|
||||
id: retromoviesclub-api
|
||||
name: RetroMoviesClub (API)
|
||||
description: "RetroMoviesClub (RMC) is a Private Torrent Tracker for Classic Movies"
|
||||
language: en-US
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://retro-movies.club/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: Movies, desc: "Movies"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
movie-search: [q, imdbid, tmdbid]
|
||||
|
||||
settings:
|
||||
- name: apikey
|
||||
type: text
|
||||
label: APIKey
|
||||
- name: info_key
|
||||
type: info
|
||||
label: About your API key
|
||||
default: "Find or Generate a new API Token by accessing your <a href=\"https://retro-movies.club/\" target=\"_blank\">RetroMoviesClub</a> account <i>My Settings</i> page and clicking on the <b>API Key</b> tab."
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: single_file_release_use_filename
|
||||
type: checkbox
|
||||
label: Use filename as title for single file releases
|
||||
default: true
|
||||
- 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
|
||||
- name: info_activity
|
||||
type: info
|
||||
label: Account Inactivity
|
||||
default: "Accounts that are inactive for extended periods may be shelved or pruned."
|
||||
|
||||
login:
|
||||
path: api/torrents
|
||||
method: get
|
||||
error:
|
||||
- selector: a[href*="/login"]
|
||||
message:
|
||||
text: "The API key was not accepted by {{ .Config.sitelink }}."
|
||||
- selector: :root:contains("Account is Banned")
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://hdinnovations.github.io/UNIT3D/torrent_api.html
|
||||
# https://github.com/HDInnovations/UNIT3D/blob/master/app/Http/Controllers/API/TorrentController.php#L657
|
||||
- path: api/torrents/filter
|
||||
response:
|
||||
type: json
|
||||
|
||||
headers:
|
||||
Authorization: ["Bearer {{ .Config.apikey }}"]
|
||||
|
||||
inputs:
|
||||
$raw: "{{ range .Categories }}&categories[]={{.}}{{end}}"
|
||||
name: "{{ .Keywords }}"
|
||||
imdbId: "{{ .Query.IMDBIDShort }}"
|
||||
tmdbId: "{{ .Query.TMDBID }}"
|
||||
"free[]": "{{ if .Config.freeleech }}100{{ else }}{{ end }}"
|
||||
sortField: "{{ .Config.sort }}"
|
||||
sortDirection: "{{ .Config.type }}"
|
||||
perPage: 100
|
||||
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
args: ["\\.", " "]
|
||||
|
||||
rows:
|
||||
selector: data
|
||||
attribute: attributes
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: category_id
|
||||
title_optional:
|
||||
selector: name
|
||||
title_filename:
|
||||
selector: "files[0].name"
|
||||
optional: true
|
||||
files:
|
||||
selector: num_file
|
||||
title:
|
||||
text: "{{ if and (.Config.single_file_release_use_filename) (eq .Result.files \"1\") (.Result.title_filename) }}{{ .Result.title_filename }}{{ else }}{{ .Result.title_optional }}{{ end }}"
|
||||
details:
|
||||
selector: details_link
|
||||
download:
|
||||
selector: download_link
|
||||
poster:
|
||||
selector: meta.poster
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["https://via.placeholder.com/90x135", ""]
|
||||
imdbid:
|
||||
selector: imdb_id
|
||||
tmdbid:
|
||||
selector: tmdb_id
|
||||
tvdbid:
|
||||
selector: tvdb_id
|
||||
genre:
|
||||
selector: meta.genres
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["(?i)(Science Fiction)", "Science_Fiction"]
|
||||
- name: re_replace
|
||||
args: ["(?i)(TV Movie)", "TV_Movie"]
|
||||
- name: replace
|
||||
args: [" & ", "_&_"]
|
||||
_internal:
|
||||
selector: internal
|
||||
case:
|
||||
False: "{{ .False }}"
|
||||
True: "{{ .True }}"
|
||||
description:
|
||||
text: "{{ if .Result._internal }}Internal{{ else }}{{ end }}{{ if and .Result._internal .Result.genre }} | {{ else }}{{ end }}{{ .Result.genre }}"
|
||||
seeders:
|
||||
selector: seeders
|
||||
leechers:
|
||||
selector: leechers
|
||||
grabs:
|
||||
selector: times_completed
|
||||
date:
|
||||
# "created_at": "2021-10-18T00:34:50.000000Z" is returned by Newtonsoft.Json.Linq as 18/10/2021 00:34:50
|
||||
selector: created_at
|
||||
filters:
|
||||
- name: append
|
||||
args: " +00:00" # GMT
|
||||
- name: dateparse
|
||||
args: "MM/dd/yyyy HH:mm:ss zzz"
|
||||
size:
|
||||
selector: size
|
||||
_featured:
|
||||
selector: featured
|
||||
case:
|
||||
False: "{{ .False }}"
|
||||
True: "{{ .True }}"
|
||||
downloadvolumefactor_freeleech:
|
||||
# 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
|
||||
downloadvolumefactor:
|
||||
text: "{{ if .Result._featured }}0{{ else }}{{ .Result.downloadvolumefactor_freeleech }}{{ end }}"
|
||||
uploadvolumefactor_double_upload:
|
||||
# api returns False, True
|
||||
selector: double_upload
|
||||
case:
|
||||
False: 1 # normal
|
||||
True: 2 # double
|
||||
uploadvolumefactor:
|
||||
text: "{{ if .Result._featured }}2{{ else }}{{ .Result.uploadvolumefactor_double_upload }}{{ end }}"
|
||||
# global MR is 0.4 but torrents must be seeded for 48 hours
|
||||
# minimumratio:
|
||||
# text: 0.4
|
||||
minimumseedtime:
|
||||
# 48 hours (as seconds = 2 x 24 x 60 x 60)
|
||||
text: 172800
|
||||
# json UNIT3D 9.2.0
|
||||
@@ -0,0 +1,109 @@
|
||||
---
|
||||
id: retrotoon
|
||||
name: RetroToon
|
||||
description: "RetroToon is a Private Torrent Tracker for ANIMATED MOVIES / TV"
|
||||
language: en-US
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://www.retrotoon.world/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
# from https://www.retrotoon.world/torznab.php?t=caps
|
||||
- {id: 2000, cat: Movies, desc: "Movies"}
|
||||
- {id: 3000, cat: Audio, desc: "Audio"}
|
||||
- {id: 3030, cat: Audio, desc: "Soundtrack"}
|
||||
- {id: 5000, cat: TV, desc: "TV"}
|
||||
- {id: 5070, cat: TV/Anime, desc: "TV/Anime"}
|
||||
- {id: 5080, cat: TV/Documentary, desc: "TV/Documentary"}
|
||||
- {id: 7000, cat: Books, desc: "Books"}
|
||||
- {id: 7030, cat: Books/Comics, desc: "Comics"}
|
||||
- {id: 8000, cat: TV/Anime, desc: "Adult Animation"}
|
||||
- {id: 100008, cat: TV/Anime, desc: "Adult Animation"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
book-search: [q]
|
||||
music-search: [q]
|
||||
|
||||
settings:
|
||||
- name: apikey
|
||||
type: text
|
||||
label: API Key
|
||||
- name: info_key
|
||||
type: info
|
||||
label: About your API Key
|
||||
default: "You can find your API Key by accessing the <a href=\"https://www.retrotoon.world/prowlarr.php\" target=\"_blank\">RetroToon Prowlarr & Torznab integration</a> page and scrolling down to the <b>Your Passkey</b> section. (Passkey is the same as the APIkey)."
|
||||
|
||||
login:
|
||||
# returns "401 Unauthorized, check your credentials" if apikey is invalid
|
||||
path: torznab.php
|
||||
method: get
|
||||
inputs:
|
||||
apikey: "{{ .Config.apikey }}"
|
||||
t: search
|
||||
limit: 1
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: torznab.php
|
||||
response:
|
||||
type: xml
|
||||
|
||||
inputs:
|
||||
apikey: "{{ .Config.apikey }}"
|
||||
t: "{{ .Query.Type }}"
|
||||
q: "{{ .Keywords }}"
|
||||
cat: "{{ join .Categories \",\" }}"
|
||||
season: "{{ .Query.Season }}"
|
||||
ep: "{{ .Query.Ep }}"
|
||||
limit: 100
|
||||
|
||||
rows:
|
||||
selector: rss > channel > item
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: "[name=category]"
|
||||
attribute: value
|
||||
title:
|
||||
selector: title
|
||||
details:
|
||||
selector: link
|
||||
download:
|
||||
selector: enclosure
|
||||
attribute: url
|
||||
date:
|
||||
# Thu, 15 Jan 2026 16:24:34 +0000
|
||||
selector: pubDate
|
||||
filters:
|
||||
- name: dateparse
|
||||
args: "ddd, dd MMM yyyy HH:mm:ss zzz"
|
||||
size:
|
||||
selector: "[name=size]"
|
||||
attribute: value
|
||||
imdbid:
|
||||
selector: "[name=imdbid]"
|
||||
attribute: value
|
||||
seeders:
|
||||
selector: "[name=seeders]"
|
||||
attribute: value
|
||||
leechers:
|
||||
selector: "[name=leechers]"
|
||||
attribute: value
|
||||
grabs:
|
||||
selector: "[name=grabs]"
|
||||
attribute: value
|
||||
downloadvolumefactor:
|
||||
selector: "[name=downloadvolumefactor]"
|
||||
attribute: value
|
||||
uploadvolumefactor:
|
||||
selector: "[name=uploadvolumefactor]"
|
||||
attribute: value
|
||||
minimumseedtime:
|
||||
# 3 days (as seconds = 3 x 24 x 60 x 60)
|
||||
text: 259200
|
||||
# torznab xml
|
||||
@@ -0,0 +1,140 @@
|
||||
---
|
||||
id: scenetime-api
|
||||
name: SceneTime (API)
|
||||
description: "SceneTime is a Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
language: en-US
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
requestDelay: 3
|
||||
links:
|
||||
- https://www.scenetime.com/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
# from https://www.scenetime.com/rss.php?apikey=YOUR-API-KEY&t=caps
|
||||
- {id: 1000, cat: Console, desc: "Console"}
|
||||
- {id: 100015, cat: Console/Other, desc: "Games Dreamcast"}
|
||||
- {id: 100055, cat: Console/NDS, desc: "Games Nintendo"}
|
||||
- {id: 100012, cat: Console/PS4, desc: "Games PS"}
|
||||
- {id: 100051, cat: Console/Wii, desc: "Games Wii"}
|
||||
- {id: 100048, cat: Console/XBox, desc: "Games XBOX"}
|
||||
- {id: 2000, cat: Movies, desc: "Movies"}
|
||||
- {id: 100047, cat: Movies, desc: "Movie Packs"}
|
||||
- {id: 100064, cat: Movies/3D, desc: "Movies 3D"}
|
||||
- {id: 100082, cat: Movies/Other, desc: "Movies CAM/TS"}
|
||||
- {id: 100059, cat: Movies/HD, desc: "Movies HD"}
|
||||
- {id: 100057, cat: Movies/SD, desc: "Movies SD"}
|
||||
- {id: 100016, cat: Movies/UHD, desc: "Movies UHD"}
|
||||
- {id: 3000, cat: Audio, desc: "Audio"}
|
||||
- {id: 100004, cat: Audio, desc: "Music"}
|
||||
- {id: 100116, cat: Audio, desc: "Music Packs"}
|
||||
- {id: 4000, cat: PC, desc: "PC"}
|
||||
- {id: 100006, cat: PC/Games, desc: "Games PC-ISO"}
|
||||
- {id: 100053, cat: PC/0day, desc: "Apps"}
|
||||
- {id: 100052, cat: PC/Mac, desc: "Mac/Linux"}
|
||||
- {id: 5000, cat: TV, desc: "TV"}
|
||||
- {id: 100001, cat: TV/Anime, desc: "TV ANIME"}
|
||||
- {id: 100009, cat: TV/HD, desc: "TV HD"}
|
||||
- {id: 100043, cat: TV, desc: "TV Packs"}
|
||||
- {id: 100077, cat: TV/SD, desc: "TV SD"}
|
||||
- {id: 100002, cat: TV/UHD, desc: "TV UHD"}
|
||||
- {id: 6000, cat: XXX, desc: "XXX"}
|
||||
- {id: 100010, cat: XXX, desc: "Movies Adult"}
|
||||
- {id: 7000, cat: Books, desc: "Books"}
|
||||
- {id: 100007, cat: Books, desc: "Books and Magazines"}
|
||||
- {id: 100065, cat: Books/Comics, desc: "Comic Books"}
|
||||
- {id: 8000, cat: Other, desc: "Other"}
|
||||
- {id: 100024, cat: PC/Mobile-Other, desc: "Mobile Apps"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid]
|
||||
movie-search: [q, imdbid]
|
||||
music-search: [q]
|
||||
book-search: [q]
|
||||
|
||||
settings:
|
||||
- name: apikey
|
||||
type: text
|
||||
label: API Key
|
||||
- name: info_key
|
||||
type: info
|
||||
label: About your API key
|
||||
default: "You can find your API Key by accessing the <a href=\"https://scenetime.com/rss.php\" target=\"_blank\">SceneTime RSS</a> page, scrolling down to the <b>Torznab API</b> section, and copying the <b>API Key</b>."
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: info_activity
|
||||
type: info
|
||||
label: Account Inactivity
|
||||
default: "Unused accounts (accounts with no activity) and inactive unparked accounts may be deleted."
|
||||
|
||||
login:
|
||||
# returns "401 Unauthorized, check your credentials" if passkey is invalid
|
||||
path: "rss.php?apikey={{ .Config.apikey }}&view=html"
|
||||
method: get
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: rss.php
|
||||
response:
|
||||
type: xml
|
||||
|
||||
inputs:
|
||||
apikey: "{{ .Config.apikey }}"
|
||||
t: "{{ if or .Query.Season .Query.Ep }}tvsearch{{ else }}search{{ end }}"
|
||||
q: "{{ .Keywords }}"
|
||||
cat: "{{ join .Categories \",\" }}"
|
||||
season: "{{ .Query.Season }}"
|
||||
ep: "{{ .Query.Ep }}"
|
||||
imdbid: "{{ .Query.IMDBID }}"
|
||||
limit: 100
|
||||
downloadvolumefactor: "{{ if .Config.freeleech }}0{{ else }}{{ end }}"
|
||||
|
||||
rows:
|
||||
selector: rss > channel > item
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: "[name=category]"
|
||||
attribute: value
|
||||
title:
|
||||
selector: title
|
||||
details:
|
||||
selector: link
|
||||
download:
|
||||
selector: enclosure
|
||||
attribute: url
|
||||
imdbid:
|
||||
selector: "[name=imdbid]"
|
||||
attribute: value
|
||||
date:
|
||||
# Tue, 07 Apr 2026 20:41:08 +0000
|
||||
selector: pubDate
|
||||
filters:
|
||||
- name: dateparse
|
||||
args: "ddd, dd MMM yyyy HH:mm:ss zzz"
|
||||
size:
|
||||
selector: size
|
||||
seeders:
|
||||
selector: "[name=seeders]"
|
||||
attribute: value
|
||||
leechers:
|
||||
selector: "[name=leechers]"
|
||||
attribute: value
|
||||
grabs:
|
||||
selector: "[name=grabs]"
|
||||
attribute: value
|
||||
downloadvolumefactor:
|
||||
selector: "[name=downloadvolumefactor]"
|
||||
attribute: value
|
||||
uploadvolumefactor:
|
||||
selector: "[name=uploadvolumefactor]"
|
||||
attribute: value
|
||||
minimumratio:
|
||||
text: 1.0
|
||||
minimumseedtime:
|
||||
# 3 days (as seconds = 3 x 24 x 60 x 60)
|
||||
text: 259200
|
||||
# torznab xml
|
||||
@@ -0,0 +1,210 @@
|
||||
---
|
||||
id: seedcore-api
|
||||
replaces:
|
||||
- rotorrent-api
|
||||
name: SeedCore (API)
|
||||
description: "SeedCore (ROT) is a ROMANIAN Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
language: ro-RO
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://seedcore.net/
|
||||
legacylinks:
|
||||
- https://rotorrent.info/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: Movies, desc: "Movies"}
|
||||
- {id: 2, cat: TV, desc: "TV"}
|
||||
- {id: 3, cat: Audio, desc: "Music"}
|
||||
- {id: 4, cat: PC/Games, desc: "Games"}
|
||||
- {id: 5, cat: XXX, desc: "XXX"}
|
||||
- {id: 6, cat: Other, desc: "Video"}
|
||||
- {id: 7, cat: Other, desc: "Other"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid, tvdbid, tmdbid]
|
||||
movie-search: [q, imdbid, tmdbid]
|
||||
music-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://seedcore.net/\" target=\"_blank\">SeedCore</a> account <i>My Settings</i> page and clicking on the <b>API Key</b> tab."
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: single_file_release_use_filename
|
||||
type: checkbox
|
||||
label: Use filename as title for single file releases
|
||||
default: true
|
||||
- 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
|
||||
error:
|
||||
- selector: a[href*="/login"]
|
||||
message:
|
||||
text: "The API key was not accepted by {{ .Config.sitelink }}."
|
||||
- selector: :root:contains("Account is Banned")
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://hdinnovations.github.io/UNIT3D/torrent_api.html
|
||||
# https://github.com/HDInnovations/UNIT3D/blob/master/app/Http/Controllers/API/TorrentController.php#L657
|
||||
- path: api/torrents/filter
|
||||
response:
|
||||
type: json
|
||||
|
||||
headers:
|
||||
Authorization: ["Bearer {{ .Config.apikey }}"]
|
||||
|
||||
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
|
||||
$raw: "{{ range .Categories }}&categories[]={{.}}{{end}}"
|
||||
name: "{{ .Keywords }}"
|
||||
seasonNumber: "{{ .Query.Season }}"
|
||||
episodeNumber: "{{ .Query.Ep }}"
|
||||
imdbId: "{{ .Query.IMDBIDShort }}"
|
||||
tmdbId: "{{ .Query.TMDBID }}"
|
||||
tvdbId: "{{ .Query.TVDBID }}"
|
||||
"free[]": "{{ if .Config.freeleech }}100{{ else }}{{ end }}"
|
||||
sortField: "{{ .Config.sort }}"
|
||||
sortDirection: "{{ .Config.type }}"
|
||||
perPage: 100
|
||||
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
args: ["\\.", " "]
|
||||
|
||||
rows:
|
||||
selector: data
|
||||
attribute: attributes
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: category_id
|
||||
title_optional:
|
||||
selector: name
|
||||
title_filename:
|
||||
selector: "files[0].name"
|
||||
optional: true
|
||||
files:
|
||||
selector: num_file
|
||||
title:
|
||||
text: "{{ if and (.Config.single_file_release_use_filename) (eq .Result.files \"1\") (.Result.title_filename) }}{{ .Result.title_filename }}{{ else }}{{ .Result.title_optional }}{{ end }}"
|
||||
details:
|
||||
selector: details_link
|
||||
download:
|
||||
selector: download_link
|
||||
poster:
|
||||
selector: meta.poster
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["https://via.placeholder.com/90x135", ""]
|
||||
imdbid:
|
||||
selector: imdb_id
|
||||
tmdbid:
|
||||
selector: tmdb_id
|
||||
tvdbid:
|
||||
selector: tvdb_id
|
||||
genre:
|
||||
selector: meta.genres
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["(?i)(Science Fiction)", "Science_Fiction"]
|
||||
- name: re_replace
|
||||
args: ["(?i)(TV Movie)", "TV_Movie"]
|
||||
- name: replace
|
||||
args: [" & ", "_&_"]
|
||||
_internal:
|
||||
selector: internal
|
||||
case:
|
||||
False: "{{ .False }}"
|
||||
True: "{{ .True }}"
|
||||
description:
|
||||
text: "{{ if .Result._internal }}Internal{{ else }}{{ end }}{{ if and .Result._internal .Result.genre }} | {{ else }}{{ end }}{{ .Result.genre }}"
|
||||
seeders:
|
||||
selector: seeders
|
||||
leechers:
|
||||
selector: leechers
|
||||
grabs:
|
||||
selector: times_completed
|
||||
date:
|
||||
# "created_at": "2021-10-18T00:34:50.000000Z" is returned by Newtonsoft.Json.Linq as 18/10/2021 00:34:50
|
||||
selector: created_at
|
||||
filters:
|
||||
- name: append
|
||||
args: " +00:00" # GMT
|
||||
- name: dateparse
|
||||
args: "MM/dd/yyyy HH:mm:ss zzz"
|
||||
size:
|
||||
selector: size
|
||||
_featured:
|
||||
selector: featured
|
||||
case:
|
||||
False: "{{ .False }}"
|
||||
True: "{{ .True }}"
|
||||
downloadvolumefactor_freeleech:
|
||||
selector: freeleech
|
||||
case:
|
||||
0%: 1 # not free
|
||||
5%: 0.95
|
||||
10%: 0.9
|
||||
15%: 0.85
|
||||
20%: 0.8
|
||||
25%: 0.75
|
||||
30%: 0.7
|
||||
35%: 0.65
|
||||
40%: 0.6
|
||||
45%: 0.55
|
||||
50%: 0.5
|
||||
55%: 0.45
|
||||
60%: 0.4
|
||||
65%: 0.35
|
||||
70%: 0.3
|
||||
75%: 0.25
|
||||
80%: 0.2
|
||||
85%: 0.15
|
||||
90%: 0.1
|
||||
95%: 0.05
|
||||
100%: 0 # freeleech
|
||||
"*": 0 # catch errors
|
||||
downloadvolumefactor:
|
||||
text: "{{ if .Result._featured }}0{{ else }}{{ .Result.downloadvolumefactor_freeleech }}{{ end }}"
|
||||
uploadvolumefactor_double_upload:
|
||||
# api returns False, True
|
||||
selector: double_upload
|
||||
case:
|
||||
False: 1 # normal
|
||||
True: 2 # double
|
||||
uploadvolumefactor:
|
||||
text: "{{ if .Result._featured }}2{{ else }}{{ .Result.uploadvolumefactor_double_upload }}{{ end }}"
|
||||
minimumratio:
|
||||
text: 1.0
|
||||
minimumseedtime:
|
||||
# 3 days (as seconds = 3 x 24 x 60 x 60)
|
||||
text: 259200
|
||||
# json UNIT3D 9.2.0 (custom)
|
||||
@@ -0,0 +1,119 @@
|
||||
---
|
||||
id: shadowbit
|
||||
name: Shadowbit
|
||||
description: "Shadowbit is a ratioless ROMANIAN Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
language: ro-RO
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://shadowbit.cc/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
# from https://shadowbit.cc/api/torznab?t=caps&apikey=YOUR-API-KEY
|
||||
- {id: 1000, cat: Console, desc: "Console"}
|
||||
- {id: 2000, cat: Movies, desc: "Movies"}
|
||||
- {id: 2010, cat: Movies/Foreign, desc: "Movies/Foreign"}
|
||||
- {id: 2030, cat: Movies/SD, desc: "Movies/SD"}
|
||||
- {id: 2040, cat: Movies/HD, desc: "Movies/HD"}
|
||||
- {id: 2045, cat: Movies/UHD, desc: "Movies/UHD"}
|
||||
- {id: 2050, cat: Movies/BluRay, desc: "Movies/BluRay"}
|
||||
- {id: 2060, cat: Movies/3D, desc: "Movies/3D"}
|
||||
- {id: 3000, cat: Audio, desc: "Audio"}
|
||||
- {id: 3020, cat: Audio/Video, desc: "Audio/Video"}
|
||||
- {id: 3040, cat: Audio/Lossless, desc: "Audio/Lossless"}
|
||||
- {id: 4000, cat: PC, desc: "PC"}
|
||||
- {id: 4040, cat: PC/Mobile-Other, desc: "PC/Mobile-Other"}
|
||||
- {id: 4050, cat: PC/Games, desc: "PC/Games"}
|
||||
- {id: 4060, cat: PC/ISO, desc: "PC/Linux"}
|
||||
- {id: 5000, cat: TV, desc: "TV"}
|
||||
- {id: 5020, cat: TV/Foreign, desc: "TV/Foreign"}
|
||||
- {id: 5030, cat: TV/SD, desc: "TV/SD"}
|
||||
- {id: 5040, cat: TV/HD, desc: "TV/HD"}
|
||||
- {id: 5045, cat: TV/UHD, desc: "TV/UHD"}
|
||||
- {id: 5070, cat: TV/Anime, desc: "TV/Anime"}
|
||||
- {id: 6000, cat: XXX, desc: "XXX"}
|
||||
- {id: 7000, cat: Books, desc: "Books"}
|
||||
- {id: 7020, cat: Books/EBook, desc: "Books/EBook"}
|
||||
- {id: 8000, cat: Other, desc: "Other"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q, year]
|
||||
|
||||
settings:
|
||||
- name: apikey
|
||||
type: text
|
||||
label: API Key
|
||||
- name: info_key
|
||||
type: info
|
||||
label: About your API Key
|
||||
default: "You can find your API Key by accessing the <a href=\"https://shadowbit.cc/user_settings.php\" target=\"_blank\">Shadowbit Settings</a> page and copying your <b>Passkey</b>."
|
||||
- name: info_activity
|
||||
type: info
|
||||
label: Account Inactivity
|
||||
default: "Inactive accounts will be pruned after 6 months. Use the parking feature if you need extended absence (up to 2 years)."
|
||||
|
||||
login:
|
||||
# returns "401 Unauthorized, check your credentials" if passkey is invalid
|
||||
path: api/torznab
|
||||
method: get
|
||||
inputs:
|
||||
apikey: "{{ .Config.apikey }}"
|
||||
t: caps
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: api/torznab
|
||||
response:
|
||||
type: xml
|
||||
|
||||
inputs:
|
||||
apikey: "{{ .Config.apikey }}"
|
||||
t: "{{ if .Query.Year }}movie{{ else }}{{ end }}{{ if or .Query.Season .Query.Ep }}tvsearch{{ else }}{{ end }}{{ if or .Query.Year .Query.Season .Query.Ep }}{{ else }}search{{ end }}"
|
||||
q: "{{ .Keywords }}"
|
||||
cat: "{{ join .Categories \",\" }}"
|
||||
season: "{{ .Query.Season }}"
|
||||
ep: "{{ .Query.Ep }}"
|
||||
year: "{{ .Query.Year }}"
|
||||
limit: 100
|
||||
|
||||
rows:
|
||||
selector: rss > channel > item
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: "[name=category]"
|
||||
attribute: value
|
||||
title:
|
||||
selector: title
|
||||
details:
|
||||
text: "{{ .Config.sitelink }}"
|
||||
download:
|
||||
selector: enclosure
|
||||
attribute: url
|
||||
infohash:
|
||||
selector: "[name=infohash]"
|
||||
attribute: value
|
||||
optional: true
|
||||
date:
|
||||
# Thu, 15 Jan 2026 16:24:34 +0000
|
||||
selector: pubDate
|
||||
filters:
|
||||
- name: dateparse
|
||||
args: "ddd, dd MMM yyyy HH:mm:ss zzz"
|
||||
size:
|
||||
selector: "[name=size]"
|
||||
attribute: value
|
||||
seeders:
|
||||
selector: "[name=seeders]"
|
||||
attribute: value
|
||||
leechers:
|
||||
selector: "[name=peers]"
|
||||
attribute: value
|
||||
downloadvolumefactor:
|
||||
text: 0
|
||||
uploadvolumefactor:
|
||||
text: 1
|
||||
# torznab xml
|
||||
@@ -0,0 +1,171 @@
|
||||
---
|
||||
id: siqi
|
||||
name: Siqi
|
||||
description: "Siqi is a CHINESE Private Tracker for HD image BOOKS and E-BOOKS"
|
||||
language: zh-CN
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://si-qi.xyz/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 411, cat: Books/Comics, desc: "漫画 (Comics)"}
|
||||
- {id: 417, cat: Books/Technical, desc: "软件 (Software)"}
|
||||
- {id: 416, cat: Books/EBook, desc: "摄影 (Photography)"}
|
||||
- {id: 415, cat: Books/Technical, desc: "工具书 (Reference Books)"}
|
||||
- {id: 414, cat: Books/Mags, desc: "杂志 (Magazines)"}
|
||||
- {id: 413, cat: Other, desc: "图片集 (Photo Albums)"}
|
||||
- {id: 412, cat: Books/Comics, desc: "连环画 (Comic Strips)"}
|
||||
- {id: 418, cat: Books/EBook, desc: "插图书 (Illustrated Books)"}
|
||||
- {id: 401, cat: Books/Technical, desc: "教学 (Instructional)"}
|
||||
- {id: 409, cat: Books/Other, desc: "其他 (Others)"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
book-search: [q]
|
||||
|
||||
settings:
|
||||
- name: cookie
|
||||
type: text
|
||||
label: Cookie
|
||||
- name: info_cookie
|
||||
type: info_cookie
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
default: 4
|
||||
options:
|
||||
4: created
|
||||
7: seeders
|
||||
5: size
|
||||
1: title
|
||||
- name: type
|
||||
type: select
|
||||
label: Order requested from site
|
||||
default: desc
|
||||
options:
|
||||
desc: desc
|
||||
asc: asc
|
||||
- name: info_tpp
|
||||
type: info
|
||||
label: Results Per Page
|
||||
default: For best results, change the <b>Torrents per page:</b> setting to <b>100</b> on your account profile.
|
||||
|
||||
login:
|
||||
# using cookie method because site does a JS call to API/Challenge via JQuery to load response parm required for takelogin.php
|
||||
method: cookie
|
||||
inputs:
|
||||
cookie: "{{ .Config.cookie }}"
|
||||
test:
|
||||
path: index.php
|
||||
selector: a[href="logout.php"]
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: torrents.php
|
||||
inputs:
|
||||
$raw: "{{ range .Categories }}cat{{.}}=1&{{end}}"
|
||||
search: "{{ .Keywords }}"
|
||||
# 0 incldead, 1 active, 2 dead
|
||||
incldead: 0
|
||||
# 0 all, 1 normal, 2 free, 3 2x, 4 2xfree, 5 50%, 6 2x50%, 7 30%
|
||||
spstate: "{{ if .Config.freeleech }}2{{ else }}0{{ end }}"
|
||||
# 0 title, 1 descr, 3 uploader, 4 imdburl
|
||||
search_area: 0
|
||||
# 0 AND, 2 exact
|
||||
search_mode: 0
|
||||
sort: "{{ .Config.sort }}"
|
||||
type: "{{ .Config.type }}"
|
||||
notnewword: 1
|
||||
|
||||
rows:
|
||||
selector: table.torrents > tbody > tr:has(a[href^="download.php?id="])
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: a[href^="?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
title_default:
|
||||
selector: a[href^="details.php?id="]
|
||||
title:
|
||||
selector: a[title][href^="details.php?id="]
|
||||
attribute: title
|
||||
optional: true
|
||||
default: "{{ .Result.title_default }}"
|
||||
details:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href^="download.php?id="]
|
||||
attribute: href
|
||||
poster:
|
||||
selector: img[data-src]
|
||||
attribute: data-src
|
||||
date_elapsed:
|
||||
# time type: time elapsed (default)
|
||||
selector: td.rowfollow:nth-child(4) > span[title]
|
||||
attribute: title
|
||||
optional: true
|
||||
filters:
|
||||
- name: append
|
||||
args: " +08:00" # CST
|
||||
- name: dateparse
|
||||
args: "yyyy-MM-dd HH:mm:ss zzz"
|
||||
date_added:
|
||||
# time added
|
||||
selector: td.rowfollow:nth-child(4):not(:has(span))
|
||||
optional: true
|
||||
filters:
|
||||
- name: append
|
||||
args: " +08:00" # CST
|
||||
- name: dateparse
|
||||
args: "yyyy-MM-ddHH:mm:ss zzz"
|
||||
date:
|
||||
text: "{{ if or .Result.date_elapsed .Result.date_added }}{{ or .Result.date_elapsed .Result.date_added }}{{ else }}now{{ end }}"
|
||||
size:
|
||||
selector: td.rowfollow:nth-child(5)
|
||||
optional: true
|
||||
default: 512MB
|
||||
seeders:
|
||||
selector: td.rowfollow:nth-child(6)
|
||||
optional: true
|
||||
default: 0
|
||||
leechers:
|
||||
selector: td.rowfollow:nth-child(7)
|
||||
optional: true
|
||||
default: 0
|
||||
grabs:
|
||||
selector: td.rowfollow:nth-child(8)
|
||||
optional: true
|
||||
default: 0
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img.pro_free: 0
|
||||
img.pro_free2up: 0
|
||||
img.pro_50pctdown: 0.5
|
||||
img.pro_50pctdown2up: 0.5
|
||||
img.pro_30pctdown: 0.3
|
||||
"*": 1
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
img.pro_50pctdown2up: 2
|
||||
img.pro_free2up: 2
|
||||
img.pro_2up: 2
|
||||
"*": 1
|
||||
minimumratio:
|
||||
text: 1.0
|
||||
minimumseedtime:
|
||||
# 1 days (as seconds = 1 x 24 x 60 x 60)
|
||||
text: 86400
|
||||
description:
|
||||
selector: td.rowfollow:nth-child(2)
|
||||
remove: a, b, font, img, span
|
||||
# NexusPHP v1.9.6 2025-06-25 (Custom)
|
||||
@@ -0,0 +1,141 @@
|
||||
---
|
||||
id: slobitgames
|
||||
name: Slobit Games
|
||||
description: "Slobit Games is a Private Torrent Tracker for GAMES"
|
||||
language: en-US
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://games.slo-bitcloud.eu/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 10, cat: PC/Games, desc: "Games - PC"}
|
||||
- {id: 11, cat: Console/PS3, desc: "Games - PS2"}
|
||||
- {id: 12, cat: Console/PSP, desc: "Games - PSP"}
|
||||
- {id: 43, cat: Console/PS3, desc: "Games - PS3"}
|
||||
- {id: 13, cat: Console/XBox, desc: "Games - Xbox"}
|
||||
- {id: 14, cat: Console/XBox 360, desc: "Games - Xbox360"}
|
||||
- {id: 15, cat: Console/PS3, desc: "Games - PS1"}
|
||||
- {id: 44, cat: Console/Wii, desc: "Games - Wii"}
|
||||
- {id: 45, cat: Console/NDS, desc: "Games - DS"}
|
||||
- {id: 46, cat: Console/Other, desc: "Games - GameCube"}
|
||||
- {id: 27, cat: Other, desc: "Music - Other"}
|
||||
- {id: 33, cat: PC, desc: "Other - Emulation"}
|
||||
- {id: 28, cat: Console/PS4, desc: "PS4 - PS4"}
|
||||
- {id: 47, cat: Console/PS4, desc: "PS5 - PS"}
|
||||
|
||||
modes:
|
||||
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
|
||||
- name: info_results
|
||||
type: info
|
||||
label: Search results
|
||||
default: "If you are getting <b>0 results</b> then access the site with your browser and <b>mark as read</b> all PMs."
|
||||
|
||||
login:
|
||||
path: account-login.php
|
||||
method: post
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
error:
|
||||
- selector: div.myFrame:contains("Access denied")
|
||||
message:
|
||||
text: "The specified username or password was incorrect."
|
||||
test:
|
||||
path: index.php
|
||||
selector: a[href="account-logout.php"]
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://games.slo-bitcloud.eu/torrents-search.php?c45=1&c46=1&search=&cat=0&incldead=1&freeleech=0&inclexternal=0&lang=0
|
||||
- path: torrents-search.php
|
||||
inputs:
|
||||
# $raw: "{{ range .Categories }}c{{.}}=1&{{end}}" # using this causes internal server error
|
||||
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 French, 3 German, 4 Italian, 5 Japanese, 6 Spanish, 7 Russian
|
||||
lang: 0
|
||||
sort: "{{ .Config.sort }}"
|
||||
order: "{{ .Config.type }}"
|
||||
|
||||
rows:
|
||||
selector: table.ttable_headinner > tbody > tr.t-row
|
||||
filters:
|
||||
- name: andmatch
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: a[href^="torrents.php?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
title:
|
||||
selector: a[href^="torrents-details.php?id="]
|
||||
attribute: title
|
||||
details:
|
||||
selector: a[href^="torrents-details.php?id="]
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href^="download.php?id="]
|
||||
attribute: href
|
||||
size:
|
||||
selector: td:nth-child(6)
|
||||
date:
|
||||
text: now
|
||||
seeders:
|
||||
selector: td:nth-child(7)
|
||||
leechers:
|
||||
selector: td:nth-child(8)
|
||||
description:
|
||||
selector: td:nth-child(11)
|
||||
filters:
|
||||
- name: prepend
|
||||
args: "Wait: "
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
span.badge-free: 0
|
||||
"*": 1
|
||||
uploadvolumefactor:
|
||||
text: 1
|
||||
minimumratio:
|
||||
text: 1.0
|
||||
minimumseedtime:
|
||||
# 3 days (as seconds = 3 x 24 x 60 x 60)
|
||||
text: 259200
|
||||
# TorrentTrader v3.0
|
||||
@@ -0,0 +1,146 @@
|
||||
---
|
||||
id: sportscora
|
||||
name: SportsCora (API)
|
||||
description: "SportsCora is a Private Torrent Tracker for SPORTS"
|
||||
language: en-US
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://sportscora.com/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: Movies, desc: "Movie"}
|
||||
- {id: 2, cat: TV, desc: "TV"}
|
||||
- {id: 3, cat: Audio, desc: "Music"}
|
||||
- {id: 4, cat: Console, desc: "Game"}
|
||||
- {id: 5, cat: PC, desc: "Application"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid, tvdbid, tmdbid]
|
||||
movie-search: [q, imdbid, tmdbid]
|
||||
music-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://sportscora.com/\" target=\"_blank\">SportsCora</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
|
||||
error:
|
||||
- selector: a[href*="/login"]
|
||||
message:
|
||||
text: "The API key was not accepted by {{ .Config.sitelink }}."
|
||||
- selector: :root:contains("Account is Banned")
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://hdinnovations.github.io/UNIT3D/torrent_api.html
|
||||
# https://github.com/HDInnovations/UNIT3D/blob/master/app/Http/Controllers/API/TorrentController.php#L657
|
||||
- path: api/torrents/filter
|
||||
response:
|
||||
type: json
|
||||
|
||||
headers:
|
||||
Authorization: ["Bearer {{ .Config.apikey }}"]
|
||||
|
||||
inputs:
|
||||
$raw: "{{ range .Categories }}&categories[]={{.}}{{end}}"
|
||||
name: "{{ .Keywords }}"
|
||||
imdbId: "{{ .Query.IMDBIDShort }}"
|
||||
tmdbId: "{{ .Query.TMDBID }}"
|
||||
tvdbId: "{{ .Query.TVDBID }}"
|
||||
free: "{{ if .Config.freeleech }}1{{ else }}{{ end }}"
|
||||
sortField: "{{ .Config.sort }}"
|
||||
sortDirection: "{{ .Config.type }}"
|
||||
perPage: 100
|
||||
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
args: ["\\.", " "]
|
||||
|
||||
rows:
|
||||
selector: data
|
||||
attribute: attributes
|
||||
|
||||
fields:
|
||||
_id:
|
||||
selector: ..id
|
||||
categorydesc:
|
||||
selector: category
|
||||
title:
|
||||
selector: name
|
||||
details:
|
||||
text: "{{ .Config.sitelink }}torrents/{{ .Result._id }}"
|
||||
download:
|
||||
selector: download_link
|
||||
imdbid:
|
||||
selector: imdb_id
|
||||
tmdbid:
|
||||
selector: tmdb_id
|
||||
tvdbid:
|
||||
selector: tvdb_id
|
||||
files:
|
||||
selector: num_file
|
||||
seeders:
|
||||
selector: seeders
|
||||
leechers:
|
||||
selector: leechers
|
||||
grabs:
|
||||
selector: times_completed
|
||||
date:
|
||||
# "created_at": "2021-10-18T00:34:50.000000Z" is returned by Newtonsoft.Json.Linq as 18/10/2021 00:34:50
|
||||
selector: created_at
|
||||
filters:
|
||||
- name: append
|
||||
args: " +00:00" # GMT
|
||||
- name: dateparse
|
||||
args: "MM/dd/yyyy HH:mm:ss zzz"
|
||||
size:
|
||||
selector: size
|
||||
downloadvolumefactor:
|
||||
# api returns 0=false, 1=true
|
||||
selector: freeleech
|
||||
case:
|
||||
No: 1 # not free
|
||||
Yes: 0 # freeleech
|
||||
uploadvolumefactor:
|
||||
# api returns 0=false, 1=true
|
||||
selector: double_upload
|
||||
case:
|
||||
No: 1 # normal
|
||||
Yes: 2 # double
|
||||
# global MR is 1.0 but torrents must be seeded for 1 day regardless of ratio
|
||||
# minimumratio:
|
||||
# text: 1.0
|
||||
minimumseedtime:
|
||||
# 1 day (as seconds = 24 x 60 x 60)
|
||||
text: 86400
|
||||
# json UNIT3D 4.0.0
|
||||
@@ -0,0 +1,206 @@
|
||||
---
|
||||
id: sportz247
|
||||
replaces:
|
||||
- tsdb
|
||||
- f1gp
|
||||
name: Sportz247
|
||||
description: "Sportz247 is a Private Torrent Tracker for SPORTS"
|
||||
language: en-US
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://sportz247.bar/
|
||||
legacylinks:
|
||||
- https://f1gp.site/
|
||||
- https://f1gp.xyz/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 45, cat: TV/Sport, desc: "40"}
|
||||
- {id: 11, cat: TV/Sport, desc: "F1 Races"}
|
||||
- {id: 1, cat: TV/Sport, desc: "F1 Qualifying"}
|
||||
- {id: 2, cat: TV/Sport, desc: "F1 Sprint Races"}
|
||||
- {id: 3, cat: TV/Sport, desc: "F1 Free Practice"}
|
||||
- {id: 5, cat: TV/Sport, desc: "F1 Pre Races"}
|
||||
- {id: 6, cat: TV/Sport, desc: "F1 Warm Up"}
|
||||
- {id: 4, cat: TV/Sport, desc: "F1 Documentary"}
|
||||
- {id: 7, cat: TV/Sport, desc: "F1 Oldies"}
|
||||
- {id: 8, cat: TV/Sport, desc: "F1 Press Conferences"}
|
||||
- {id: 9, cat: TV/Sport, desc: "F1 Post Races"}
|
||||
- {id: 14, cat: TV/Sport, desc: "F1 Academy"}
|
||||
- {id: 15, cat: TV/Sport, desc: "F1 Movies"}
|
||||
- {id: 16, cat: TV/Sport, desc: "F1 Series"}
|
||||
- {id: 17, cat: TV/Sport, desc: "F2 Championship"}
|
||||
- {id: 18, cat: TV/Sport, desc: "F3 Championship"}
|
||||
- {id: 19, cat: TV/Sport, desc: "FE Championship"}
|
||||
- {id: 21, cat: TV/Sport, desc: "UFC"}
|
||||
- {id: 22, cat: TV/Sport, desc: "MotoGP"}
|
||||
- {id: 23, cat: TV/Sport, desc: "Boxing"}
|
||||
- {id: 24, cat: Other, desc: "Magazines - Books"}
|
||||
- {id: 26, cat: TV/Sport, desc: "Tennis"}
|
||||
- {id: 27, cat: TV/Sport, desc: "World Cup 2026"}
|
||||
- {id: 28, cat: TV/Sport, desc: "NBA"}
|
||||
- {id: 29, cat: TV/Sport, desc: "Indy 500"}
|
||||
- {id: 30, cat: TV/Sport, desc: "Football/Soccer"}
|
||||
- {id: 33, cat: TV/Sport, desc: "WRC/Rally"}
|
||||
- {id: 34, cat: TV/Sport, desc: "BTCC"}
|
||||
- {id: 35, cat: TV/Sport, desc: "Isle of Man TT"}
|
||||
- {id: 36, cat: TV/Sport, desc: "Surfing"}
|
||||
- {id: 37, cat: TV/Sport, desc: "Porsche Mobil 1 Supercup"}
|
||||
- {id: 38, cat: TV/Sport, desc: "Skateboarding"}
|
||||
- {id: 39, cat: TV/Sport, desc: "Baseball-MLB"}
|
||||
- {id: 40, cat: TV/Sport, desc: "WEC"}
|
||||
- {id: 41, cat: TV/Sport, desc: "FIM Speedway Gp"}
|
||||
- {id: 42, cat: TV/Sport, desc: "FIM MXGP"}
|
||||
- {id: 43, cat: TV/Sport, desc: "Supercars"}
|
||||
- {id: 44, cat: TV/Sport, desc: "WSBK"}
|
||||
- {id: 46, cat: TV/Sport, desc: "NHRA"}
|
||||
- {id: 47, cat: TV/Sport, desc: "F1H2O"}
|
||||
- {id: 48, cat: TV/Sport, desc: "F1 Complete Packs"}
|
||||
- {id: 49, cat: TV/Sport, desc: "GAA"}
|
||||
- {id: 51, cat: TV/Sport, desc: "IndyNXT"}
|
||||
- {id: 52, cat: TV/Sport, desc: "Snooker/Pool"}
|
||||
- {id: 53, cat: TV/Sport, desc: "Horse Racing"}
|
||||
- {id: 54, cat: TV/Sport, desc: "Goodwood Festival"}
|
||||
- {id: 55, cat: TV/Sport, desc: "Motorsports Special Events"}
|
||||
- {id: 56, cat: TV/Sport, desc: "FIM World Supercross"}
|
||||
- {id: 57, cat: TV/Sport, desc: "Deutsche Tourenwagen Masters"}
|
||||
- {id: 58, cat: TV/Sport, desc: "Athletics"}
|
||||
- {id: 59, cat: TV/Sport, desc: "Cycling"}
|
||||
- {id: 60, cat: TV/Sport, desc: "Golf"}
|
||||
- {id: 61, cat: TV/Sport, desc: "IMSA"}
|
||||
- {id: 62, cat: TV/Sport, desc: "NASCAR Craftsman Truck Series"}
|
||||
- {id: 65, cat: TV/Sport, desc: "Nascar ARCA Menards Series"}
|
||||
- {id: 25, cat: TV/Sport, desc: "NASCAR Cup Series"}
|
||||
- {id: 66, cat: TV/Sport, desc: "NASCAR O'Reilly Auto Parts"}
|
||||
- {id: 64, cat: TV/Sport, desc: "IROC"}
|
||||
- {id: 67, cat: TV/Sport, desc: "Sports TV Shows"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
|
||||
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: 3
|
||||
options:
|
||||
3: created
|
||||
5: seeders
|
||||
4: size
|
||||
2: title
|
||||
- name: type
|
||||
type: select
|
||||
label: Order requested from site
|
||||
default: 2
|
||||
options:
|
||||
2: desc
|
||||
1: asc
|
||||
- name: info
|
||||
type: info
|
||||
label: Results Per Page
|
||||
default: For best results, change the <b>Torrents per page:</b> setting to <b>100</b> on your account profile. Default is <i>20</i>.
|
||||
|
||||
login:
|
||||
path: index.php?page=login
|
||||
method: post
|
||||
inputs:
|
||||
uid: "{{ .Config.username }}"
|
||||
pwd: "{{ .Config.password }}"
|
||||
error:
|
||||
- selector: tr td span[style="color:#FF0000;"]
|
||||
test:
|
||||
path: index.php
|
||||
selector: a[href^="logout.php"]
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://f1gp.xyz/index.php?page=torrents&search=&category=0&active=0
|
||||
- path: index.php
|
||||
inputs:
|
||||
page: torrents
|
||||
search: "{{ .Keywords }}"
|
||||
category: "{{ range .Categories }}{{.}};{{end}}"
|
||||
# 0 filename, 1 file&descr, 2 descr, 3 uploaders, 5 gold, 6 silver, 7 bronze
|
||||
options: "{{ if .Config.freeleech }}5{{ else }}0{{ end }}"
|
||||
# 0 all, 1 active only, 2 dead only
|
||||
active: 0
|
||||
order: "{{ .Config.sort }}"
|
||||
by: "{{ .Config.type }}"
|
||||
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
args: ["\\.", " "]
|
||||
|
||||
rows:
|
||||
selector: table.lista > tbody > tr:has(a[href^="download.php?id="])
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: a[href^="index.php?page=torrents&category="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: category
|
||||
title:
|
||||
selector: a[href^="index.php?page=torrent-details&id="]
|
||||
details:
|
||||
selector: a[href^="index.php?page=torrent-details&id="]
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href^="download.php?id="]
|
||||
attribute: href
|
||||
poster:
|
||||
selector: a[href^="index.php?page=torrent-details&id="]
|
||||
attribute: onmouseover
|
||||
filters:
|
||||
- name: regexp
|
||||
args: src=(.+?) width
|
||||
- name: replace
|
||||
args: ["torrentimg/nocover.jpg", ""]
|
||||
size:
|
||||
selector: td:nth-last-child(4)
|
||||
date:
|
||||
# auto adjusted by site account profile
|
||||
selector: td:nth-last-child(9)
|
||||
filters:
|
||||
- name: dateparse
|
||||
args: "dd/MM/yyyy"
|
||||
seeders:
|
||||
selector: td:nth-last-child(8)
|
||||
optional: true
|
||||
default: 0
|
||||
leechers:
|
||||
optional: true
|
||||
selector: td:nth-last-child(7)
|
||||
default: 0
|
||||
grabs:
|
||||
optional: true
|
||||
selector: td:nth-last-child(6)
|
||||
default: 0
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img[src="images/freeleech.gif"]: 0
|
||||
img[src="images/gold.gif"]: 0
|
||||
img[src="images/silver.gif"]: 0.5
|
||||
img[src="images/bronze.gif"]: 0.75
|
||||
"*": 1
|
||||
uploadvolumefactor:
|
||||
text: 1
|
||||
minimumratio:
|
||||
text: 1.4
|
||||
minimumseedtime:
|
||||
# 5 days (as seconds = 5 x 24 x 60 x 60)
|
||||
text: 432000
|
||||
# xbtitFM v4.2.13
|
||||
@@ -0,0 +1,243 @@
|
||||
---
|
||||
id: teamflix
|
||||
name: TeamFlix
|
||||
description: "TeamFlix is a FRENCH Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
language: fr-FR
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://tracker.teamflix.cc/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 7, cat: Movies/Other, desc: "Animes"}
|
||||
- {id: 8, cat: TV/Anime, desc: "AnimeSeries"}
|
||||
- {id: 14, cat: TV/Other, desc: "Animation"}
|
||||
- {id: 12, cat: Audio/Video, desc: "Concerts"}
|
||||
- {id: 10, cat: TV/Documentary, desc: "Documentaires"}
|
||||
- {id: 9, cat: TV, desc: "EmissionsTV"}
|
||||
- {id: 1, cat: Movies, desc: "Films"}
|
||||
- {id: 11, cat: TV, desc: "Spectacles"}
|
||||
- {id: 2, cat: TV, desc: "SeriesTV"}
|
||||
- {id: 13, cat: Books, desc: "Ebook"}
|
||||
- {id: 4, cat: Console, desc: "Jeux Console"}
|
||||
- {id: 3, cat: PC/Games, desc: "JeuxPC"}
|
||||
- {id: 5, cat: PC/0day, desc: "Logiciels"}
|
||||
- {id: 6, cat: Audio, desc: "Musique"}
|
||||
- {id: 15, cat: Console/Other, desc: "Emulateur"}
|
||||
- {id: 16, cat: TV/Sport, desc: "Sports"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid, tvdbid, tmdbid]
|
||||
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://tracker.teamflix.cc/\" target=\"_blank\">TeamFlix</a> account <i>My Settings</i> page and clicking on the <b>API Key</b> tab."
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: single_file_release_use_filename
|
||||
type: checkbox
|
||||
label: Use filename as title for single file releases
|
||||
default: true
|
||||
- name: multilang
|
||||
type: checkbox
|
||||
label: Replace MULTi by another language in release name
|
||||
default: false
|
||||
- name: multilanguage
|
||||
type: select
|
||||
label: Replace MULTi by this language
|
||||
default: FRENCH
|
||||
options:
|
||||
FRENCH: FRENCH
|
||||
MULTi FRENCH: MULTi FRENCH
|
||||
ENGLISH: ENGLISH
|
||||
MULTi ENGLISH: MULTi ENGLISH
|
||||
VOSTFR: VOSTFR
|
||||
MULTi VOSTFR: MULTi VOSTFR
|
||||
- name: vostfr
|
||||
type: checkbox
|
||||
label: Replace VOSTFR and SUBFRENCH with ENGLISH
|
||||
default: false
|
||||
- name: vfq
|
||||
type: checkbox
|
||||
label: Replace VFQ with FRENCH
|
||||
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
|
||||
- name: info_activity
|
||||
type: info
|
||||
label: Account Inactivity
|
||||
default: "Inactivity of an account for a period of 30 consecutive days will automatically deactivate your account."
|
||||
|
||||
login:
|
||||
path: api/torrents
|
||||
method: get
|
||||
error:
|
||||
- selector: a[href*="/login"]
|
||||
message:
|
||||
text: "The API key was not accepted by {{ .Config.sitelink }}."
|
||||
- selector: :root:contains("Account is Banned")
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://hdinnovations.github.io/UNIT3D/torrent_api.html
|
||||
# https://github.com/HDInnovations/UNIT3D/blob/master/app/Http/Controllers/API/TorrentController.php#L657
|
||||
- path: api/torrents/filter
|
||||
response:
|
||||
type: json
|
||||
|
||||
headers:
|
||||
Authorization: ["Bearer {{ .Config.apikey }}"]
|
||||
|
||||
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
|
||||
$raw: "{{ range .Categories }}&categories[]={{.}}{{end}}"
|
||||
name: "{{ .Keywords }}"
|
||||
seasonNumber: "{{ .Query.Season }}"
|
||||
episodeNumber: "{{ .Query.Ep }}"
|
||||
imdbId: "{{ .Query.IMDBIDShort }}"
|
||||
tmdbId: "{{ .Query.TMDBID }}"
|
||||
tvdbId: "{{ .Query.TVDBID }}"
|
||||
"free[]": "{{ if .Config.freeleech }}100{{ else }}{{ end }}"
|
||||
sortField: "{{ .Config.sort }}"
|
||||
sortDirection: "{{ .Config.type }}"
|
||||
perPage: 100
|
||||
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
args: ["\\.", " "]
|
||||
|
||||
rows:
|
||||
selector: data
|
||||
attribute: attributes
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: category_id
|
||||
title_optional:
|
||||
selector: name
|
||||
title_filename:
|
||||
selector: "files[0].name"
|
||||
optional: true
|
||||
files:
|
||||
selector: num_file
|
||||
title_phase1:
|
||||
text: "{{ if and (.Config.single_file_release_use_filename) (eq .Result.files \"1\") (.Result.title_filename) }}{{ .Result.title_filename }}{{ else }}{{ .Result.title_optional }}{{ end }}"
|
||||
title_vfq:
|
||||
text: "{{ .Result.title_phase1 }}"
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["(?i)\\b(VFQ)\\b", "FRENCH"]
|
||||
title_phase2:
|
||||
text: "{{ if .Config.vfq }}{{ .Result.title_vfq }}{{ else }}{{ .Result.title_phase1 }}{{ end }}"
|
||||
title_vostfr:
|
||||
text: "{{ .Result.title_phase2 }}"
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["(?i)\\b(vostfr|subfrench)\\b", "ENGLISH"]
|
||||
title_phase3:
|
||||
text: "{{ if .Config.vostfr }}{{ .Result.title_vostfr }}{{ else }}{{ .Result.title_phase2 }}{{ end }}"
|
||||
title_multilang:
|
||||
text: "{{ .Result.title_phase3 }}"
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["(?i)\\b(MULTI(?!.*(?:FRENCH|ENGLISH|VOSTFR)))\\b", "{{ .Config.multilanguage }}"]
|
||||
title:
|
||||
text: "{{ if .Config.multilang }}{{ .Result.title_multilang }}{{ else }}{{ .Result.title_phase3 }}{{ end }}"
|
||||
details:
|
||||
selector: details_link
|
||||
download:
|
||||
selector: download_link
|
||||
poster:
|
||||
selector: meta.poster
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["https://via.placeholder.com/90x135", ""]
|
||||
imdbid:
|
||||
selector: imdb_id
|
||||
tmdbid:
|
||||
selector: tmdb_id
|
||||
tvdbid:
|
||||
selector: tvdb_id
|
||||
genre:
|
||||
selector: meta.genres
|
||||
filters:
|
||||
- name: replace
|
||||
args: [" & ", "_&_"]
|
||||
_internal:
|
||||
selector: internal
|
||||
case:
|
||||
False: "{{ .False }}"
|
||||
True: "{{ .True }}"
|
||||
description:
|
||||
text: "{{ if .Result._internal }}Internal{{ else }}{{ end }}{{ if and .Result._internal .Result.genre }} | {{ else }}{{ end }}{{ .Result.genre }}"
|
||||
seeders:
|
||||
selector: seeders
|
||||
leechers:
|
||||
selector: leechers
|
||||
grabs:
|
||||
selector: times_completed
|
||||
date:
|
||||
# "created_at": "2021-10-18T00:34:50.000000Z" is returned by Newtonsoft.Json.Linq as 18/10/2021 00:34:50
|
||||
selector: created_at
|
||||
filters:
|
||||
- name: append
|
||||
args: " +00:00" # GMT
|
||||
- name: dateparse
|
||||
args: "MM/dd/yyyy HH:mm:ss zzz"
|
||||
size:
|
||||
selector: size
|
||||
_featured:
|
||||
selector: featured
|
||||
case:
|
||||
False: "{{ .False }}"
|
||||
True: "{{ .True }}"
|
||||
downloadvolumefactor_freeleech:
|
||||
# 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
|
||||
downloadvolumefactor:
|
||||
text: "{{ if .Result._featured }}0{{ else }}{{ .Result.downloadvolumefactor_freeleech }}{{ end }}"
|
||||
uploadvolumefactor_double_upload:
|
||||
# api returns False, True
|
||||
selector: double_upload
|
||||
case:
|
||||
False: 1 # normal
|
||||
True: 2 # double
|
||||
uploadvolumefactor:
|
||||
text: "{{ if .Result._featured }}2{{ else }}{{ .Result.uploadvolumefactor_double_upload }}{{ end }}"
|
||||
minimumseedtime:
|
||||
# 100 hours (as seconds = 100 x 60 x 60)
|
||||
text: 360000
|
||||
# json UNIT3D 9.2.0
|
||||
@@ -0,0 +1,231 @@
|
||||
---
|
||||
id: thebrothers
|
||||
name: The Brothers
|
||||
description: "The Brothers is a Private GERMAN tracker for MOVIES / TV / GENERAL"
|
||||
language: de-DE
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://leo-test.store/
|
||||
legacylinks:
|
||||
- https://the-brothers.bounceme.net/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
# Doku
|
||||
- {id: 221, cat: TV/Documentary, desc: "Doku HD"}
|
||||
# Movie
|
||||
- {id: 217, cat: Movies/BluRay, desc: "Movie BluRay"}
|
||||
- {id: 32, cat: Movies/HD, desc: "Movie HD"}
|
||||
- {id: 208, cat: Movies/UHD, desc: "Movie 4 K"}
|
||||
- {id: 124, cat: Movies, desc: "Movie Pack"}
|
||||
- {id: 114, cat: Movies/DVD, desc: "Movie DVD"}
|
||||
- {id: 196, cat: Movies/UHD, desc: "Movie UHD"}
|
||||
- {id: 28, cat: Movies/SD, desc: "Movie SD"}
|
||||
- {id: 204, cat: Movies/UHD, desc: "Movie UHD Pack"}
|
||||
- {id: 26, cat: Movies/3D, desc: "Movie 3D"}
|
||||
# Anime
|
||||
- {id: 213, cat: TV/Anime, desc: "Anime Pack HD"}
|
||||
- {id: 212, cat: TV/Anime, desc: "Anime Serie HD"}
|
||||
- {id: 214, cat: TV/Anime, desc: "Anime UHD"}
|
||||
- {id: 183, cat: TV/Anime, desc: "Anime HD"}
|
||||
- {id: 189, cat: TV/Anime, desc: "Anime Serie"}
|
||||
- {id: 184, cat: TV/Anime, desc: "Anime SD"}
|
||||
- {id: 186, cat: TV/Anime, desc: "Anime 4K"}
|
||||
# Serien
|
||||
- {id: 60, cat: TV/SD, desc: "Serien SD"}
|
||||
- {id: 56, cat: TV/SD, desc: "Serien DVD"}
|
||||
- {id: 215, cat: TV/UHD, desc: "Serien UHD"}
|
||||
- {id: 59, cat: TV, desc: "Serien Pack"}
|
||||
- {id: 203, cat: TV/UHD, desc: "Serien UHD Pack"}
|
||||
- {id: 57, cat: TV/HD, desc: "Serien HD"}
|
||||
# Kids
|
||||
- {id: 222, cat: Movies/HD, desc: "Kids HD"}
|
||||
# Klassiker
|
||||
- {id: 157, cat: Movies/HD, desc: "Klassiker HD"}
|
||||
# App
|
||||
- {id: 12, cat: PC/0day, desc: "App Win"}
|
||||
- {id: 9, cat: PC, desc: "App Linux"}
|
||||
- {id: 11, cat: PC/Mobile-Other, desc: "App Other"}
|
||||
- {id: 10, cat: PC, desc: "App Sport"}
|
||||
# Game
|
||||
- {id: 218, cat: Console/Other, desc: "Game Nintendo Switch"}
|
||||
- {id: 120, cat: Console/PS3, desc: "Game PlayStation"}
|
||||
- {id: 16, cat: Console, desc: "Game Wimmelbild"}
|
||||
- {id: 17, cat: PC/Games, desc: "Game PC"}
|
||||
- {id: 20, cat: Console/PSP, desc: "Game PSP"}
|
||||
- {id: 22, cat: Console/Wii, desc: "Game Wii"}
|
||||
- {id: 24, cat: Console/XBox, desc: "Game XBOX"}
|
||||
# Music
|
||||
- {id: 126, cat: Audio, desc: "Music Mp3/Flac"}
|
||||
- {id: 48, cat: Audio, desc: "Music Album"}
|
||||
- {id: 49, cat: Audio, desc: "Music Charts"}
|
||||
- {id: 148, cat: Audio, desc: "Music Discography"}
|
||||
- {id: 52, cat: Audio, desc: "Music Pack"}
|
||||
- {id: 54, cat: Audio, desc: "Music Single"}
|
||||
- {id: 55, cat: Audio/Video, desc: "Music Video"}
|
||||
- {id: 125, cat: Audio, desc: "Music Mixe"}
|
||||
# Sport
|
||||
- {id: 130, cat: TV/Sport, desc: "Sport WWE"}
|
||||
- {id: 61, cat: TV/Sport, desc: "Sport Other"}
|
||||
# Sonstiges
|
||||
- {id: 216, cat: Books/Comics, desc: "Sonstiges Comic"}
|
||||
- {id: 144, cat: TV/Documentary, desc: "Sonstiges Doku"}
|
||||
- {id: 131, cat: Books/Mags, desc: "Sonstiges Zeitungen"}
|
||||
- {id: 63, cat: Audio/Audiobook, desc: "Sonstiges A-Book"}
|
||||
- {id: 96, cat: Books/EBook, desc: "Sonstiges E-Book"}
|
||||
- {id: 69, cat: Books, desc: "Sonstiges Tutorial"}
|
||||
- {id: 71, cat: Books/Other, desc: "Sonstiges Other"}
|
||||
# Internt'l
|
||||
- {id: 106, cat: Books/EBook, desc: "Internt'l E-Book"}
|
||||
- {id: 103, cat: Movies/SD, desc: "Internt'l Movie SD"}
|
||||
- {id: 98, cat: Movies/HD, desc: "Internt'l Movie HD"}
|
||||
- {id: 105, cat: TV/Documentary, desc: "Internt'l Doku"}
|
||||
- {id: 102, cat: TV/SD, desc: "Internt'l Serie SD"}
|
||||
- {id: 115, cat: Movies/DVD, desc: "Internt'l DVD"}
|
||||
- {id: 107, cat: Audio/Audiobook, desc: "Internt'l A-Book"}
|
||||
- {id: 104, cat: Other, desc: "Internt'l Misc"}
|
||||
- {id: 99, cat: TV/HD, desc: "Internt'l Serie HD"}
|
||||
# XXX
|
||||
- {id: 75, cat: XXX/Pack, desc: "XXX Pack"}
|
||||
- {id: 113, cat: XXX/DVD, desc: "XXX DVD"}
|
||||
- {id: 73, cat: XXX/x264, desc: "XXX HD"}
|
||||
- {id: 76, cat: XXX/SD, desc: "XXX SD"}
|
||||
# undocumented
|
||||
- {id: 159, cat: Other, desc: "Other"}
|
||||
|
||||
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: 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
|
||||
- name: info_tpp
|
||||
type: info
|
||||
label: Results Per Page
|
||||
default: For best results, change the <b>Anzahl der Torrents beim Durchsuchen</b> <i>Torrents per page:</i> setting to <b>60</b> on your account profile. The default is <i>15</i>.
|
||||
|
||||
login:
|
||||
path: login.php
|
||||
method: form
|
||||
form: form[action="/login.php"]
|
||||
cookies: ["JAVA=OK"] # avoid jscheck redirect
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
error:
|
||||
- selector: div#login_error
|
||||
test:
|
||||
path: index.php
|
||||
selector: a[href="logout.php"]
|
||||
|
||||
download:
|
||||
selectors:
|
||||
- selector: a[href^="download_ssl.php?torrent="]
|
||||
attribute: href
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: selection.php
|
||||
inputs:
|
||||
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
|
||||
search: "{{ .Keywords }}"
|
||||
# 0 name, 1 descr, 2 both
|
||||
blah: 0
|
||||
orderby: "{{ .Config.sort }}"
|
||||
sort: "{{ .Config.type }}"
|
||||
|
||||
rows:
|
||||
selector: div.selection_wrap
|
||||
|
||||
fields:
|
||||
category_p1:
|
||||
selector: div.kat_cat_pic_name
|
||||
category_p2:
|
||||
selector: div.kat_cat_pic_name_b
|
||||
categorydesc:
|
||||
text: "{{ .Result.category_p1 }} {{ .Result.category_p2 }}"
|
||||
title:
|
||||
selector: a.selection_a
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["^\\[[\\w ]*\\]\\s?", ""]
|
||||
details:
|
||||
selector: a.selection_a
|
||||
attribute: href
|
||||
download:
|
||||
selector: a.selection_a
|
||||
attribute: href
|
||||
poster:
|
||||
selector: div[id^="details"] img
|
||||
attribute: src
|
||||
size:
|
||||
selector: div.selection_unter_ad
|
||||
grabs:
|
||||
selector: div.selection_unter_ae
|
||||
date_day:
|
||||
# Heute 13:30:04
|
||||
# Gestern 09:10:10
|
||||
selector: div.selection_unter_ab:not(:contains("."))
|
||||
optional: true
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["Heute", "Today"]
|
||||
- name: replace
|
||||
args: ["Gestern", "Yesterday"]
|
||||
- name: append
|
||||
args: " +01:00" # CET
|
||||
date_year:
|
||||
# 30.02.2018 um 23:12:50
|
||||
selector: div.selection_unter_ab:contains(".")
|
||||
optional: true
|
||||
filters:
|
||||
- name: replace
|
||||
args: [" um", ""]
|
||||
- name: append
|
||||
args: " +01:00" # CET
|
||||
- name: dateparse
|
||||
args: "dd.MM.yyyy HH:mm:ss zzz"
|
||||
date:
|
||||
text: "{{ if or .Result.date_year .Result.date_day }}{{ or .Result.date_year .Result.date_day }}{{ else }}now{{ end }}"
|
||||
seeders:
|
||||
selector: div.selection_unter_aa
|
||||
leechers:
|
||||
selector: div.selection_unter_aaa
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
":root:has(div.onlyup)": 0 # GLobal Freeleech event
|
||||
"*": 1
|
||||
uploadvolumefactor:
|
||||
text: 1
|
||||
# global MR is 0.7 but torrents must be seeded for 2 days regardless of ratio
|
||||
# minimumratio:
|
||||
# text: 0.7
|
||||
minimumseedtime:
|
||||
# 2 days (as seconds = 2 x 24 x 60 x 60)
|
||||
text: 172800
|
||||
# 3xT
|
||||
@@ -0,0 +1,193 @@
|
||||
---
|
||||
id: thorhub-api
|
||||
name: Thor HUB (API)
|
||||
description: "Thor HUB is a Private Torrent Tracker for MOVIES / TV / MUSIC"
|
||||
language: en-US
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://thorhub.eu/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 4, cat: Console, desc: "Games"}
|
||||
- {id: 1, cat: Movies, desc: "Movies"}
|
||||
- {id: 3, cat: Audio/Lossless, desc: "Music (Lossless Only)"}
|
||||
- {id: 2, cat: TV, desc: "TV"}
|
||||
- {id: 10, cat: XXX, desc: "xXx (Video (Compilations))"}
|
||||
- {id: 5, cat: Movies, desc: "Trumped (Movies)"}
|
||||
- {id: 7, cat: TV, desc: "Trumped (Series)"}
|
||||
- {id: 8, cat: Other, desc: "Trumped (everything else)"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid, tvdbid, tmdbid]
|
||||
movie-search: [q, imdbid, tmdbid]
|
||||
music-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://thorhub.eu/\" target=\"_blank\">Thor HUB</a> account <i>My Settings</i> page and clicking on the <b>API Key</b> tab."
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: single_file_release_use_filename
|
||||
type: checkbox
|
||||
label: Use filename as title for single file releases
|
||||
default: true
|
||||
- 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
|
||||
error:
|
||||
- selector: a[href*="/login"]
|
||||
message:
|
||||
text: "The API key was not accepted by {{ .Config.sitelink }}."
|
||||
- selector: :root:contains("Account is Banned")
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://hdinnovations.github.io/UNIT3D/torrent_api.html
|
||||
# https://github.com/HDInnovations/UNIT3D/blob/master/app/Http/Controllers/API/TorrentController.php#L657
|
||||
- path: api/torrents/filter
|
||||
response:
|
||||
type: json
|
||||
|
||||
headers:
|
||||
Authorization: ["Bearer {{ .Config.apikey }}"]
|
||||
|
||||
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
|
||||
$raw: "{{ range .Categories }}&categories[]={{.}}{{end}}"
|
||||
name: "{{ .Keywords }}"
|
||||
seasonNumber: "{{ .Query.Season }}"
|
||||
episodeNumber: "{{ .Query.Ep }}"
|
||||
imdbId: "{{ .Query.IMDBIDShort }}"
|
||||
tmdbId: "{{ .Query.TMDBID }}"
|
||||
tvdbId: "{{ .Query.TVDBID }}"
|
||||
"free[]": "{{ if .Config.freeleech }}100{{ else }}{{ end }}"
|
||||
sortField: "{{ .Config.sort }}"
|
||||
sortDirection: "{{ .Config.type }}"
|
||||
perPage: 100
|
||||
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
args: ["\\.", " "]
|
||||
|
||||
rows:
|
||||
selector: data
|
||||
attribute: attributes
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: category_id
|
||||
title_optional:
|
||||
selector: name
|
||||
title_filename:
|
||||
selector: "files[0].name"
|
||||
optional: true
|
||||
files:
|
||||
selector: num_file
|
||||
title:
|
||||
text: "{{ if and (.Config.single_file_release_use_filename) (eq .Result.files \"1\") (.Result.title_filename) }}{{ .Result.title_filename }}{{ else }}{{ .Result.title_optional }}{{ end }}"
|
||||
details:
|
||||
selector: details_link
|
||||
download:
|
||||
selector: download_link
|
||||
poster:
|
||||
selector: meta.poster
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["https://via.placeholder.com/90x135", ""]
|
||||
imdbid:
|
||||
selector: imdb_id
|
||||
tmdbid:
|
||||
selector: tmdb_id
|
||||
tvdbid:
|
||||
selector: tvdb_id
|
||||
genre:
|
||||
selector: meta.genres
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["(?i)(Science Fiction)", "Science_Fiction"]
|
||||
- name: re_replace
|
||||
args: ["(?i)(TV Movie)", "TV_Movie"]
|
||||
- name: replace
|
||||
args: [" & ", "_&_"]
|
||||
_internal:
|
||||
selector: internal
|
||||
case:
|
||||
False: "{{ .False }}"
|
||||
True: "{{ .True }}"
|
||||
description:
|
||||
text: "{{ if .Result._internal }}Internal{{ else }}{{ end }}{{ if and .Result._internal .Result.genre }} | {{ else }}{{ end }}{{ .Result.genre }}"
|
||||
seeders:
|
||||
selector: seeders
|
||||
leechers:
|
||||
selector: leechers
|
||||
grabs:
|
||||
selector: times_completed
|
||||
date:
|
||||
# "created_at": "2021-10-18T00:34:50.000000Z" is returned by Newtonsoft.Json.Linq as 18/10/2021 00:34:50
|
||||
selector: created_at
|
||||
filters:
|
||||
- name: append
|
||||
args: " +00:00" # GMT
|
||||
- name: dateparse
|
||||
args: "MM/dd/yyyy HH:mm:ss zzz"
|
||||
size:
|
||||
selector: size
|
||||
_featured:
|
||||
selector: featured
|
||||
case:
|
||||
False: "{{ .False }}"
|
||||
True: "{{ .True }}"
|
||||
downloadvolumefactor_freeleech:
|
||||
# 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
|
||||
downloadvolumefactor:
|
||||
text: "{{ if .Result._featured }}0{{ else }}{{ .Result.downloadvolumefactor_freeleech }}{{ end }}"
|
||||
uploadvolumefactor_double_upload:
|
||||
# api returns False, True
|
||||
selector: double_upload
|
||||
case:
|
||||
False: 1 # normal
|
||||
True: 2 # double
|
||||
uploadvolumefactor:
|
||||
text: "{{ if .Result._featured }}2{{ else }}{{ .Result.uploadvolumefactor_double_upload }}{{ end }}"
|
||||
# global MR is 0.4 but torrents must be seeded for 7 days regardless of ratio
|
||||
# minimumratio:
|
||||
# text: 0.4
|
||||
minimumseedtime:
|
||||
# 7 days (as seconds = 7 x 24 x 60 x 60)
|
||||
text: 604800
|
||||
# json UNIT3D 9.2.0
|
||||
@@ -0,0 +1,78 @@
|
||||
---
|
||||
id: torrentbyte
|
||||
name: TorrentByte
|
||||
description: "TorrentByte is a Public DHT Crawler"
|
||||
language: en-US
|
||||
type: public
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://torrentbyte.cc/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: Movies, cat: Movies, desc: "Movies"}
|
||||
- {id: TV, cat: TV, desc: "TV"}
|
||||
- {id: Games, cat: PC/Games, desc: "Games"}
|
||||
- {id: Anime, cat: TV/Anime, desc: "Anime"}
|
||||
- {id: Music, cat: Audio, desc: "Music"}
|
||||
- {id: Software, cat: PC/0day, desc: "Software"}
|
||||
- {id: XXX, cat: XXX, desc: "XXX"}
|
||||
- {id: Other, cat: Other, desc: "Other"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
music-search: [q]
|
||||
|
||||
settings:
|
||||
- name: info_flaresolverr
|
||||
type: info_flaresolverr
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: /
|
||||
inputs:
|
||||
q: "{{ .Keywords }}"
|
||||
|
||||
rows:
|
||||
selector: table > tbody > tr
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: td:nth-child(2)
|
||||
title:
|
||||
selector: td:nth-child(1)
|
||||
attribute: title
|
||||
details:
|
||||
selector: a[href^="?view="]
|
||||
attribute: href
|
||||
infohash:
|
||||
selector: a[href^="magnet:?xt="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: regexp
|
||||
args: "btih:([A-F|a-f|0-9]{40})"
|
||||
size:
|
||||
selector: td:nth-child(3)
|
||||
files:
|
||||
selector: td:nth-child(4)
|
||||
date:
|
||||
selector: td:nth-child(5)
|
||||
filters:
|
||||
- name: append
|
||||
args: " +02:00" # CEST
|
||||
- name: dateparse
|
||||
args: "yyyy-MM-dd HH:mm:ss zzz"
|
||||
seeders:
|
||||
text: 1
|
||||
leechers:
|
||||
text: 1
|
||||
downloadvolumefactor:
|
||||
text: 0
|
||||
uploadvolumefactor:
|
||||
text: 1
|
||||
description:
|
||||
selector: td:nth-child(6)
|
||||
remove: a
|
||||
# engine n/a
|
||||
@@ -0,0 +1,110 @@
|
||||
---
|
||||
id: torrentclaw
|
||||
name: TorrentClaw
|
||||
description: "TorrentClaw is a Private aggregate indexer of 10+ Public Torrent Trackers, with additional 'TrueSpec' metadata and quality score"
|
||||
language: en-US
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://torrentclaw.com/
|
||||
- https://torrentclaw.to/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 2000, cat: Movies, desc: "Movies"}
|
||||
- {id: 2030, cat: Movies/SD, desc: "Movies/SD"}
|
||||
- {id: 2040, cat: Movies/HD, desc: "Movies/HD"}
|
||||
- {id: 2045, cat: Movies/UHD, desc: "Movies/UHD"}
|
||||
- {id: 5000, cat: TV, desc: "TV"}
|
||||
- {id: 5030, cat: TV/SD, desc: "TV/SD"}
|
||||
- {id: 5040, cat: TV/HD, desc: "TV/HD"}
|
||||
- {id: 5045, cat: TV/UHD, desc: "TV/UHD"}
|
||||
- {id: 5070, cat: TV/Anime, desc: "TV/Anime"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid]
|
||||
movie-search: [q, tmdbid]
|
||||
|
||||
settings:
|
||||
- name: apikey
|
||||
type: text
|
||||
label: API Key
|
||||
- name: info_key
|
||||
type: info
|
||||
label: About your API key
|
||||
default: "You can find your API Key by accessing the <a href=\"https://torrentclaw.com/profile?tab=apikey\" target=\"_blank\">TorrentClaw API Key</a> page."
|
||||
- name: info_truespec
|
||||
type: info
|
||||
label: "TrueSpec verification tags"
|
||||
default: "Verified releases include <b>[TC-xx]</b> (quality score 0-100) and <b>[TrueSpec]</b> tags in the title. These can be used for Sonarr and Radarr custom formats."
|
||||
|
||||
login:
|
||||
# returns "401 Unauthorized, check your credentials" if passkey is invalid
|
||||
path: api/v1/torznab
|
||||
method: get
|
||||
inputs:
|
||||
t: search
|
||||
limit: 1
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: api/v1/torznab
|
||||
method: get
|
||||
response:
|
||||
type: xml
|
||||
|
||||
headers:
|
||||
Authorization: ["Bearer {{ .Config.apikey }}"]
|
||||
|
||||
inputs:
|
||||
t: "{{ if .Query.TMDBID }}movie{{ else }}{{ end }}{{ if or .Query.Season .Query.Ep }}tvsearch{{ else }}{{ end }}{{ if or .Query.IMDBID .Query.TMDBID .Query.Season .Query.Ep }}{{ else }}search{{ end }}"
|
||||
q: "{{ .Keywords }}"
|
||||
season: "{{ .Query.Season }}"
|
||||
ep: "{{ .Query.Ep }}"
|
||||
imdbid: "{{ .Query.IMDBID }}"
|
||||
tmdbid: "{{ .Query.TMDBID }}"
|
||||
limit: 100
|
||||
|
||||
rows:
|
||||
selector: channel > item
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: "[name=category]"
|
||||
attribute: value
|
||||
title:
|
||||
selector: title
|
||||
details:
|
||||
text: "{{ .Config.sitelink }}"
|
||||
magnet:
|
||||
selector: enclosure
|
||||
attribute: url
|
||||
infohash:
|
||||
selector: "[name=infohash]"
|
||||
attribute: value
|
||||
imdbid:
|
||||
selector: "[name=imdbid]"
|
||||
attribute: value
|
||||
tmdbid:
|
||||
selector: "[name=tmdbid]"
|
||||
attribute: value
|
||||
date:
|
||||
# Sun, 08 Mar 2026 17:51:00 GMT
|
||||
selector: pubDate
|
||||
filters:
|
||||
- name: dateparse
|
||||
args: "ddd, dd MMM yyyy HH:mm:ss zzz"
|
||||
size:
|
||||
selector: size
|
||||
seeders:
|
||||
selector: "[name=seeders]"
|
||||
attribute: value
|
||||
leechers:
|
||||
selector: "[name=peers]"
|
||||
attribute: value
|
||||
downloadvolumefactor:
|
||||
text: 0
|
||||
uploadvolumefactor:
|
||||
text: 1
|
||||
# torznab xml
|
||||
@@ -0,0 +1,209 @@
|
||||
---
|
||||
id: torrenthaven-api
|
||||
replaces:
|
||||
- torrentavenue-api
|
||||
name: TorrentHaven (API)
|
||||
description: "TorrentHaven is a Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
language: en-US
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://torrenthaven.org/
|
||||
legacylinks:
|
||||
- https://torrentavenue.online/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: Movies, desc: "Movies"}
|
||||
- {id: 2, cat: TV, desc: "TV EP"}
|
||||
- {id: 21, cat: Other/Misc, desc: "VIP"}
|
||||
- {id: 6, cat: TV/Sport, desc: "Football"}
|
||||
- {id: 22, cat: TV/Anime, desc: "Cartoons"}
|
||||
- {id: 3, cat: Audio, desc: "Music"}
|
||||
- {id: 4, cat: PC, desc: "Apps"}
|
||||
- {id: 5, cat: Console, desc: "Games"}
|
||||
- {id: 7, cat: TV/Sport, desc: "Boxing"}
|
||||
- {id: 8, cat: TV/Sport, desc: "Ufc"}
|
||||
- {id: 9, cat: TV/Sport, desc: "Wresting"}
|
||||
- {id: 10, cat: TV/Sport, desc: "formula 1"}
|
||||
- {id: 11, cat: TV/Sport, desc: "Nba"}
|
||||
- {id: 12, cat: TV/Sport, desc: "MotaGP"}
|
||||
- {id: 13, cat: TV/Sport, desc: "Snooker"}
|
||||
- {id: 14, cat: TV/Sport, desc: "Darts"}
|
||||
- {id: 15, cat: TV/Sport, desc: "Bare Knuckle Fighting Championship"}
|
||||
- {id: 16, cat: Audio/MP3, desc: "Music mp3"}
|
||||
- {id: 17, cat: Audio/Lossless, desc: "Music Flac"}
|
||||
- {id: 18, cat: Movies/BluRay, desc: "Bluray"}
|
||||
- {id: 19, cat: Movies/UHD, desc: "4K"}
|
||||
- {id: 20, cat: TV, desc: "Tv/Packs"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid, tvdbid, tmdbid]
|
||||
movie-search: [q, imdbid, tmdbid]
|
||||
music-search: [q]
|
||||
allowtvsearchimdb: true
|
||||
|
||||
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://torrenthaven.org/\" target=\"_blank\">TorrentHaven</a> account <i>My Settings</i> page and clicking on the <b>API Key</b> tab."
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: single_file_release_use_filename
|
||||
type: checkbox
|
||||
label: Use filename as title for single file releases
|
||||
default: true
|
||||
- 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
|
||||
error:
|
||||
- selector: a[href*="/login"]
|
||||
message:
|
||||
text: "The API key was not accepted by {{ .Config.sitelink }}."
|
||||
- selector: :root:contains("Account is Banned")
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://hdinnovations.github.io/UNIT3D/torrent_api.html
|
||||
# https://github.com/HDInnovations/UNIT3D/blob/master/app/Http/Controllers/API/TorrentController.php#L657
|
||||
- path: api/torrents/filter
|
||||
response:
|
||||
type: json
|
||||
|
||||
headers:
|
||||
Authorization: ["Bearer {{ .Config.apikey }}"]
|
||||
|
||||
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
|
||||
$raw: "{{ range .Categories }}&categories[]={{.}}{{end}}"
|
||||
name: "{{ .Keywords }}"
|
||||
seasonNumber: "{{ .Query.Season }}"
|
||||
episodeNumber: "{{ .Query.Ep }}"
|
||||
imdbId: "{{ .Query.IMDBIDShort }}"
|
||||
tmdbId: "{{ .Query.TMDBID }}"
|
||||
tvdbId: "{{ .Query.TVDBID }}"
|
||||
"free[]": "{{ if .Config.freeleech }}100{{ else }}{{ end }}"
|
||||
sortField: "{{ .Config.sort }}"
|
||||
sortDirection: "{{ .Config.type }}"
|
||||
perPage: 100
|
||||
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
args: ["\\.", " "]
|
||||
|
||||
rows:
|
||||
selector: data
|
||||
attribute: attributes
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: category_id
|
||||
title_optional:
|
||||
selector: name
|
||||
title_filename:
|
||||
selector: "files[0].name"
|
||||
optional: true
|
||||
files:
|
||||
selector: num_file
|
||||
title:
|
||||
text: "{{ if and (.Config.single_file_release_use_filename) (eq .Result.files \"1\") (.Result.title_filename) }}{{ .Result.title_filename }}{{ else }}{{ .Result.title_optional }}{{ end }}"
|
||||
details:
|
||||
selector: details_link
|
||||
download:
|
||||
selector: download_link
|
||||
poster:
|
||||
selector: meta.poster
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["https://via.placeholder.com/90x135", ""]
|
||||
imdbid:
|
||||
selector: imdb_id
|
||||
tmdbid:
|
||||
selector: tmdb_id
|
||||
tvdbid:
|
||||
selector: tvdb_id
|
||||
genre:
|
||||
selector: meta.genres
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["(?i)(Science Fiction)", "Science_Fiction"]
|
||||
- name: replace
|
||||
args: [" & ", "_&_"]
|
||||
_internal:
|
||||
selector: internal
|
||||
case:
|
||||
False: "{{ .False }}"
|
||||
True: "{{ .True }}"
|
||||
description:
|
||||
text: "{{ if .Result._internal }}Internal{{ else }}{{ end }}{{ if and .Result._internal .Result.genre }} | {{ else }}{{ end }}{{ .Result.genre }}"
|
||||
seeders:
|
||||
selector: seeders
|
||||
leechers:
|
||||
selector: leechers
|
||||
grabs:
|
||||
selector: times_completed
|
||||
date:
|
||||
# "created_at": "2021-10-18T00:34:50.000000Z" is returned by Newtonsoft.Json.Linq as 18/10/2021 00:34:50
|
||||
selector: created_at
|
||||
filters:
|
||||
- name: append
|
||||
args: " +00:00" # GMT
|
||||
- name: dateparse
|
||||
args: "MM/dd/yyyy HH:mm:ss zzz"
|
||||
size:
|
||||
selector: size
|
||||
_featured:
|
||||
selector: featured
|
||||
case:
|
||||
False: "{{ .False }}"
|
||||
True: "{{ .True }}"
|
||||
downloadvolumefactor_freeleech:
|
||||
# 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
|
||||
downloadvolumefactor:
|
||||
text: "{{ if .Result._featured }}0{{ else }}{{ .Result.downloadvolumefactor_freeleech }}{{ end }}"
|
||||
uploadvolumefactor_double_upload:
|
||||
# api returns False, True
|
||||
selector: double_upload
|
||||
case:
|
||||
False: 1 # normal
|
||||
True: 2 # double
|
||||
uploadvolumefactor:
|
||||
text: "{{ if .Result._featured }}2{{ else }}{{ .Result.uploadvolumefactor_double_upload }}{{ end }}"
|
||||
minimumratio:
|
||||
text: 1.0
|
||||
minimumseedtime:
|
||||
# 3 days (as seconds = 3 x 24 x 60 x 60)
|
||||
text: 259200
|
||||
# json UNIT3D 9.2.0
|
||||
@@ -0,0 +1,218 @@
|
||||
---
|
||||
id: torrenthr-api
|
||||
name: TorrentHR (API)
|
||||
description: "TorrentHR is a ratioless CROATIAN Private Torrent Tracker for 0DAY / GENERAL"
|
||||
language: hr-HR
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://www.torrenthr.org/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 31, cat: TV/Anime, desc: "Anime"}
|
||||
- {id: 1, cat: PC/0day, desc: "Aplikacije"}
|
||||
- {id: 25, cat: Books, desc: "E-books"}
|
||||
- {id: 38, cat: PC/Mobile-Other, desc: "Smartphone"}
|
||||
- {id: 16, cat: TV, desc: "THR Packs"}
|
||||
- {id: 4, cat: Movies/SD, desc: "Filmovi/SD"}
|
||||
- {id: 14, cat: Movies/DVD, desc: "Filmovi/DVD"}
|
||||
- {id: 17, cat: Movies/HD, desc: "Filmovi/HD"}
|
||||
- {id: 40, cat: Movies/BluRay, desc: "Filmovi/BD"}
|
||||
- {id: 15, cat: TV/Sport, desc: "Sport"}
|
||||
- {id: 18, cat: Movies/Foreign, desc: "Crtani Filmovi"}
|
||||
- {id: 12, cat: TV/Documentary, desc: "Dokumentarni Filmovi"}
|
||||
- {id: 11, cat: Audio, desc: "Koncerti/Spotovi"}
|
||||
- {id: 3, cat: Audio/MP3, desc: "Glazba/MP3"}
|
||||
- {id: 29, cat: Audio/Lossless, desc: "Glazba/FLAC"}
|
||||
- {id: 5, cat: PC/Games, desc: "Igre/PC"}
|
||||
- {id: 27, cat: Console/PS4, desc: "Igre/PS"}
|
||||
- {id: 28, cat: Console/Wii, desc: "Igre/Wii"}
|
||||
- {id: 26, cat: Console/XBox, desc: "Igre/Xbox"}
|
||||
- {id: 13, cat: Other, desc: "Ostalo"}
|
||||
- {id: 7, cat: TV/SD, desc: "Serije/SD"}
|
||||
- {id: 34, cat: TV/HD, desc: "Serije/HD"}
|
||||
- {id: 30, cat: Books/Comics, desc: "Stripovi"}
|
||||
- {id: 10, cat: XXX, desc: "XXX/SD"}
|
||||
- {id: 36, cat: XXX, desc: "XXX/HD"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid, tvdbid, tmdbid]
|
||||
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://www.torrenthr.org/\" target=\"_blank\">TorrentHR</a> account <i>Postavke (Settings)</i> page and selecting <b>API</b> from the <i>Opće (General)</i> pulldown."
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: single_file_release_use_filename
|
||||
type: checkbox
|
||||
label: Use filename as title for single file releases
|
||||
default: true
|
||||
- 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
|
||||
error:
|
||||
- selector: a[href*="/login"]
|
||||
message:
|
||||
text: "The API key was not accepted by {{ .Config.sitelink }}."
|
||||
- selector: :root:contains("Account is Banned")
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://hdinnovations.github.io/UNIT3D/torrent_api.html
|
||||
# https://github.com/HDInnovations/UNIT3D/blob/master/app/Http/Controllers/API/TorrentController.php#L657
|
||||
- path: api/torrents/filter
|
||||
response:
|
||||
type: json
|
||||
|
||||
headers:
|
||||
Authorization: ["Bearer {{ .Config.apikey }}"]
|
||||
|
||||
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
|
||||
$raw: "{{ range .Categories }}&categories[]={{.}}{{end}}"
|
||||
name: "{{ .Keywords }}"
|
||||
seasonNumber: "{{ .Query.Season }}"
|
||||
episodeNumber: "{{ .Query.Ep }}"
|
||||
imdbId: "{{ .Query.IMDBIDShort }}"
|
||||
tmdbId: "{{ .Query.TMDBID }}"
|
||||
tvdbId: "{{ .Query.TVDBID }}"
|
||||
"free[]": "{{ if .Config.freeleech }}100{{ else }}{{ end }}"
|
||||
sortField: "{{ .Config.sort }}"
|
||||
sortDirection: "{{ .Config.type }}"
|
||||
perPage: 100
|
||||
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
args: ["\\.", " "]
|
||||
|
||||
rows:
|
||||
selector: data
|
||||
attribute: attributes
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: category_id
|
||||
title_optional:
|
||||
selector: name
|
||||
title_filename:
|
||||
selector: "files[0].name"
|
||||
optional: true
|
||||
files:
|
||||
selector: num_file
|
||||
title:
|
||||
text: "{{ if and (.Config.single_file_release_use_filename) (eq .Result.files \"1\") (.Result.title_filename) }}{{ .Result.title_filename }}{{ else }}{{ .Result.title_optional }}{{ end }}"
|
||||
details:
|
||||
selector: details_link
|
||||
download:
|
||||
selector: download_link
|
||||
poster:
|
||||
selector: meta.poster
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["https://via.placeholder.com/90x135", ""]
|
||||
imdbid:
|
||||
selector: imdb_id
|
||||
tmdbid:
|
||||
selector: tmdb_id
|
||||
tvdbid:
|
||||
selector: tvdb_id
|
||||
genre:
|
||||
selector: meta.genres
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["(?i)(Akcija i avantura)", "Akcija_i_avantura"]
|
||||
- name: re_replace
|
||||
args: ["(?i)(SF i fantazija)", "SF_i_fantazija"]
|
||||
- name: replace
|
||||
args: ["(?i)(Znanstvena fantastika)", "Znanstvena_fantastika"]
|
||||
- name: replace
|
||||
args: ["(?i)(Talk show)", "Talk_show"]
|
||||
- name: replace
|
||||
args: ["(?i)(TV film)", "TV_film"]
|
||||
- name: replace
|
||||
args: ["(?i)(Rat i politika)", "Rat_i_politika"]
|
||||
- name: replace
|
||||
args: [" & ", "_&_"]
|
||||
_internal:
|
||||
selector: internal
|
||||
case:
|
||||
False: "{{ .False }}"
|
||||
True: "{{ .True }}"
|
||||
description:
|
||||
text: "{{ if .Result._internal }}Internal{{ else }}{{ end }}{{ if and .Result._internal .Result.genre }} | {{ else }}{{ end }}{{ .Result.genre }}"
|
||||
seeders:
|
||||
selector: seeders
|
||||
leechers:
|
||||
selector: leechers
|
||||
grabs:
|
||||
selector: times_completed
|
||||
date:
|
||||
# "created_at": "2021-10-18T00:34:50.000000Z" is returned by Newtonsoft.Json.Linq as 18/10/2021 00:34:50
|
||||
selector: created_at
|
||||
filters:
|
||||
- name: append
|
||||
args: " +00:00" # GMT
|
||||
- name: dateparse
|
||||
args: "MM/dd/yyyy HH:mm:ss zzz"
|
||||
size:
|
||||
selector: size
|
||||
_featured:
|
||||
selector: featured
|
||||
case:
|
||||
False: "{{ .False }}"
|
||||
True: "{{ .True }}"
|
||||
downloadvolumefactor_freeleech:
|
||||
# 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
|
||||
downloadvolumefactor:
|
||||
text: "{{ if .Result._featured }}0{{ else }}{{ .Result.downloadvolumefactor_freeleech }}{{ end }}"
|
||||
uploadvolumefactor_double_upload:
|
||||
# api returns False, True
|
||||
selector: double_upload
|
||||
case:
|
||||
False: 1 # normal
|
||||
True: 2 # double
|
||||
uploadvolumefactor:
|
||||
text: "{{ if .Result._featured }}2{{ else }}{{ .Result.uploadvolumefactor_double_upload }}{{ end }}"
|
||||
minimumratio:
|
||||
text: 1.0
|
||||
minimumseedtime:
|
||||
# 3 days (as seconds = 3 x 24 x 60 x 60)
|
||||
text: 259200
|
||||
# json TorrentHR v3.0 (based on UNIT3D 9.2.0)
|
||||
@@ -0,0 +1,175 @@
|
||||
---
|
||||
id: tr4ker
|
||||
name: TR4KER
|
||||
description: "TR4KER is a FRENCH Semi-Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
language: fr-FR
|
||||
type: semi-private
|
||||
encoding: UTF-8
|
||||
requestDelay: 1 # 60 request per minute
|
||||
links:
|
||||
- https://tr4ker.net/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
# from https://tr4ker.net/api/torznab?t=caps&apikey=YOUR-API-KEY
|
||||
- {id: 1000, cat: Console, desc: "PC Games"}
|
||||
- {id: 1010, cat: Console/XBox, desc: "Xbox"}
|
||||
- {id: 1020, cat: Console/Wii, desc: "Nintendo"}
|
||||
- {id: 1030, cat: Console/PS4, desc: "PlayStation"}
|
||||
- {id: 2000, cat: Movies, desc: "Movies"}
|
||||
- {id: 2010, cat: Movies/Foreign, desc: "Films Foreign"}
|
||||
- {id: 2040, cat: Movies/HD, desc: "Movies/HD"}
|
||||
- {id: 3000, cat: Audio, desc: "Audio"}
|
||||
- {id: 3010, cat: Audio/MP3, desc: "Audio/MP3"}
|
||||
- {id: 3030, cat: Audio/Audiobook, desc: "iobook"}
|
||||
- {id: 3040, cat: Audio/Lossless, desc: "Audio/Lossless"}
|
||||
- {id: 4000, cat: PC/0day, desc: "PC"}
|
||||
- {id: 4030, cat: PC/Mac, desc: "PC/Mac"}
|
||||
- {id: 4070, cat: PC/Mobile-Android, desc: "PC/Android"}
|
||||
- {id: 5000, cat: TV, desc: "TV"}
|
||||
- {id: 5040, cat: TV/HD, desc: "TV/HD"}
|
||||
- {id: 5060, cat: TV/Sport, desc: "TV/Sport"}
|
||||
- {id: 5070, cat: TV/Anime, desc: "TV/Anime"}
|
||||
- {id: 6000, cat: XXX, desc: "XXX"}
|
||||
- {id: 7000, cat: Books, desc: "Books"}
|
||||
- {id: 7010, cat: Books/Mags, desc: "Books/Mags"}
|
||||
- {id: 7020, cat: Books/EBook, desc: "Books/eBook"}
|
||||
- {id: 7030, cat: Books/Comics, desc: "Books/Comics"}
|
||||
- {id: 8000, cat: Other, desc: "Other"}
|
||||
- {id: 8010, cat: Other/Misc, desc: "Other/Misc"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid, tvdbid]
|
||||
movie-search: [q, imdbid, tmdbid]
|
||||
music-search: [q]
|
||||
book-search: [q]
|
||||
allowtvsearchimdb: true
|
||||
allowrawsearch: true
|
||||
|
||||
settings:
|
||||
- name: apikey
|
||||
type: text
|
||||
label: API Key
|
||||
- name: info_key
|
||||
type: info
|
||||
label: About your API key
|
||||
default: "You can find or generate a new API Key by accessing the <a href=\"https://tr4ker.net/mon-compte/parametres\" target=\"_blank\">TR4KER Paramètres</a> page and scrolling down to the <b>Clé API</b> section."
|
||||
- name: multilang
|
||||
type: checkbox
|
||||
label: Replace MULTi by another language in release name
|
||||
default: false
|
||||
- name: multilanguage
|
||||
type: select
|
||||
label: Replace MULTi by this language
|
||||
default: FRENCH
|
||||
options:
|
||||
FRENCH: FRENCH
|
||||
MULTi.FRENCH: MULTi.FRENCH
|
||||
ENGLISH: ENGLISH
|
||||
MULTi.ENGLISH: MULTi.ENGLISH
|
||||
VOSTFR: VOSTFR
|
||||
MULTi.VOSTFR: MULTi.VOSTFR
|
||||
- name: vostfr
|
||||
type: checkbox
|
||||
label: Replace VOSTFR and SUBFRENCH with ENGLISH
|
||||
default: false
|
||||
- name: info_3x
|
||||
type: info
|
||||
label: Including 3X
|
||||
default: "IF you want to see 3x torrents access your <a href=\"https://tr4ker.net/mon-compte/parametres\" target=\"_blank\">TR4KER Paramètres</a> page and flick the <b>Contenu adulte (+18)</b> switch."
|
||||
|
||||
login:
|
||||
# returns "401 Unauthorized, check your credentials" if apikey is invalid
|
||||
path: api/torznab
|
||||
method: get
|
||||
inputs:
|
||||
apikey: "{{ .Config.apikey }}"
|
||||
t: search
|
||||
limit: 1
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: api/torznab/all
|
||||
response:
|
||||
type: xml
|
||||
|
||||
inputs:
|
||||
apikey: "{{ .Config.apikey }}"
|
||||
t: "{{ .Query.Type }}"
|
||||
q: "{{ .Keywords }}"
|
||||
cat: "{{ join .Categories \",\" }}"
|
||||
# season: "{{ .Query.Season }}"
|
||||
# ep: "{{ .Query.Ep }}"
|
||||
imdbid: "{{ .Query.IMDBID }}"
|
||||
tmdbid: "{{ .Query.TMDBID }}"
|
||||
tvdbid: "{{ .Query.TVDBID }}"
|
||||
limit: 100
|
||||
|
||||
rows:
|
||||
selector: rss > channel > item
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: "[name=category]"
|
||||
attribute: value
|
||||
title_phase1:
|
||||
selector: title
|
||||
title_vostfr:
|
||||
text: "{{ .Result.title_phase1 }}"
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["(?i)\\b(vostfr|subfrench)\\b", "ENGLISH"]
|
||||
title_phase2:
|
||||
text: "{{ if .Config.vostfr }}{{ .Result.title_vostfr }}{{ else }}{{ .Result.title_phase1 }}{{ end }}"
|
||||
title_multilang:
|
||||
text: "{{ .Result.title_phase2 }}"
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["(?i)\\b(MULTI(?!.*(?:FRENCH|ENGLISH|VOSTFR|VF2|VFF|VFQ|VOQ|VFI|VOF)))\\b", "{{ .Config.multilanguage }}"]
|
||||
title:
|
||||
text: "{{ if .Config.multilang }}{{ .Result.title_multilang }}{{ else }}{{ .Result.title_phase2 }}{{ end }}"
|
||||
details:
|
||||
selector: comments
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["/torrents/", "/torrent/"]
|
||||
download:
|
||||
selector: enclosure
|
||||
attribute: url
|
||||
imdbid:
|
||||
selector: "[name=imdbid]"
|
||||
attribute: value
|
||||
tmdbid:
|
||||
selector: "[name=tmdbid]"
|
||||
attribute: value
|
||||
tvdbid:
|
||||
selector: "[name=tvdbid]"
|
||||
attribute: value
|
||||
date:
|
||||
# Tue, 02 Jun 2026 19:24:18 +0000
|
||||
selector: pubDate
|
||||
filters:
|
||||
- name: dateparse
|
||||
args: "ddd, dd MMM yyyy HH:mm:ss zzz"
|
||||
size:
|
||||
selector: "[name=size]"
|
||||
attribute: value
|
||||
seeders:
|
||||
selector: "[name=seeders]"
|
||||
attribute: value
|
||||
leechers:
|
||||
selector: "[name=peers]"
|
||||
attribute: value
|
||||
grabs:
|
||||
selector: "[name=grabs]"
|
||||
attribute: value
|
||||
downloadvolumefactor:
|
||||
selector: "[name=downloadvolumefactor]"
|
||||
attribute: value
|
||||
uploadvolumefactor:
|
||||
selector: "[name=uploadvolumefactor]"
|
||||
attribute: value
|
||||
minimumratio:
|
||||
text: 0.51
|
||||
# torznab xml
|
||||
@@ -0,0 +1,151 @@
|
||||
---
|
||||
id: trackerzero
|
||||
name: TrackerZero
|
||||
description: "TrackerZero is an ITALIAN Private PAY2DL Torrent Tracker for MOVIES / TV / MUSIC / SOFTWARE"
|
||||
language: it-IT
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://trackerzero.it/
|
||||
caps:
|
||||
# https://trackerzero.it/docs#/torrents/list_categories_api_torrents_categories_get
|
||||
categorymappings:
|
||||
- {id: 4, cat: Movies/UHD, desc: "4k"}
|
||||
- {id: 25, cat: TV/Anime, desc: "Anime"}
|
||||
- {id: 22, cat: PC/0day, desc: "App_Linux"}
|
||||
- {id: 23, cat: PC/Mac, desc: "App_Mac"}
|
||||
- {id: 21, cat: PC/0day, desc: "App_Windows"}
|
||||
- {id: 28, cat: Audio/Audiobook, desc: "Audiolibri"}
|
||||
- {id: 7, cat: Movies/HD, desc: "BluRay"}
|
||||
- {id: 24, cat: TV/Anime, desc: "Cartoon"}
|
||||
- {id: 12, cat: TV/Documentary, desc: "Documentari"}
|
||||
- {id: 11, cat: TV/HD, desc: "DocuSerie"}
|
||||
- {id: 8, cat: Movies/DVD, desc: "DVD-R"}
|
||||
- {id: 5, cat: Movies/SD, desc: "DvdRiP"}
|
||||
- {id: 14, cat: Audio/Lossless, desc: "Flac"}
|
||||
- {id: 19, cat: PC/Games, desc: "Giochi_Linux"}
|
||||
- {id: 20, cat: Console/Other, desc: "Giochi_Mac"}
|
||||
- {id: 18, cat: PC/Games, desc: "Giochi_PC"}
|
||||
- {id: 34, cat: Console/PS4, desc: "Giochi PS4"}
|
||||
- {id: 33, cat: Console/PS4, desc: "Giochi PS5"}
|
||||
- {id: 27, cat: Books/EBook, desc: "Libri"}
|
||||
- {id: 13, cat: Audio/MP3, desc: "MP3"}
|
||||
- {id: 6, cat: Movies/SD, desc: "News_Cinema"}
|
||||
- {id: 35, cat: Console/NDS, desc: "Nintendo Switch"}
|
||||
- {id: 30, cat: TV/Other, desc: "Programmi tv"}
|
||||
- {id: 26, cat: Books/Mags, desc: "Quotidiani_Periodici"}
|
||||
- {id: 17, cat: Movies/HD, desc: "Saghe"}
|
||||
- {id: 10, cat: TV/HD, desc: "SerieTV_Italiane"}
|
||||
- {id: 9, cat: TV/HD, desc: "SerieTV_Straniere"}
|
||||
- {id: 16, cat: Movies/Other, desc: "Spettacoli_E_Teatro"}
|
||||
- {id: 32, cat: TV/Sport, desc: "SPORT"}
|
||||
- {id: 29, cat: Other, desc: "VideoCorsi_E_Guide"}
|
||||
- {id: 15, cat: Audio/Video, desc: "VideoMusicai"}
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
music-search: [q]
|
||||
book-search: [q]
|
||||
|
||||
settings:
|
||||
- name: apikey
|
||||
type: text
|
||||
label: API key
|
||||
- name: info_apikey
|
||||
type: info
|
||||
label: About your API key
|
||||
default: "Find your API key by accessing your <a href=\"https://trackerzero.it/\" target=\"_blank\">TrackerZero</a> <i>Profile</i> page and scrolling down to the <b>img.trackerzero.it</b> section.<br>The API key expires monthly so if your search returns <b>Status=Unauthorized Response={\"detail\":\"Invalid token\"}</b> then fetch your new API key from the site."
|
||||
- name: passkey
|
||||
type: text
|
||||
label: Passkey
|
||||
- name: info_passkey
|
||||
type: info
|
||||
label: About your Passkey
|
||||
default: "Find your Passkey by accessing your <a href=\"https://trackerzero.it/\" target=\"_blank\">TrackerZero</a> <i>Profile</i> page and scrolling down to the <b>Passkey</b> section."
|
||||
- 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/latest
|
||||
method: get
|
||||
|
||||
search:
|
||||
# docs: https://trackerzero.it/docs
|
||||
paths:
|
||||
# https://trackerzero.it/api/torrents?limit=100&page=1&q=pacific&sort_by=created_at&sort_dir=desc
|
||||
- path: api/torrents
|
||||
response:
|
||||
type: json
|
||||
|
||||
headers:
|
||||
Authorization: ["Bearer {{ .Config.apikey }}"]
|
||||
|
||||
inputs:
|
||||
limit: 100
|
||||
page: 1
|
||||
q: "{{ .Keywords }}"
|
||||
sort_by: "{{ .Config.sort }}"
|
||||
sort_dir: "{{ .Config.type }}"
|
||||
# category searching not supported, using it causes 500 internal server error
|
||||
|
||||
keywordsfilters:
|
||||
- name: diacritics
|
||||
args: replace
|
||||
|
||||
rows:
|
||||
selector: items
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: category.id
|
||||
title:
|
||||
selector: name
|
||||
_id:
|
||||
selector: id
|
||||
details:
|
||||
text: "{{ .Config.sitelink }}torrent/{{ .Result._id }}"
|
||||
download:
|
||||
text: "{{ .Config.sitelink }}api/torrents/{{ .Result._id }}/download-rss?passkey={{ .Config.passkey }}"
|
||||
poster:
|
||||
selector: poster
|
||||
date:
|
||||
# "created_at": "2026-02-20T18:17:51.514900+00:00" is returned by Newtonsoft.Json.Linq as 02/20/2026 18:17:51
|
||||
selector: created_at
|
||||
filters:
|
||||
- name: append
|
||||
args: " +00:00" # GMT
|
||||
- name: dateparse
|
||||
args: "MM/dd/yyyy HH:mm:ss zzz"
|
||||
size:
|
||||
selector: size
|
||||
seeders:
|
||||
selector: seeders
|
||||
leechers:
|
||||
selector: leechers
|
||||
grabs:
|
||||
selector: completed
|
||||
downloadvolumefactor:
|
||||
text: 1
|
||||
uploadvolumefactor:
|
||||
text: 1
|
||||
minimumratio:
|
||||
text: 1.0
|
||||
minimumseedtime:
|
||||
# 1 day (as seconds = 24 x 60 x 60)
|
||||
text: 86400
|
||||
# json api
|
||||
@@ -0,0 +1,173 @@
|
||||
---
|
||||
id: ultrabits-api
|
||||
name: Ultrabits (API)
|
||||
description: "Ultrabits is a NORDIC Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
language: sv-SE
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://ultrabits.org/
|
||||
|
||||
caps:
|
||||
# `id` is the site's internal category slug — the JSON search endpoint
|
||||
# echoes it back in each torrent's `category` field, so Cardigann maps
|
||||
# rows 1:1 against what the API returns. `desc` mirrors the labels
|
||||
# users see on ultrabits.org so Sonarr / Radarr / Prowlarr render the
|
||||
# same wording.
|
||||
# sourced from https://ultrabits.org/all?page=1
|
||||
categorymappings:
|
||||
# Movies
|
||||
- {id: Movie-x264, cat: Movies/HD, desc: "Movies/x264"}
|
||||
- {id: Movie-x265, cat: Movies/HD, desc: "Movies/x265"}
|
||||
- {id: Movie-UHD, cat: Movies/UHD, desc: "Movies/UHD"}
|
||||
- {id: Movie-Remux, cat: Movies/UHD, desc: "Movies/Remux"}
|
||||
- {id: Movie-BD, cat: Movies/BluRay, desc: "Movies/BluRay"}
|
||||
- {id: Movie-DVD, cat: Movies/DVD, desc: "Movies/DVDR"}
|
||||
- {id: Movie-WEB, cat: Movies/WEB-DL, desc: "Movies/WEB-DL"}
|
||||
- {id: Movie-Subpack, cat: Movies/Foreign, desc: "Movies/Subpack"}
|
||||
# TV
|
||||
- {id: TV-x264, cat: TV/HD, desc: "TV/x264"}
|
||||
- {id: TV-x265, cat: TV/HD, desc: "TV/x265"}
|
||||
- {id: TV-UHD, cat: TV/UHD, desc: "TV/UHD"}
|
||||
- {id: TV-WEB, cat: TV/WEB-DL, desc: "TV/WEB-DL"}
|
||||
- {id: TV-DVD, cat: TV/SD, desc: "TV/DVDR"}
|
||||
- {id: TV-Nordic, cat: TV/Foreign, desc: "TV/Nordic"}
|
||||
- {id: TV-Remux, cat: TV, desc: "TV/Remux"}
|
||||
- {id: TV-BD, cat: TV/HD, desc: "TV/BluRay"}
|
||||
- {id: TV-Subpack, cat: TV/Foreign, desc: "TV/Subpack"}
|
||||
# Music
|
||||
- {id: FLAC, cat: Audio/Lossless, desc: "Audio/FLAC"}
|
||||
- {id: MP3, cat: Audio/MP3, desc: "Audio/MP3"}
|
||||
- {id: MusicVid, cat: Audio/Video, desc: "Audio/Video"}
|
||||
- {id: MusicDisc, cat: Audio/Lossless, desc: "Audio/Disc"}
|
||||
- {id: Podcast, cat: Audio/Other, desc: "Audio/Podcast"}
|
||||
# Games
|
||||
- {id: Game-PC, cat: PC/Games, desc: "PC/Games"}
|
||||
- {id: Game-PS, cat: Console/PS4, desc: "Console/PlayStation"}
|
||||
- {id: Game-Xbox, cat: Console/XBox One, desc: "Console/Xbox"}
|
||||
- {id: Game-NSW, cat: Console/Other, desc: "Console/Switch"}
|
||||
# Apps
|
||||
- {id: 0DAY, cat: PC/0day, desc: "PC/0DAY"}
|
||||
- {id: App-ISO, cat: PC/ISO, desc: "PC/ISO"}
|
||||
- {id: App-Mobile, cat: PC/Mobile-Android, desc: "PC/Mobile"}
|
||||
# Books
|
||||
- {id: eBook, cat: Books/EBook, desc: "Books/eBook"}
|
||||
- {id: AudioBook, cat: Audio/Audiobook, desc: "Books/Audiobook"}
|
||||
- {id: Magazine, cat: Books/Mags, desc: "Books/Magazine"}
|
||||
- {id: Comic, cat: Books/Comics, desc: "Books/Comics"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid, tmdbid]
|
||||
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 Key by accessing your <a href=\"https://ultrabits.org/profile/settings/api-keys\" target=\"_blank\">Ultrabits</a> account <i>API keys</i> page."
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
default: added
|
||||
options:
|
||||
added: created
|
||||
seeders: seeders
|
||||
size: size
|
||||
- name: type
|
||||
type: select
|
||||
label: Order requested from site
|
||||
default: desc
|
||||
options:
|
||||
desc: desc
|
||||
asc: asc
|
||||
- name: info_activity
|
||||
type: info
|
||||
label: Account Inactivity
|
||||
default: "Log in to the website at least every 3 months to avoid account deactivation."
|
||||
|
||||
login:
|
||||
path: v1/jackett/search
|
||||
method: get
|
||||
inputs:
|
||||
apikey: "{{ .Config.apikey }}"
|
||||
limit: 1
|
||||
error:
|
||||
- selector: error
|
||||
message:
|
||||
selector: description
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: /v1/jackett/search
|
||||
response:
|
||||
type: json
|
||||
inputs:
|
||||
q: "{{ .Keywords }}"
|
||||
apikey: "{{ .Config.apikey }}"
|
||||
cat: "{{ join .Categories \",\" }}"
|
||||
imdbid: "{{ .Query.IMDBIDShort }}"
|
||||
tmdbid: "{{ .Query.TMDBID }}"
|
||||
season: "{{ .Query.Season }}"
|
||||
ep: "{{ .Query.Ep }}"
|
||||
freeleech: "{{ if .Config.freeleech }}1{{ else }}{{ end }}"
|
||||
sort: "{{ .Config.sort }}"
|
||||
order: "{{ .Config.type }}"
|
||||
limit: 100
|
||||
|
||||
rows:
|
||||
selector: data
|
||||
count:
|
||||
selector: total
|
||||
|
||||
fields:
|
||||
title:
|
||||
selector: name
|
||||
details:
|
||||
selector: detailsUrl
|
||||
download:
|
||||
selector: downloadUrl
|
||||
category:
|
||||
selector: category
|
||||
size:
|
||||
selector: size
|
||||
seeders:
|
||||
selector: seeders
|
||||
leechers:
|
||||
selector: leechers
|
||||
grabs:
|
||||
selector: grabs
|
||||
date:
|
||||
# "addedAt": "2026-04-29T15:45:27.544Z" is returned by Newtonsoft.Json.Linq as 04/29/2026 15:45:27
|
||||
selector: addedAt
|
||||
filters:
|
||||
- name: append
|
||||
args: " +00:00" # GMT
|
||||
- name: dateparse
|
||||
args: "MM/dd/yyyy HH:mm:ss zzz"
|
||||
infohash:
|
||||
selector: infoHash
|
||||
optional: true
|
||||
imdb:
|
||||
selector: imdb
|
||||
tmdbid:
|
||||
selector: tmdbId
|
||||
downloadvolumefactor:
|
||||
selector: downloadvolumefactor
|
||||
uploadvolumefactor:
|
||||
selector: uploadvolumefactor
|
||||
minimumratio:
|
||||
text: 1.1
|
||||
minimumseedtime:
|
||||
# 2 days (as seconds = 2 x 24 x 60 x 60)
|
||||
text: 172800
|
||||
# json api
|
||||
@@ -0,0 +1,195 @@
|
||||
---
|
||||
id: unbreakable
|
||||
name: Unbreakable
|
||||
description: "Unbreakable is a GERMAN Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
language: de-DE
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://unbreakable5.eu/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 157, cat: TV/Documentary, desc: "Doku 1080p"}
|
||||
- {id: 167, cat: TV/Documentary, desc: "Doku 2160p"}
|
||||
- {id: 156, cat: TV/Documentary, desc: "Doku 720p"}
|
||||
- {id: 165, cat: TV/Documentary, desc: "Doku Pack 1080p"}
|
||||
- {id: 164, cat: TV/Documentary, desc: "Doku Pack 720p"}
|
||||
- {id: 163, cat: TV/Documentary, desc: "Doku Pack SD"}
|
||||
- {id: 135, cat: TV/Documentary, desc: "Doku Packs 2160p"}
|
||||
- {id: 155, cat: TV/Documentary, desc: "Doku SD x264/x265"}
|
||||
- {id: 152, cat: Books/EBook, desc: "E-Books"}
|
||||
- {id: 168, cat: Movies/Other, desc: "Filme Anime"}
|
||||
- {id: 103, cat: Movies/BluRay, desc: "Filme Blu-Ray"}
|
||||
- {id: 104, cat: Movies/DVD, desc: "Filme DVD-R"}
|
||||
- {id: 141, cat: Movies/HD, desc: "Filme HD 1080p"}
|
||||
- {id: 154, cat: Movies/HD, desc: "Filme HD 720p"}
|
||||
- {id: 166, cat: Movies/Foreign, desc: "Filme International"}
|
||||
- {id: 139, cat: Movies/HD, desc: "Filme Packs HD 1080p"}
|
||||
- {id: 106, cat: Movies/HD, desc: "Filme Packs HD 720p"}
|
||||
- {id: 105, cat: Movies/SD, desc: "Filme Packs SD x264/x265"}
|
||||
- {id: 119, cat: Movies/UHD, desc: "Filme Packs UHD 2160p"}
|
||||
- {id: 153, cat: Movies/SD, desc: "Filme SD x264/x265"}
|
||||
- {id: 140, cat: Movies/UHD, desc: "Filme UHD 2160p"}
|
||||
- {id: 102, cat: Movies/Other, desc: "Filmklassiker"}
|
||||
- {id: 127, cat: Movies/Other, desc: "Filmklassiker Packs"}
|
||||
- {id: 118, cat: Audio/Audiobook, desc: "Hörbücher"}
|
||||
- {id: 109, cat: Audio/Lossless, desc: "Musik Flac"}
|
||||
- {id: 129, cat: Audio/MP3, desc: "Musik MP3"}
|
||||
- {id: 111, cat: Audio/Lossless, desc: "Musik Packs Flac"}
|
||||
- {id: 112, cat: Audio/MP3, desc: "Musik Packs MP3"}
|
||||
- {id: 170, cat: Audio/Video, desc: "Musik Videos"}
|
||||
- {id: 161, cat: Console/NDS, desc: "Nintendo Switch"}
|
||||
- {id: 162, cat: Console/PS3, desc: "Playstation"}
|
||||
- {id: 115, cat: TV/Anime, desc: "Series Anime"}
|
||||
- {id: 113, cat: TV/HD, desc: "Serie HD 1080p"}
|
||||
- {id: 125, cat: TV/HD, desc: "Serie HD 720p"}
|
||||
- {id: 144, cat: TV/Anime, desc: "Serie Packs Anime"}
|
||||
- {id: 138, cat: TV/HD, desc: "Serie Packs HD 1080p"}
|
||||
- {id: 116, cat: TV/HD, desc: "Serie Packs HD 720p"}
|
||||
- {id: 137, cat: TV/SD, desc: "Serie Packs SD x264/x265"}
|
||||
- {id: 143, cat: TV/UHD, desc: "Serie Packs UHD 2160p"}
|
||||
- {id: 133, cat: TV/SD, desc: "Serie SD x264/x265"}
|
||||
- {id: 114, cat: TV/UHD, desc: "Serie UHD 2160p"}
|
||||
- {id: 169, cat: TV/Sport, desc: "Sport"}
|
||||
- {id: 150, cat: PC/0day, desc: "Windows Apps"}
|
||||
- {id: 149, cat: PC/Games, desc: "Windows Spiele"}
|
||||
- {id: 69, cat: XXX, desc: "XXX"}
|
||||
- {id: 151, cat: Books/Mags, desc: "Zeitschriften"}
|
||||
|
||||
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: pin
|
||||
type: text
|
||||
label: Pin
|
||||
- name: onlyupload
|
||||
type: checkbox
|
||||
label: Filter OnlyUpload only
|
||||
default: false
|
||||
- name: info_free
|
||||
type: info
|
||||
label: About OnlyUpload at Unbreakable
|
||||
default: "<ul><li>OnlyUpload are torrents where download is not counted but upload is. Good for building your Ratio up. (On the Jackett dashboard search results these are tagged as Freeleech).</li></ul>"
|
||||
- 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
|
||||
- name: info_tpp
|
||||
type: info
|
||||
label: Results Per Page
|
||||
default: For best results, change the <b>Torrents pro Seite:</b> setting to <b>100</b> on your <b>UserCP</b> page. The default is <i>15</i>.
|
||||
- name: info_activity
|
||||
type: info
|
||||
label: Account Inactivity
|
||||
default: "Inactive accounts are automatically deleted after 42 days."
|
||||
- name: info_seedhours
|
||||
type: info
|
||||
label: Seeding Hours
|
||||
default: Before using this indexer, make sure that you have set <b>Meine Seedzeit</b> on your <b>UserCP</b> page.
|
||||
|
||||
login:
|
||||
path: login.php
|
||||
method: form
|
||||
cookies: ["JAVA=OK"] # avoid jscheck redirect
|
||||
inputs:
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
secure_pin: "{{ .Config.pin }}"
|
||||
returnto: /
|
||||
error:
|
||||
- selector: table.tableinborder:contains("Anmeldung Gescheitert!") > tbody > tr > td.tablea
|
||||
test:
|
||||
path: index.php
|
||||
selector: a[href="logout.php"]
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: browse.php
|
||||
inputs:
|
||||
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
|
||||
search: "{{ .Keywords }}"
|
||||
showsearch: 1
|
||||
# 0 active, 1 all, 2 dead
|
||||
incldead: 1
|
||||
orderby: "{{ .Config.sort }}"
|
||||
sort: "{{ .Config.type }}"
|
||||
# site does not support imdbid searching or display imdb links in results.
|
||||
|
||||
rows:
|
||||
selector: "table.tableinborder[border=\"0\"][cellspacing=\"1\"][cellpadding=\"0\"][style=\"width:100%\"] > tbody > tr:has(a[href^=\"download.php?torrent=\"]){{ if .Config.onlyupload }}:has(img[src=\"pic/oupic.gif\"]){{ else }}{{ end }}"
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: a[href^="browse.php?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
title:
|
||||
selector: a[href^="details.php?id="]:has(b)
|
||||
details:
|
||||
selector: a[href*="details.php?id="]
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href^="download.php?torrent="]
|
||||
attribute: href
|
||||
poster:
|
||||
selector: img#img-1
|
||||
attribute: src
|
||||
size:
|
||||
selector: td.content_wrap > table > tbody > tr:nth-child(2) > td:nth-child(1) > b:nth-child(1)
|
||||
grabs:
|
||||
selector: td.content_wrap > table > tbody > tr:nth-child(2) > td:nth-child(3) > b
|
||||
files:
|
||||
selector: td.content_wrap > table > tbody > tr:nth-child(2) > td:nth-child(1) > b:nth-child(2)
|
||||
seeders:
|
||||
selector: td.content_wrap > table > tbody > tr:nth-child(2) > td:nth-child(2) > b:nth-child(1)
|
||||
leechers:
|
||||
selector: td.content_wrap > table > tbody > tr:nth-child(2) > td:nth-child(2) > b:nth-child(3)
|
||||
date:
|
||||
selector: td.content_wrap > table > tbody > tr:nth-child(2) > td:nth-child(5)
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["\u00a0", " "]
|
||||
- name: append
|
||||
args: " +01:00" # CET
|
||||
- name: dateparse
|
||||
args: "dd.MM.yyyy HH:mm:ss zzz"
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img[src="pic/oupic.gif"]: 0 # only upload is counted
|
||||
"*": 1
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
img[src="pic/freeleech.gif"]: 0 # nothing is counted
|
||||
"*": 1
|
||||
minimumratio:
|
||||
text: 0.7
|
||||
minimumseedtime:
|
||||
# 2 days (as seconds = 2 x 24 x 60 x 60)
|
||||
text: 172800
|
||||
# NetVision
|
||||
@@ -0,0 +1,137 @@
|
||||
---
|
||||
id: v3x
|
||||
name: V3X
|
||||
description: "V3X is a FRENCH Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
language: fr-FR
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
requestDelay: 2
|
||||
links:
|
||||
- https://v3x.club/
|
||||
- https://v3x.tw/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 2000, cat: Movies, desc: "Films"}
|
||||
- {id: 5000, cat: TV, desc: "Séries"}
|
||||
- {id: 3000, cat: Audio, desc: "Audio"}
|
||||
- {id: 7000, cat: Books, desc: "Ebooks"}
|
||||
- {id: 4000, cat: PC, desc: "Applications"}
|
||||
- {id: 1000, cat: Console, desc: "Jeux vidéo"}
|
||||
- {id: 8000, cat: Other, desc: "Divers"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, tmdbid]
|
||||
movie-search: [q, tmdbid]
|
||||
music-search: [q]
|
||||
book-search: [q]
|
||||
allowrawsearch: true
|
||||
|
||||
settings:
|
||||
- name: apikey
|
||||
type: text
|
||||
label: API Key
|
||||
- name: info_key
|
||||
type: info
|
||||
label: About your API key
|
||||
default: "Create your API key on V3X in <b>Réglages -> Intégrations</b> (needs the torznab scope)."
|
||||
- name: apiurl
|
||||
label: API URL
|
||||
type: text
|
||||
default: api.v3x.club
|
||||
- name: multilang
|
||||
type: checkbox
|
||||
label: Replace MULTi by another language in release name
|
||||
default: false
|
||||
- name: multilanguage
|
||||
type: select
|
||||
label: Replace MULTi by this language
|
||||
default: FRENCH
|
||||
options:
|
||||
FRENCH: FRENCH
|
||||
MULTi.FRENCH: MULTi.FRENCH
|
||||
ENGLISH: ENGLISH
|
||||
MULTi.ENGLISH: MULTi.ENGLISH
|
||||
VOSTFR: VOSTFR
|
||||
MULTi.VOSTFR: MULTi.VOSTFR
|
||||
- name: vostfr
|
||||
type: checkbox
|
||||
label: Replace VOSTFR and SUBFRENCH with ENGLISH
|
||||
default: false
|
||||
|
||||
login:
|
||||
# returns "401 Unauthorized, check your credentials" if apikey is invalid
|
||||
path: "https://{{ .Config.apiurl }}/indexer/search"
|
||||
method: get
|
||||
inputs:
|
||||
apikey: "{{ .Config.apikey }}"
|
||||
limit: 1
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: "https://{{ .Config.apiurl }}/indexer/search"
|
||||
response:
|
||||
type: json
|
||||
inputs:
|
||||
apikey: "{{ .Config.apikey }}"
|
||||
q: "{{ .Keywords }}"
|
||||
cat: "{{ join .Categories \",\" }}"
|
||||
tmdbid: "{{ .Query.TMDBID }}"
|
||||
season: "{{ .Query.Season }}"
|
||||
ep: "{{ .Query.Ep }}"
|
||||
limit: 100
|
||||
|
||||
rows:
|
||||
selector: results
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: category
|
||||
title_phase1:
|
||||
selector: title
|
||||
title_vostfr:
|
||||
text: "{{ .Result.title_phase1 }}"
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["(?i)\\b(vostfr|subfrench)\\b", "ENGLISH"]
|
||||
title_phase2:
|
||||
text: "{{ if .Config.vostfr }}{{ .Result.title_vostfr }}{{ else }}{{ .Result.title_phase1 }}{{ end }}"
|
||||
title_multilang:
|
||||
text: "{{ .Result.title_phase2 }}"
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["(?i)\\b(MULTI(?!.*(?:FRENCH|ENGLISH|VOSTFR|VF2|VFF|VFQ|VOQ|VFI|VOF)))\\b", "{{ .Config.multilanguage }}"]
|
||||
title:
|
||||
text: "{{ if .Config.multilang }}{{ .Result.title_multilang }}{{ else }}{{ .Result.title_phase2 }}{{ end }}"
|
||||
details:
|
||||
selector: details
|
||||
download:
|
||||
selector: download
|
||||
infohash:
|
||||
selector: infohash
|
||||
tmdbid:
|
||||
selector: tmdbid
|
||||
date:
|
||||
# "created_at": "2026-08-21T01:28:14.004Z" is returned by Newtonsoft.Json.Linq as 08/21/2026 01:28:14
|
||||
selector: pubdate
|
||||
filters:
|
||||
- name: append
|
||||
args: " +00:00" # GMT
|
||||
- name: dateparse
|
||||
args: "MM/dd/yyyy HH:mm:ss zzz"
|
||||
size:
|
||||
selector: size
|
||||
seeders:
|
||||
selector: seeders
|
||||
leechers:
|
||||
selector: leechers
|
||||
grabs:
|
||||
selector: grabs
|
||||
downloadvolumefactor:
|
||||
selector: downloadvolumefactor
|
||||
uploadvolumefactor:
|
||||
selector: uploadvolumefactor
|
||||
minimumratio:
|
||||
text: 0.8
|
||||
# json v0.18
|
||||
@@ -0,0 +1,163 @@
|
||||
---
|
||||
id: vc-lib
|
||||
name: VC-Lib
|
||||
description: "VC-Lib is a CHINESE Private Torrent Tracker for MUSIC"
|
||||
language: zh-CN
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://pt.vclib.online/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 408, cat: Other, desc: "其他 - Other"}
|
||||
- {id: 409, cat: PC/0day, desc: "软件 - Software"}
|
||||
- {id: 407, cat: PC/Games, desc: "游戏 - Games"}
|
||||
- {id: 406, cat: PC/0day, desc: "编辑器 - Editors"}
|
||||
- {id: 403, cat: Other, desc: "声库 - Voicebanks"}
|
||||
- {id: 402, cat: Audio/Video, desc: "视频 - Videos"}
|
||||
- {id: 405, cat: Other, desc: "图片 - Images"}
|
||||
- {id: 404, cat: Audio, desc: "单曲 - Singles"}
|
||||
- {id: 401, cat: Audio, desc: "专辑 - Albums"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
music-search: [q]
|
||||
|
||||
settings:
|
||||
- name: cookie
|
||||
type: text
|
||||
label: Cookie
|
||||
- name: info_cookie
|
||||
type: info_cookie
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
default: 4
|
||||
options:
|
||||
4: created
|
||||
7: seeders
|
||||
5: size
|
||||
1: title
|
||||
- name: type
|
||||
type: select
|
||||
label: Order requested from site
|
||||
default: desc
|
||||
options:
|
||||
desc: desc
|
||||
asc: asc
|
||||
- name: info_tpp
|
||||
type: info
|
||||
label: Results Per Page
|
||||
default: For best results, change the <b>Torrents per page:</b> setting to <b>100</b> on your account profile.
|
||||
- name: info_activity
|
||||
type: info
|
||||
label: Account Inactivity
|
||||
default: "If you don't log in to Vclib for 365 days, the system will automatically ban you (not just doing it, you have to actually log in)."
|
||||
|
||||
login:
|
||||
# using cookie method because site does a JS call to API/Challenge via JQuery to load response parm required for takelogin.php
|
||||
method: cookie
|
||||
inputs:
|
||||
cookie: "{{ .Config.cookie }}"
|
||||
test:
|
||||
path: index.php
|
||||
selector: a[href="logout.php"]
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: torrents.php
|
||||
inputs:
|
||||
$raw: "{{ range .Categories }}cat{{.}}=1&{{end}}"
|
||||
search: "{{ .Keywords }}"
|
||||
# 0 incldead, 1 active, 2 dead
|
||||
incldead: 0
|
||||
# 0 all, 1 normal, 2 free, 3 2x, 4 2xfree, 5 50%, 6 2x50%, 7 30%
|
||||
spstate: "{{ if .Config.freeleech }}2{{ else }}0{{ end }}"
|
||||
# 0 title, 1 descr, 3 uploader, 4 imdburl
|
||||
search_area: 0
|
||||
# 0 AND, 1 OR, 2 exact
|
||||
search_mode: 0
|
||||
sort: "{{ .Config.sort }}"
|
||||
type: "{{ .Config.type }}"
|
||||
notnewword: 1
|
||||
|
||||
rows:
|
||||
selector: table.torrents > tbody > tr:has(a[href*="download.php?id="])
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: a[href*="?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
title_default:
|
||||
selector: a[href*="details.php?id="]
|
||||
title:
|
||||
selector: a[title][href*="details.php?id="]
|
||||
attribute: title
|
||||
optional: true
|
||||
default: "{{ .Result.title_default }}"
|
||||
details:
|
||||
selector: a[href*="details.php?id="]
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href*="download.php?id="]
|
||||
attribute: href
|
||||
poster:
|
||||
selector: img[data-src]
|
||||
attribute: data-src
|
||||
date_elapsed:
|
||||
# time type: time elapsed (default)
|
||||
selector: td.rowfollow:nth-child(4) > span[title]
|
||||
attribute: title
|
||||
optional: true
|
||||
filters:
|
||||
- name: append
|
||||
args: " +08:00" # CST
|
||||
- name: dateparse
|
||||
args: "yyyy-MM-dd HH:mm:ss zzz"
|
||||
date_added:
|
||||
# time added
|
||||
selector: td.rowfollow:nth-child(4):not(:has(span))
|
||||
optional: true
|
||||
filters:
|
||||
- name: append
|
||||
args: " +08:00" # CST
|
||||
- name: dateparse
|
||||
args: "yyyy-MM-ddHH:mm:ss zzz"
|
||||
date:
|
||||
text: "{{ if or .Result.date_elapsed .Result.date_added }}{{ or .Result.date_elapsed .Result.date_added }}{{ else }}now{{ end }}"
|
||||
size:
|
||||
selector: td.rowfollow:nth-child(5)
|
||||
seeders:
|
||||
selector: td.rowfollow:nth-child(6)
|
||||
leechers:
|
||||
selector: td.rowfollow:nth-child(7)
|
||||
grabs:
|
||||
selector: td.rowfollow:nth-child(8)
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img.pro_free: 0
|
||||
img.pro_free2up: 0
|
||||
img.pro_50pctdown: 0.5
|
||||
img.pro_50pctdown2up: 0.5
|
||||
img.pro_30pctdown: 0.3
|
||||
"*": 1
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
img.pro_50pctdown2up: 2
|
||||
img.pro_free2up: 2
|
||||
img.pro_2up: 2
|
||||
"*": 1
|
||||
minimumratio:
|
||||
text: 0.8
|
||||
description:
|
||||
selector: td.rowfollow:nth-child(2)
|
||||
remove: a, b, font, img, span
|
||||
# NexusPHP v1.10.3 2026-08-02 (custom)
|
||||
@@ -0,0 +1,191 @@
|
||||
---
|
||||
id: vietmediaf
|
||||
name: VietMediaF
|
||||
description: "VietMediaF is a VIETNAMESE Private Torrent Tracker for MOVIES / TV"
|
||||
language: vi-VN
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://tracker.vietmediaf.store/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: Movies, desc: "Movies"}
|
||||
- {id: 2, cat: TV, desc: "TV"}
|
||||
- {id: 3, cat: Audio/Video, desc: "Music Video"}
|
||||
- {id: 4, cat: Books/Comics, desc: "Manga"}
|
||||
- {id: 5, cat: Other, desc: "Recycle Bin"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid, tvdbid, tmdbid]
|
||||
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://tracker.vietmediaf.store/\" target=\"_blank\">VietMediaF</a> account <i>My Settings</i> page and clicking on the <b>API Key</b> tab."
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: single_file_release_use_filename
|
||||
type: checkbox
|
||||
label: Use filename as title for single file releases
|
||||
default: true
|
||||
- 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
|
||||
error:
|
||||
- selector: a[href*="/login"]
|
||||
message:
|
||||
text: "The API key was not accepted by {{ .Config.sitelink }}."
|
||||
- selector: :root:contains("Account is Banned")
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://hdinnovations.github.io/UNIT3D/torrent_api.html
|
||||
# https://github.com/HDInnovations/UNIT3D/blob/master/app/Http/Controllers/API/TorrentController.php#L657
|
||||
- path: api/torrents/filter
|
||||
response:
|
||||
type: json
|
||||
|
||||
headers:
|
||||
Authorization: ["Bearer {{ .Config.apikey }}"]
|
||||
|
||||
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
|
||||
$raw: "{{ range .Categories }}&categories[]={{.}}{{end}}"
|
||||
name: "{{ .Keywords }}"
|
||||
seasonNumber: "{{ .Query.Season }}"
|
||||
episodeNumber: "{{ .Query.Ep }}"
|
||||
imdbId: "{{ .Query.IMDBIDShort }}"
|
||||
tmdbId: "{{ .Query.TMDBID }}"
|
||||
tvdbId: "{{ .Query.TVDBID }}"
|
||||
"free[]": "{{ if .Config.freeleech }}100{{ else }}{{ end }}"
|
||||
sortField: "{{ .Config.sort }}"
|
||||
sortDirection: "{{ .Config.type }}"
|
||||
perPage: 100
|
||||
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
args: ["\\.", " "]
|
||||
|
||||
rows:
|
||||
selector: data
|
||||
attribute: attributes
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: category_id
|
||||
title_optional:
|
||||
selector: name
|
||||
title_filename:
|
||||
selector: "files[0].name"
|
||||
optional: true
|
||||
files:
|
||||
selector: num_file
|
||||
title:
|
||||
text: "{{ if and (.Config.single_file_release_use_filename) (eq .Result.files \"1\") (.Result.title_filename) }}{{ .Result.title_filename }}{{ else }}{{ .Result.title_optional }}{{ end }}"
|
||||
details:
|
||||
selector: details_link
|
||||
download:
|
||||
selector: download_link
|
||||
poster:
|
||||
selector: meta.poster
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["https://via.placeholder.com/90x135", ""]
|
||||
imdbid:
|
||||
selector: imdb_id
|
||||
tmdbid:
|
||||
selector: tmdb_id
|
||||
tvdbid:
|
||||
selector: tvdb_id
|
||||
genre:
|
||||
selector: meta.genres
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["(?i)(Science Fiction)", "Science_Fiction"]
|
||||
- name: re_replace
|
||||
args: ["(?i)(TV Movie)", "TV_Movie"]
|
||||
- name: replace
|
||||
args: [" & ", "_&_"]
|
||||
_internal:
|
||||
selector: internal
|
||||
case:
|
||||
False: "{{ .False }}"
|
||||
True: "{{ .True }}"
|
||||
description:
|
||||
text: "{{ if .Result._internal }}Internal{{ else }}{{ end }}{{ if and .Result._internal .Result.genre }} | {{ else }}{{ end }}{{ .Result.genre }}"
|
||||
seeders:
|
||||
selector: seeders
|
||||
leechers:
|
||||
selector: leechers
|
||||
grabs:
|
||||
selector: times_completed
|
||||
date:
|
||||
# "created_at": "2021-10-18T00:34:50.000000Z" is returned by Newtonsoft.Json.Linq as 18/10/2021 00:34:50
|
||||
selector: created_at
|
||||
filters:
|
||||
- name: append
|
||||
args: " +00:00" # GMT
|
||||
- name: dateparse
|
||||
args: "MM/dd/yyyy HH:mm:ss zzz"
|
||||
size:
|
||||
selector: size
|
||||
_featured:
|
||||
selector: featured
|
||||
case:
|
||||
False: "{{ .False }}"
|
||||
True: "{{ .True }}"
|
||||
downloadvolumefactor_freeleech:
|
||||
# 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
|
||||
downloadvolumefactor:
|
||||
text: "{{ if .Result._featured }}0{{ else }}{{ .Result.downloadvolumefactor_freeleech }}{{ end }}"
|
||||
uploadvolumefactor_double_upload:
|
||||
# api returns False, True
|
||||
selector: double_upload
|
||||
case:
|
||||
False: 1 # normal
|
||||
True: 2 # double
|
||||
uploadvolumefactor:
|
||||
text: "{{ if .Result._featured }}2{{ else }}{{ .Result.uploadvolumefactor_double_upload }}{{ end }}"
|
||||
# global MR is 0.4 but torrents must be seeded for 7 days regardless of ratio
|
||||
# minimumratio:
|
||||
# text: 0.4
|
||||
minimumseedtime:
|
||||
# 7 days (as seconds = 7 x 24 x 60 x 60)
|
||||
text: 604800
|
||||
# json UNIT3D 9.2.0
|
||||
@@ -0,0 +1,188 @@
|
||||
---
|
||||
id: xdy
|
||||
name: XDY (修道院)
|
||||
description: "XDY (修道院) is a CHINESE Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
language: zh-CN
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://xdypt.vip/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 401, cat: Movies, desc: "电影(Movies)"}
|
||||
- {id: 402, cat: TV, desc: "电视剧(TV Series)"}
|
||||
- {id: 403, cat: TV, desc: "综艺(TV Shows"}
|
||||
- {id: 404, cat: TV/Documentary, desc: "纪录片(Documentaries)"}
|
||||
- {id: 405, cat: TV/Anime, desc: "动漫(Animations)"}
|
||||
- {id: 406, cat: Audio/Video, desc: "(MV)Music Videos"}
|
||||
- {id: 407, cat: TV/Sport, desc: "体育(Sports)"}
|
||||
- {id: 408, cat: Audio, desc: "音轨(HQ Audio)"}
|
||||
- {id: 409, cat: Other/Misc, desc: "音乐(Misc)"}
|
||||
- {id: 410, cat: Console, desc: "游戏(Games"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid, doubanid]
|
||||
movie-search: [q, imdbid, doubanid]
|
||||
music-search: [q]
|
||||
book-search: [q]
|
||||
|
||||
settings:
|
||||
- name: cookie
|
||||
type: text
|
||||
label: Cookie
|
||||
- name: info_cookie
|
||||
type: info_cookie
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
default: 4
|
||||
options:
|
||||
4: created
|
||||
7: seeders
|
||||
5: size
|
||||
1: title
|
||||
- name: type
|
||||
type: select
|
||||
label: Order requested from site
|
||||
default: desc
|
||||
options:
|
||||
desc: desc
|
||||
asc: asc
|
||||
- name: info_tpp
|
||||
type: info
|
||||
label: Results Per Page
|
||||
default: For best results, change the <b>Torrents per page:</b> setting to <b>100</b> on your account profile.
|
||||
- name: info_activity
|
||||
type: info
|
||||
label: Account Inactivity
|
||||
default: "Inactive accounts would be deleted based on the following rules:<ol><li>Veteran User or above would never be deleted.</li><li>Elite User or above would never be deleted if parked (at User CP).</li><li>Parked accounts would be deleted if users have not logged in for more than 400 days in a row.</li><li>Unparked accounts would be deleted if users have not logged in for more than 150 days in a row.</li><li>Accounts with both uploaded and downloaded amount being 0 would be deleted if users have not logged in for more than 100 days in a row.</li></ol>"
|
||||
|
||||
login:
|
||||
# using cookie method because site does a JS call to API/Challenge via JQuery to load response parm required for takelogin.php
|
||||
method: cookie
|
||||
inputs:
|
||||
cookie: "{{ .Config.cookie }}"
|
||||
test:
|
||||
path: index.php
|
||||
selector: a[href="logout.php"]
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: torrents.php
|
||||
inputs:
|
||||
$raw: "{{ range .Categories }}cat{{.}}=1&{{end}}"
|
||||
search: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{ else }}{{ end }}{{ if and .Query.DoubanID (eq .Query.IMDBID .False) }}{{ .Query.DoubanID }}{{ else }}{{ end }}{{ if and (eq .Query.IMDBID .False) (eq .Query.DoubanID .False) }}{{ .Keywords }}{{ else }}{{ end }}"
|
||||
# 0 incldead, 1 active, 2 dead
|
||||
incldead: 0
|
||||
# 0 all, 1 normal, 2 free, 3 2x, 4 2xfree, 5 50%, 6 2x50%, 7 30%
|
||||
spstate: "{{ if .Config.freeleech }}2{{ else }}0{{ end }}"
|
||||
# 0 title, 1 descr, 3 uploader, 4 imdburl
|
||||
search_area: "{{ if .Query.IMDBID }}4{{ else }}{{ end }}{{ if and .Query.DoubanID (eq .Query.IMDBID .False) }}1{{ else }}{{ end }}{{ if and (eq .Query.IMDBID .False) (eq .Query.DoubanID .False) }}0{{ else }}{{ end }}"
|
||||
# 0 AND, 1 OR, 2 exact
|
||||
search_mode: 0
|
||||
sort: "{{ .Config.sort }}"
|
||||
type: "{{ .Config.type }}"
|
||||
notnewword: 1
|
||||
|
||||
rows:
|
||||
selector: table.torrents > tbody > tr:has(a[href^="download.php?id="])
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: a[href^="?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
title_default:
|
||||
selector: a[href^="details.php?id="]
|
||||
title:
|
||||
selector: a[title][href^="details.php?id="]
|
||||
attribute: title
|
||||
optional: true
|
||||
default: "{{ .Result.title_default }}"
|
||||
details:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href^="download.php?id="]
|
||||
attribute: href
|
||||
poster:
|
||||
selector: img[data-src]
|
||||
attribute: data-src
|
||||
imdbid:
|
||||
# site currently only has a badge and rating, the id is not present. just in case a future update.
|
||||
selector: a[href*="imdb.com/title/tt"]
|
||||
attribute: href
|
||||
doubanid:
|
||||
# site currently only has a badge and rating, the id is not present. just in case a future update.
|
||||
selector: a[href*="movie.douban.com/subject/"]
|
||||
attribute: href
|
||||
# Users can change the "Time display type" in their tracker preferences:
|
||||
date_elapsed:
|
||||
# time type: time elapsed (default)
|
||||
selector: td:nth-child(4) > span[title]
|
||||
attribute: title
|
||||
optional: true
|
||||
filters:
|
||||
- name: append
|
||||
args: " +08:00" # CST
|
||||
- name: dateparse
|
||||
args: "yyyy-MM-dd HH:mm:ss zzz"
|
||||
date_added:
|
||||
# time added
|
||||
selector: td:nth-child(4):not(:has(span))
|
||||
optional: true
|
||||
filters:
|
||||
- name: append
|
||||
args: " +08:00" # CST
|
||||
- name: dateparse
|
||||
args: "yyyy-MM-ddHH:mm:ss zzz"
|
||||
date:
|
||||
text: "{{ if or .Result.date_elapsed .Result.date_added }}{{ or .Result.date_elapsed .Result.date_added }}{{ else }}now{{ end }}"
|
||||
size:
|
||||
selector: td:nth-child(5)
|
||||
optional: true
|
||||
default: 512MB
|
||||
seeders:
|
||||
selector: td:nth-child(6)
|
||||
optional: true
|
||||
default: 0
|
||||
leechers:
|
||||
selector: td:nth-child(7)
|
||||
optional: true
|
||||
default: 0
|
||||
grabs:
|
||||
selector: td:nth-child(8)
|
||||
optional: true
|
||||
default: 0
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img.pro_free: 0
|
||||
img.pro_free2up: 0
|
||||
img.pro_50pctdown: 0.5
|
||||
img.pro_50pctdown2up: 0.5
|
||||
img.pro_30pctdown: 0.3
|
||||
"*": 1
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
img.pro_50pctdown2up: 2
|
||||
img.pro_free2up: 2
|
||||
img.pro_2up: 2
|
||||
"*": 1
|
||||
description:
|
||||
selector: td:nth-child(2)
|
||||
remove: a, b, font, img, span
|
||||
# global MR is 0.8 but torrents must be seeded for 1 days regardless of ratio
|
||||
# minimumratio:
|
||||
# text: 0.8
|
||||
minimumseedtime:
|
||||
# 1 days (as seconds = 24 x 60 x 60)
|
||||
text: 86400
|
||||
# NexusPHP v1.10.2 2026-04-11
|
||||
@@ -0,0 +1,183 @@
|
||||
---
|
||||
id: xingtan
|
||||
name: Xingtan (杏坛)
|
||||
description: "Xingtan (杏坛) is a CHINESE Torrent Tracker focusing on Medical Resources EBOOKS"
|
||||
language: zh-CN
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://xingtan.one/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: EBooks, cat: Books, desc: EBooks}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
book-search: [q]
|
||||
|
||||
settings:
|
||||
- name: username
|
||||
type: text
|
||||
label: Username
|
||||
- name: password
|
||||
type: password
|
||||
label: Password
|
||||
- name: 2facode
|
||||
type: text
|
||||
label: 2FA code
|
||||
- name: info_2fa
|
||||
type: info
|
||||
label: "About 2FA code"
|
||||
default: "Only fill in the <b>2FA code</b> box if you have enabled <b>2FA</b> on the HDClone Web Site. Otherwise just leave it empty."
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
default: 4
|
||||
options:
|
||||
4: created
|
||||
7: seeders
|
||||
5: size
|
||||
1: title
|
||||
- name: type
|
||||
type: select
|
||||
label: Order requested from site
|
||||
default: desc
|
||||
options:
|
||||
desc: desc
|
||||
asc: asc
|
||||
- name: info_tpp
|
||||
type: info
|
||||
label: Results Per Page
|
||||
default: For best results, change the <b>Torrents per page:</b> setting to <b>100</b> on your account profile.
|
||||
- name: info_activity
|
||||
type: info
|
||||
label: Account Inactivity
|
||||
default: "Account retention rules:<ol><li>Extreme User and above will be retained forever</li><li>Crazy User and above will not have their account deleted after parking (in the control panel)</li><li> Users with a parked account will be deleted if they do not log in for 120 consecutive days</li><li>Users with a non-parked account will be deleted if they do not log in for 60 consecutive days</li><li>Users who have no traffic (i.e. upload/download data are both 0) will be deleted if they do not log in for 30 consecutive days.</li></ol>"
|
||||
|
||||
login:
|
||||
path: login.php
|
||||
method: form
|
||||
form: form[action="takelogin.php"]
|
||||
captcha:
|
||||
type: image
|
||||
selector: img[alt="CAPTCHA"]
|
||||
input: imagestring
|
||||
inputs:
|
||||
secret: ""
|
||||
username: "{{ .Config.username }}"
|
||||
password: "{{ .Config.password }}"
|
||||
two_step_code: "{{ .Config.2facode }}"
|
||||
logout: ""
|
||||
securelogin: ""
|
||||
ssl: yes
|
||||
trackerssl: yes
|
||||
error:
|
||||
- selector: td.embedded:has(h2:contains("失败"))
|
||||
message:
|
||||
selector: td.text
|
||||
test:
|
||||
path: index.php
|
||||
selector: a[href$="logout.php"]
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: torrents.php
|
||||
inputs:
|
||||
# cat search not supported due to many undocumented category ids
|
||||
search: "{{ .Keywords }}"
|
||||
# 0 incldead, 1 active, 2 dead
|
||||
incldead: 0
|
||||
# 0 all, 1 normal, 2 free, 3 2x, 4 2xfree, 5 50%, 6 2x50%, 7 30%
|
||||
spstate: "{{ if .Config.freeleech }}2{{ else }}0{{ end }}"
|
||||
# 0 title, 5 ISBN/DOI, 1 descr, 3 uploader, 4 imdburl, 6 subject
|
||||
search_area: 0
|
||||
# 0 AND, 2 exact
|
||||
search_mode: 0
|
||||
sort: "{{ .Config.sort }}"
|
||||
type: "{{ .Config.type }}"
|
||||
notnewword: 1
|
||||
|
||||
rows:
|
||||
selector: table.torrents > tbody > tr:has(table.torrentname)
|
||||
|
||||
fields:
|
||||
category:
|
||||
text: EBooks
|
||||
title_default:
|
||||
selector: a[href*="details.php?id="]
|
||||
title:
|
||||
selector: a[title][href*="details.php?id="]
|
||||
attribute: title
|
||||
optional: true
|
||||
default: "{{ .Result.title_default }}"
|
||||
details:
|
||||
selector: a[href*="details.php?id="]
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href*="download.php?id="]
|
||||
attribute: href
|
||||
date_elapsed:
|
||||
# time type: time elapsed (default)
|
||||
selector: td.rowfollow:nth-child(4) > span[title]
|
||||
attribute: title
|
||||
optional: true
|
||||
filters:
|
||||
- name: append
|
||||
args: " +08:00" # CST
|
||||
- name: dateparse
|
||||
args: "yyyy-MM-dd HH:mm:ss zzz"
|
||||
date_added:
|
||||
# time added
|
||||
selector: td.rowfollow:nth-child(4):not(:has(span))
|
||||
optional: true
|
||||
filters:
|
||||
- name: append
|
||||
args: " +08:00" # CST
|
||||
- name: dateparse
|
||||
args: "yyyy-MM-ddHH:mm:ss zzz"
|
||||
date:
|
||||
text: "{{ if or .Result.date_elapsed .Result.date_added }}{{ or .Result.date_elapsed .Result.date_added }}{{ else }}now{{ end }}"
|
||||
size:
|
||||
selector: td.rowfollow:nth-child(5)
|
||||
optional: true
|
||||
default: 512MB
|
||||
seeders:
|
||||
selector: td.rowfollow:nth-child(6)
|
||||
optional: true
|
||||
default: 0
|
||||
leechers:
|
||||
selector: td.rowfollow:nth-child(7)
|
||||
optional: true
|
||||
default: 0
|
||||
grabs:
|
||||
selector: td.rowfollow:nth-child(8)
|
||||
optional: true
|
||||
default: 0
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img.pro_free: 0
|
||||
img.pro_free2up: 0
|
||||
img.pro_50pctdown: 0.5
|
||||
img.pro_50pctdown2up: 0.5
|
||||
img.pro_30pctdown: 0.3
|
||||
"*": 1
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
img.pro_50pctdown2up: 2
|
||||
img.pro_free2up: 2
|
||||
img.pro_2up: 2
|
||||
"*": 1
|
||||
minimumratio:
|
||||
text: 2.0
|
||||
minimumseedtime:
|
||||
# 10 days (as seconds = 10 x 24 x 60 x 60)
|
||||
text: 864000
|
||||
description:
|
||||
selector: td:nth-child(2)
|
||||
remove: a, b, font, img, span
|
||||
# NexusPHP v1.8.2 2023-05-08
|
||||
@@ -0,0 +1,185 @@
|
||||
---
|
||||
id: xingwan
|
||||
name: Xingwan (星湾)
|
||||
description: "Xingwan (星湾) is a CHINESE Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
language: zh-CN
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://xingwan.cc/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 401, cat: Movies, desc: "Movies(🎬 电影)"}
|
||||
- {id: 402, cat: TV, desc: "TV Series(📺 电视剧)"}
|
||||
- {id: 410, cat: TV, desc: "ShortDrama(📱 短剧)"}
|
||||
- {id: 405, cat: TV/Anime, desc: "Animations(🌸 动漫)"}
|
||||
- {id: 403, cat: TV, desc: "TV Shows(🎤 综艺)"}
|
||||
- {id: 404, cat: TV/Documentary, desc: "Documentaries(🌍 纪录片)"}
|
||||
- {id: 416, cat: Books/Comics, desc: "Comics(📖 漫画)"}
|
||||
- {id: 406, cat: Audio/Video, desc: "Music Videos(🎵 音乐视频)"}
|
||||
- {id: 408, cat: Audio, desc: "HQ Audio(🎧 无损音乐)"}
|
||||
- {id: 407, cat: TV/Sport, desc: "Sports(⚽ 体育)"}
|
||||
- {id: 411, cat: Console, desc: "Games(🎮 游戏)"}
|
||||
- {id: 412, cat: PC, desc: "Software(💻 软件)"}
|
||||
- {id: 413, cat: Books, desc: "Ebooks(📚 电子书)"}
|
||||
- {id: 409, cat: Other, desc: "Misc(📦 其他杂项)"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid, doubanid]
|
||||
movie-search: [q, imdbid, doubanid]
|
||||
music-search: [q]
|
||||
book-search: [q]
|
||||
|
||||
settings:
|
||||
- name: cookie
|
||||
type: text
|
||||
label: Cookie
|
||||
- name: info_cookie
|
||||
type: info_cookie
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
default: 4
|
||||
options:
|
||||
4: created
|
||||
7: seeders
|
||||
5: size
|
||||
1: title
|
||||
- name: type
|
||||
type: select
|
||||
label: Order requested from site
|
||||
default: desc
|
||||
options:
|
||||
desc: desc
|
||||
asc: asc
|
||||
- name: info_tpp
|
||||
type: info
|
||||
label: Results Per Page
|
||||
default: For best results, change the <b>Torrents per page:</b> setting to <b>100</b> on your account profile.
|
||||
- name: info_activity
|
||||
type: info
|
||||
label: Account Inactivity
|
||||
default: "Account retention rules:<ol><li>Veteran User and above will be retained forever</li><li>Elite User and above will not have their account deleted after parking (in the control panel)</li><li>Users with a parked account will be deleted if they do not log in for 400 consecutive days</li><li>Users with a non-parked account will be deleted if they do not log in for 150 consecutive days</li><li>Users who have no traffic (i.e. upload/download data are both 0) will be deleted if they do not log in for 100 consecutive days.</li></ol>"
|
||||
|
||||
login:
|
||||
# using cookie method because site does a JS call to API/Challenge via JQuery to load response parm required for takelogin.php
|
||||
method: cookie
|
||||
inputs:
|
||||
cookie: "{{ .Config.cookie }}"
|
||||
test:
|
||||
path: index.php
|
||||
selector: a[href$="logout.php"]
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: torrents.php
|
||||
inputs:
|
||||
$raw: "{{ range .Categories }}cat{{.}}=1&{{end}}"
|
||||
search: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{ else }}{{ end }}{{ if and .Query.DoubanID (eq .Query.IMDBID .False) }}{{ .Query.DoubanID }}{{ else }}{{ end }}{{ if and (eq .Query.IMDBID .False) (eq .Query.DoubanID .False) }}{{ .Keywords }}{{ else }}{{ end }}"
|
||||
# 0 incldead, 1 active, 2 dead
|
||||
incldead: 0
|
||||
# 0 all, 1 normal, 2 free, 3 2x, 4 2xfree, 5 50%, 6 2x50%, 7 30%
|
||||
spstate: "{{ if .Config.freeleech }}2{{ else }}0{{ end }}"
|
||||
# 0 title, 1 descr, 3 uploader, 4 imdburl
|
||||
search_area: "{{ if .Query.IMDBID }}4{{ else }}{{ end }}{{ if and .Query.DoubanID (eq .Query.IMDBID .False) }}1{{ else }}{{ end }}{{ if and (eq .Query.IMDBID .False) (eq .Query.DoubanID .False) }}0{{ else }}{{ end }}"
|
||||
# 0 AND, 2 exact
|
||||
search_mode: 0
|
||||
sort: "{{ .Config.sort }}"
|
||||
type: "{{ .Config.type }}"
|
||||
notnewword: 1
|
||||
|
||||
rows:
|
||||
selector: table.torrents > tbody > tr:has(a[href*="download.php?id="])
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: a[href*="?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
title_default:
|
||||
selector: a[href*="details.php?id="]
|
||||
title:
|
||||
selector: a[title][href*="details.php?id="]
|
||||
attribute: title
|
||||
optional: true
|
||||
default: "{{ .Result.title_default }}"
|
||||
details:
|
||||
selector: a[href*="details.php?id="]
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href*="download.php?id="]
|
||||
attribute: href
|
||||
poster:
|
||||
selector: img[data-src]
|
||||
attribute: data-src
|
||||
imdbid:
|
||||
# site currently only has a badge and rating, the id is not present. just in case a future update.
|
||||
selector: a[href*="imdb.com/title/tt"]
|
||||
attribute: href
|
||||
doubanid:
|
||||
# site currently only has a badge and rating, the id is not present. just in case a future update.
|
||||
selector: a[href*="movie.douban.com/subject/"]
|
||||
attribute: href
|
||||
date_elapsed:
|
||||
# time type: time elapsed (default)
|
||||
selector: td.rowfollow:nth-child(4) > span[title]
|
||||
attribute: title
|
||||
optional: true
|
||||
filters:
|
||||
- name: append
|
||||
args: " +08:00" # CST
|
||||
- name: dateparse
|
||||
args: "yyyy-MM-dd HH:mm:ss zzz"
|
||||
date_added:
|
||||
# time added
|
||||
selector: td.rowfollow:nth-child(4):not(:has(span))
|
||||
optional: true
|
||||
filters:
|
||||
- name: append
|
||||
args: " +08:00" # CST
|
||||
- name: dateparse
|
||||
args: "yyyy-MM-ddHH:mm:ss zzz"
|
||||
date:
|
||||
text: "{{ if or .Result.date_elapsed .Result.date_added }}{{ or .Result.date_elapsed .Result.date_added }}{{ else }}now{{ end }}"
|
||||
size:
|
||||
selector: td.rowfollow:nth-child(5)
|
||||
optional: true
|
||||
default: 512MB
|
||||
seeders:
|
||||
selector: td.rowfollow:nth-child(6)
|
||||
optional: true
|
||||
default: 0
|
||||
leechers:
|
||||
selector: td.rowfollow:nth-child(7)
|
||||
optional: true
|
||||
default: 0
|
||||
grabs:
|
||||
selector: td.rowfollow:nth-child(8)
|
||||
optional: true
|
||||
default: 0
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img.pro_free: 0
|
||||
img.pro_free2up: 0
|
||||
img.pro_50pctdown: 0.5
|
||||
img.pro_50pctdown2up: 0.5
|
||||
img.pro_30pctdown: 0.3
|
||||
"*": 1
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
img.pro_50pctdown2up: 2
|
||||
img.pro_free2up: 2
|
||||
img.pro_2up: 2
|
||||
"*": 1
|
||||
description:
|
||||
selector: td.rowfollow:nth-child(2)
|
||||
remove: a, b, font, img, span
|
||||
# NexusPHP v1.10.1 2026-02-17
|
||||
@@ -0,0 +1,186 @@
|
||||
---
|
||||
id: xingyung
|
||||
name: Xingyung (星陨阁)
|
||||
description: "Xingyung (星陨阁) is a CHINESE Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
language: zh-CN
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://pt.xingyungept.org/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 409, cat: Other, desc: "其他/Misc"}
|
||||
- {id: 408, cat: Audio, desc: "音频/HQ Audio"}
|
||||
- {id: 406, cat: Audio/Video, desc: "MV/Music Videos"}
|
||||
- {id: 407, cat: TV/Sport, desc: "体育/Sports"}
|
||||
- {id: 410, cat: TV, desc: "短剧/Playlet"}
|
||||
- {id: 404, cat: TV/Documentary, desc: "纪录片/Documentary"}
|
||||
- {id: 405, cat: TV/Anime, desc: "动漫/Animations"}
|
||||
- {id: 403, cat: TV, desc: "综艺/TV Shows"}
|
||||
- {id: 402, cat: TV, desc: "电视剧/TVSeries"}
|
||||
- {id: 401, cat: Movies, desc: "电影/Movies"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid, doubanid]
|
||||
movie-search: [q, imdbid, doubanid]
|
||||
music-search: [q]
|
||||
book-search: [q]
|
||||
|
||||
settings:
|
||||
- name: cookie
|
||||
type: text
|
||||
label: Cookie
|
||||
- name: info_cookie
|
||||
type: info_cookie
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
default: 4
|
||||
options:
|
||||
4: created
|
||||
7: seeders
|
||||
5: size
|
||||
1: title
|
||||
- name: type
|
||||
type: select
|
||||
label: Order requested from site
|
||||
default: desc
|
||||
options:
|
||||
desc: desc
|
||||
asc: asc
|
||||
- name: info_tpp
|
||||
type: info
|
||||
label: Results Per Page
|
||||
default: For best results, change the <b>Torrents per page:</b> setting to <b>100</b> on your account profile.
|
||||
- name: info_activity
|
||||
type: info
|
||||
label: Account Inactivity
|
||||
default: "Account retention rules:<ol><li>Veteran User and above will be retained forever</li><li>Elite User and above will not have their account deleted after parking (in the control panel)</li><li>Users with a parked account will be deleted if they do not log in for 400 consecutive days</li><li>Users with a non-parked account will be deleted if they do not log in for 150 consecutive days</li><li>Users who have no traffic (i.e. upload/download data are both 0) will be deleted if they do not log in for 100 consecutive days.</li></ol>"
|
||||
|
||||
login:
|
||||
# using cookie method because site does a JS call to API/Challenge via JQuery to load response parm required for takelogin.php
|
||||
method: cookie
|
||||
inputs:
|
||||
cookie: "{{ .Config.cookie }}"
|
||||
test:
|
||||
path: index.php
|
||||
selector: a[href="logout.php"]
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: torrents.php
|
||||
inputs:
|
||||
$raw: "{{ range .Categories }}cat{{.}}=1&{{end}}"
|
||||
search: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{ else }}{{ end }}{{ if and .Query.DoubanID (eq .Query.IMDBID .False) }}{{ .Query.DoubanID }}{{ else }}{{ end }}{{ if and (eq .Query.IMDBID .False) (eq .Query.DoubanID .False) }}{{ .Keywords }}{{ else }}{{ end }}"
|
||||
# 0 incldead, 1 active, 2 dead
|
||||
incldead: 0
|
||||
# 0 all, 1 normal, 2 free, 3 2x, 4 2xfree, 5 50%, 6 2x50%, 7 30%
|
||||
spstate: "{{ if .Config.freeleech }}2{{ else }}0{{ end }}"
|
||||
# 0 title, 1 descr, 3 uploader, 4 imdburl
|
||||
search_area: "{{ if .Query.IMDBID }}4{{ else }}{{ end }}{{ if and .Query.DoubanID (eq .Query.IMDBID .False) }}1{{ else }}{{ end }}{{ if and (eq .Query.IMDBID .False) (eq .Query.DoubanID .False) }}0{{ else }}{{ end }}"
|
||||
# 0 AND, 2 exact
|
||||
search_mode: 0
|
||||
sort: "{{ .Config.sort }}"
|
||||
type: "{{ .Config.type }}"
|
||||
notnewword: 1
|
||||
|
||||
rows:
|
||||
selector: table.torrents > tbody > tr:has(a[href*="download.php?id="])
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: a[href*="?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
title_default:
|
||||
selector: a[href*="details.php?id="]
|
||||
title:
|
||||
selector: a[title][href*="details.php?id="]
|
||||
attribute: title
|
||||
optional: true
|
||||
default: "{{ .Result.title_default }}"
|
||||
details:
|
||||
selector: a[href*="details.php?id="]
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href*="download.php?id="]
|
||||
attribute: href
|
||||
poster:
|
||||
selector: img[data-src]
|
||||
attribute: data-src
|
||||
imdbid:
|
||||
# site currently only has a badge and rating, the id is not present. just in case a future update.
|
||||
selector: a[href*="imdb.com/title/tt"]
|
||||
attribute: href
|
||||
doubanid:
|
||||
# site currently only has a badge and rating, the id is not present. just in case a future update.
|
||||
selector: a[href*="movie.douban.com/subject/"]
|
||||
attribute: href
|
||||
date_elapsed:
|
||||
# time type: time elapsed (default)
|
||||
selector: td.rowfollow:nth-child(4) > span[title]
|
||||
attribute: title
|
||||
optional: true
|
||||
filters:
|
||||
- name: append
|
||||
args: " +08:00" # CST
|
||||
- name: dateparse
|
||||
args: "yyyy-MM-dd HH:mm:ss zzz"
|
||||
date_added:
|
||||
# time added
|
||||
selector: td.rowfollow:nth-child(4):not(:has(span))
|
||||
optional: true
|
||||
filters:
|
||||
- name: append
|
||||
args: " +08:00" # CST
|
||||
- name: dateparse
|
||||
args: "yyyy-MM-ddHH:mm:ss zzz"
|
||||
date:
|
||||
text: "{{ if or .Result.date_elapsed .Result.date_added }}{{ or .Result.date_elapsed .Result.date_added }}{{ else }}now{{ end }}"
|
||||
size:
|
||||
selector: td.rowfollow:nth-child(5)
|
||||
optional: true
|
||||
default: 512MB
|
||||
seeders:
|
||||
selector: td.rowfollow:nth-child(6)
|
||||
optional: true
|
||||
default: 0
|
||||
leechers:
|
||||
selector: td.rowfollow:nth-child(7)
|
||||
optional: true
|
||||
default: 0
|
||||
grabs:
|
||||
selector: td.rowfollow:nth-child(8)
|
||||
optional: true
|
||||
default: 0
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img.pro_free: 0
|
||||
img.pro_free2up: 0
|
||||
img.pro_50pctdown: 0.5
|
||||
img.pro_50pctdown2up: 0.5
|
||||
img.pro_30pctdown: 0.3
|
||||
"*": 1
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
img.pro_50pctdown2up: 2
|
||||
img.pro_free2up: 2
|
||||
img.pro_2up: 2
|
||||
"*": 1
|
||||
minimumratio:
|
||||
text: 2.0
|
||||
minimumseedtime:
|
||||
# 2 days (as seconds = 2 x 24 x 60 x 60)
|
||||
text: 172800
|
||||
description:
|
||||
selector: td.rowfollow:nth-child(2)
|
||||
remove: a, b, font, img, span
|
||||
# NexusPHP v1.9.6 2025-06-25
|
||||
@@ -0,0 +1,144 @@
|
||||
---
|
||||
id: xwtclassics2fa
|
||||
name: XWT-Classics2FA
|
||||
description: "XWT-Classics is a Private Torrent Tracker for CLASSIC PROFESSIONAL WRESTLING. This indexer uses cookie login for 2FA."
|
||||
language: en-US
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://xwt-classics.net/
|
||||
legacylinks:
|
||||
- http://xwt-classics.net/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: TV/Sport, desc: "DVD"}
|
||||
- {id: 9, cat: TV/Sport, desc: "Florida"}
|
||||
- {id: 7, cat: TV/Sport, desc: "International"}
|
||||
- {id: 6, cat: TV/Sport, desc: "Japan"}
|
||||
- {id: 8, cat: TV/Sport, desc: "Misc"}
|
||||
- {id: 11, cat: TV/Sport, desc: "NWA"}
|
||||
- {id: 4, cat: TV/Sport, desc: "UWF/Mid-South"}
|
||||
- {id: 12, cat: TV/Sport, desc: "WCW"}
|
||||
- {id: 5, cat: TV/Sport, desc: "World Class"}
|
||||
- {id: 10, cat: TV/Sport, desc: "WWE 24/7"}
|
||||
- {id: 13, cat: TV/Sport, desc: "WWE Network"}
|
||||
- {id: 2, cat: TV/Sport, desc: "WWF"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
|
||||
settings:
|
||||
- name: cookie
|
||||
type: text
|
||||
label: Cookie
|
||||
- name: info_cookie
|
||||
type: info_cookie
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: seedbox
|
||||
type: checkbox
|
||||
label: "Use SeedBox Download Link"
|
||||
default: false
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
default: 4
|
||||
options:
|
||||
4: created
|
||||
7: seeders
|
||||
5: size
|
||||
1: title
|
||||
- name: type
|
||||
type: select
|
||||
label: Order requested from site
|
||||
default: desc
|
||||
options:
|
||||
desc: desc
|
||||
asc: asc
|
||||
- name: info_activity
|
||||
type: info
|
||||
label: Account Inactivity
|
||||
default: "Accounts inactive for more than 42 days are automatically deleted."
|
||||
|
||||
login:
|
||||
# using cookie method because login page can present second page for 2FA when enabled
|
||||
method: cookie
|
||||
inputs:
|
||||
cookie: "{{ .Config.cookie }}"
|
||||
test:
|
||||
path: browse.php
|
||||
selector: a[href="logout.php"]
|
||||
|
||||
search:
|
||||
paths:
|
||||
# http://xwt-classics.net/browse.php?search=ricks&cat=0&incldead=1
|
||||
- path: browse.php
|
||||
inputs:
|
||||
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
|
||||
# 0 active, 1 incldead, 2 onlydead, 3 freleech
|
||||
incldead: "{{ if .Config.freeleech }}3{{ else }}1{{ end }}"
|
||||
search: "{{ .Keywords }}"
|
||||
sort: "{{ .Config.sort }}"
|
||||
type: "{{ .Config.type }}"
|
||||
|
||||
rows:
|
||||
selector: table[border="0"][cellspacing="0"][cellpadding="5"] tr:has(a[href^="download.php?id="])
|
||||
|
||||
fields:
|
||||
category_optional:
|
||||
selector: a[href^="browse.php?cat="]
|
||||
attribute: href
|
||||
optional: true
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
category:
|
||||
text: "{{ if .Result.category_optional }}{{ .Result.category_optional }}{{ else }}8{{ end }}"
|
||||
title:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: title
|
||||
download_1:
|
||||
selector: a[href^="download.php"]
|
||||
attribute: href
|
||||
download_2:
|
||||
selector: a[href^="download2.php"]
|
||||
attribute: href
|
||||
download:
|
||||
text: "{{ if .Config.seedbox }}{{ .Result.download_2 }}{{ else }}{{ .Result.download_1 }}{{ end }}"
|
||||
details:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
files:
|
||||
selector: td:nth-child(3)
|
||||
grabs:
|
||||
selector: td:nth-child(7)
|
||||
size:
|
||||
selector: td:nth-child(6)
|
||||
seeders:
|
||||
selector: td:nth-last-child(3)
|
||||
leechers:
|
||||
selector: td:nth-last-child(2)
|
||||
date:
|
||||
selector: td:nth-child(5)
|
||||
filters:
|
||||
- name: append
|
||||
args: " -02:00" # WGST
|
||||
- name: dateparse
|
||||
args: "yyyy-MM-ddHH:mm:ss zzz"
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img[src="pic/freeleech.png"]: 0
|
||||
"*": 1
|
||||
uploadvolumefactor:
|
||||
text: 1
|
||||
minimumratio:
|
||||
text: 0.7
|
||||
minimumseedtime:
|
||||
# 1 day (as seconds = 24 x 60 x 60)
|
||||
text: 86400
|
||||
# engine n/a
|
||||
@@ -0,0 +1,197 @@
|
||||
---
|
||||
id: xwtorrents2fa
|
||||
name: XWtorrents2FA
|
||||
description: "XtremeWrestlingTorrents (XWT) is a Private Torrent Tracker for PROFESSIONAL WRESTLING / MMA. This indexer uses cookie login for 2FA."
|
||||
language: en-US
|
||||
type: private
|
||||
encoding: windows-1252
|
||||
links:
|
||||
- https://xtremewrestlingtorrents.net/
|
||||
legacylinks:
|
||||
- http://xtremewrestlingtorrents.net/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 82, cat: TV/Sport, desc: "AEW Collision"}
|
||||
- {id: 83, cat: TV/Sport, desc: "AEW Collision HD"}
|
||||
- {id: 74, cat: TV/Sport, desc: "AEW Dynamite"}
|
||||
- {id: 75, cat: TV/Sport, desc: "AEW Dynamite HD"}
|
||||
- {id: 78, cat: TV/Sport, desc: "AEW PPV's"}
|
||||
- {id: 79, cat: TV/Sport, desc: "AEW PPV's HD"}
|
||||
- {id: 76, cat: TV/Sport, desc: "AEW Rampage"}
|
||||
- {id: 77, cat: TV/Sport, desc: "AEW Rampage HD"}
|
||||
- {id: 47, cat: TV/Sport, desc: "Boxing"}
|
||||
- {id: 14, cat: Movies, desc: "Documentary"}
|
||||
- {id: 20, cat: TV/Sport, desc: "DVD"}
|
||||
- {id: 88, cat: Books, desc: "eBooks"}
|
||||
- {id: 2, cat: TV/Sport, desc: "ECW Original"}
|
||||
- {id: 26, cat: TV/Sport, desc: "ECW Weekly"}
|
||||
- {id: 21, cat: TV/Sport, desc: "Int Indy's"}
|
||||
- {id: 69, cat: TV/Sport, desc: "Lucha Libre"}
|
||||
- {id: 70, cat: TV/Sport, desc: "Lucha Libre HD"}
|
||||
- {id: 23, cat: TV/Sport, desc: "Misc"}
|
||||
- {id: 24, cat: TV/Sport, desc: "MMA"}
|
||||
- {id: 59, cat: TV/Sport, desc: "MMA HD"}
|
||||
- {id: 86, cat: TV/Sport, desc: "Netflix"}
|
||||
- {id: 87, cat: TV/Sport, desc: "Netflix HD"}
|
||||
- {id: 30, cat: TV/Sport, desc: "Packs"}
|
||||
- {id: 68, cat: TV/Sport, desc: "Podcasts"}
|
||||
- {id: 29, cat: TV/Sport, desc: "Puro"}
|
||||
- {id: 18, cat: TV/Sport, desc: "ROH"}
|
||||
- {id: 52, cat: TV/Sport, desc: "ROH HD"}
|
||||
- {id: 45, cat: TV/Sport, desc: "Shoot Interviews"}
|
||||
- {id: 4, cat: TV/Sport, desc: "Single Matches"}
|
||||
- {id: 7, cat: TV/Sport, desc: "TNA Impact"}
|
||||
- {id: 49, cat: TV/Sport, desc: "TNA Impact HD"}
|
||||
- {id: 6, cat: TV/Sport, desc: "TNA PPV's"}
|
||||
- {id: 55, cat: TV/Sport, desc: "TNA PPV's HD"}
|
||||
- {id: 66, cat: TV/Sport, desc: "Total Divas"}
|
||||
- {id: 67, cat: TV/Sport, desc: "Total Divas HD"}
|
||||
- {id: 57, cat: TV/Sport, desc: "Tough Enough"}
|
||||
- {id: 58, cat: TV/Sport, desc: "Tough Enough HD"}
|
||||
- {id: 22, cat: TV/Sport, desc: "USA Indy's"}
|
||||
- {id: 12, cat: TV/Sport, desc: "WCW"}
|
||||
- {id: 71, cat: TV/Sport, desc: "Womens Wrestling"}
|
||||
- {id: 15, cat: TV/Sport, desc: "Wrestling Films"}
|
||||
- {id: 72, cat: TV/Sport, desc: "WWE 205 Live"}
|
||||
- {id: 73, cat: TV/Sport, desc: "WWE 205 Live HD"}
|
||||
- {id: 16, cat: TV/Sport, desc: "WWE Heat"}
|
||||
- {id: 63, cat: TV/Sport, desc: "WWE Main Event"}
|
||||
- {id: 64, cat: TV/Sport, desc: "WWE Network"}
|
||||
- {id: 65, cat: TV/Sport, desc: "WWE Network HD"}
|
||||
- {id: 46, cat: TV/Sport, desc: "WWE NXT"}
|
||||
- {id: 50, cat: TV/Sport, desc: "WWE NXT HD"}
|
||||
- {id: 9, cat: TV/Sport, desc: "WWE PPV's"}
|
||||
- {id: 56, cat: TV/Sport, desc: "WWE PPV's HD"}
|
||||
- {id: 10, cat: TV/Sport, desc: "WWE RAW"}
|
||||
- {id: 51, cat: TV/Sport, desc: "WWE RAW HD"}
|
||||
- {id: 11, cat: TV/Sport, desc: "WWE Smackdown"}
|
||||
- {id: 53, cat: TV/Sport, desc: "WWE Smackdown HD"}
|
||||
- {id: 43, cat: TV/Sport, desc: "WWE Superstars"}
|
||||
- {id: 54, cat: TV/Sport, desc: "WWE Superstars HD"}
|
||||
- {id: 89, cat: TV/Sport, desc: "WWE Vault"}
|
||||
- {id: 19, cat: TV/Sport, desc: "WWE Velocity"}
|
||||
- {id: 31, cat: TV/Sport, desc: "WWE Vintage"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
book-search: [q]
|
||||
|
||||
settings:
|
||||
- name: cookie
|
||||
type: text
|
||||
label: Cookie
|
||||
- name: info_cookie
|
||||
type: info_cookie
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: seedbox
|
||||
type: checkbox
|
||||
label: "Use SeedBox Download Link"
|
||||
default: false
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
default: 4
|
||||
options:
|
||||
4: created
|
||||
7: seeders
|
||||
5: size
|
||||
1: title
|
||||
- name: type
|
||||
type: select
|
||||
label: Order requested from site
|
||||
default: desc
|
||||
options:
|
||||
desc: desc
|
||||
asc: asc
|
||||
- name: info_flaresolverr
|
||||
type: info_flaresolverr
|
||||
|
||||
login:
|
||||
# using cookie method because login page can present second page for 2FA when enabled
|
||||
method: cookie
|
||||
inputs:
|
||||
cookie: "{{ .Config.cookie }}"
|
||||
test:
|
||||
path: browse.php
|
||||
selector: a[href="logout.php"]
|
||||
|
||||
search:
|
||||
paths:
|
||||
# http://xtremewrestlingtorrents.net/browse.php?search=halftime+heat&c46=1&c51=1&c31=1&c11=1&incldead=1
|
||||
- path: browse.php
|
||||
inputs:
|
||||
$raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
|
||||
# 0 active, 1 incldead, 2 onlydead, 3 freeleech, 4 descr
|
||||
incldead: "{{ if .Config.freeleech }}3{{ else }}1{{ end }}"
|
||||
search: "{{ .Keywords }}"
|
||||
sort: "{{ .Config.sort }}"
|
||||
type: "{{ .Config.type }}"
|
||||
|
||||
rows:
|
||||
selector: table[border="0"][cellspacing="0"][cellpadding="5"] tr:has(a[href^="download.php?id="])
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: a[href^="browse.php?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
download_1:
|
||||
selector: a[href^="download.php"]
|
||||
attribute: href
|
||||
title_default:
|
||||
# title can be missing so we use the &name= from the DL as a standby
|
||||
text: "{{ .Result.download_1 }}"
|
||||
filters:
|
||||
- name: querystring
|
||||
args: name
|
||||
- name: replace
|
||||
args: [".torrent", ""]
|
||||
title:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: title
|
||||
optional: true
|
||||
default: "{{ .Result.title_default }}"
|
||||
download_2:
|
||||
selector: a[href^="download2.php"]
|
||||
attribute: href
|
||||
download:
|
||||
text: "{{ if .Config.seedbox }}{{ .Result.download_2 }}{{ else }}{{ .Result.download_1 }}{{ end }}"
|
||||
details:
|
||||
selector: a[href^="details.php?id="]
|
||||
attribute: href
|
||||
files:
|
||||
selector: td:nth-child(3)
|
||||
grabs:
|
||||
selector: td:nth-child(7)
|
||||
size:
|
||||
selector: td:nth-child(6)
|
||||
seeders:
|
||||
selector: td:nth-last-child(3)
|
||||
leechers:
|
||||
selector: td:nth-last-child(2)
|
||||
date:
|
||||
selector: td:nth-child(5)
|
||||
# auto adjusted by site account profile
|
||||
filters:
|
||||
- name: dateparse
|
||||
args: "yyyy-MM-ddHH:mm:ss"
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img[src="pic/freeleech.png"]: 0
|
||||
"*": 1
|
||||
uploadvolumefactor:
|
||||
text: 1
|
||||
minimumratio:
|
||||
text: 0.7
|
||||
minimumseedtime:
|
||||
# 1 day (as seconds = 24 x 60 x 60)
|
||||
text: 86400
|
||||
# engine n/a
|
||||
@@ -0,0 +1,197 @@
|
||||
---
|
||||
id: yggreborn-api
|
||||
name: YggReborn (API)
|
||||
description: "YggReborn is a FRENCH Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
language: fr-FR
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
requestDelay: 2.1
|
||||
links:
|
||||
- https://www.yggreborn.org/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
# from https://www.yggreborn.org/api?t=caps&apikey=YOUR-PASSKEY
|
||||
- {id: 1000, cat: PC/Games, desc: "PC/Games"}
|
||||
- {id: 1100, cat: PC/Games, desc: "PC/Games/Windows"}
|
||||
- {id: 1101, cat: Console, desc: "PC/Games/Nintendo"}
|
||||
- {id: 1102, cat: Console, desc: "PC/Games/Sony"}
|
||||
- {id: 1103, cat: PC/Games, desc: "PC/Games/Microsoft"}
|
||||
- {id: 1104, cat: PC/Games, desc: "PC/Games/Linux"}
|
||||
- {id: 1105, cat: PC/Games, desc: "PC/Games/macOS"}
|
||||
- {id: 1106, cat: Console, desc: "PC/Games/Smartphone"}
|
||||
- {id: 1107, cat: Console, desc: "PC/Games/Tablette"}
|
||||
- {id: 1108, cat: Console, desc: "PC/Games/Autre"}
|
||||
- {id: 1110, cat: PC/Games, desc: "PC/Games/Émulateurs"}
|
||||
- {id: 1111, cat: PC/Games, desc: "PC/Games/ROMs"}
|
||||
- {id: 2000, cat: Movies, desc: "Movies"}
|
||||
- {id: 2100, cat: Movies, desc: "Movies/Film"}
|
||||
- {id: 2101, cat: Movies, desc: "Movies/Animation"}
|
||||
- {id: 2102, cat: Movies, desc: "Movies/Documentaire"}
|
||||
- {id: 2103, cat: Movies, desc: "Movies/Concert"}
|
||||
- {id: 2104, cat: Movies, desc: "Movies/Sport"}
|
||||
- {id: 2105, cat: Movies, desc: "Movies/Spectacle"}
|
||||
- {id: 2106, cat: Movies, desc: "Movies/Vidéoclips"}
|
||||
- {id: 3000, cat: Audio, desc: "Audio"}
|
||||
- {id: 3100, cat: Audio, desc: "Audio/Musique"}
|
||||
- {id: 3101, cat: Audio, desc: "Audio/Podcast / Radio"}
|
||||
- {id: 3102, cat: Audio, desc: "Audio/Samples"}
|
||||
- {id: 3103, cat: Audio, desc: "Audio/Karaoké"}
|
||||
- {id: 4000, cat: PC, desc: "PC"}
|
||||
- {id: 4100, cat: PC, desc: "PC/Windows"}
|
||||
- {id: 4101, cat: PC, desc: "PC/macOS"}
|
||||
- {id: 4102, cat: PC, desc: "PC/Linux"}
|
||||
- {id: 4103, cat: PC, desc: "PC/Smartphone"}
|
||||
- {id: 4104, cat: PC, desc: "PC/Tablette"}
|
||||
- {id: 4105, cat: PC, desc: "PC/Formation"}
|
||||
- {id: 4106, cat: PC, desc: "PC/Autre"}
|
||||
- {id: 4110, cat: PC, desc: "PC/GPS Applications"}
|
||||
- {id: 4111, cat: PC, desc: "PC/GPS Cartes"}
|
||||
- {id: 4112, cat: PC, desc: "PC/GPS Divers"}
|
||||
- {id: 5000, cat: TV, desc: "TV"}
|
||||
- {id: 5100, cat: TV, desc: "TV/Série TV"}
|
||||
- {id: 5101, cat: TV, desc: "TV/Animation série"}
|
||||
- {id: 5102, cat: TV, desc: "TV/Émission TV"}
|
||||
- {id: 6000, cat: XXX, desc: "XXX"}
|
||||
- {id: 6100, cat: XXX, desc: "XXX/Films"}
|
||||
- {id: 6101, cat: XXX, desc: "XXX/Images"}
|
||||
- {id: 6102, cat: XXX, desc: "XXX/Hentai"}
|
||||
- {id: 6103, cat: XXX, desc: "XXX/Ebooks"}
|
||||
- {id: 6104, cat: XXX, desc: "XXX/Jeux"}
|
||||
- {id: 7000, cat: Books, desc: "Books"}
|
||||
- {id: 7100, cat: Books, desc: "Books/Livres"}
|
||||
- {id: 7101, cat: Books, desc: "Books/Presse"}
|
||||
- {id: 7102, cat: Books, desc: "Books/Bandes dessinées"}
|
||||
- {id: 7103, cat: Books, desc: "Books/Mangas"}
|
||||
- {id: 7104, cat: Books, desc: "Books/Comics"}
|
||||
- {id: 7105, cat: Books, desc: "Books/Livres audio"}
|
||||
- {id: 8000, cat: Other, desc: "Other"}
|
||||
- {id: 8100, cat: Other, desc: "Other/Objets 3D"}
|
||||
- {id: 8101, cat: Other, desc: "Other/Personnages 3D"}
|
||||
- {id: 8110, cat: Other, desc: "Other/Scripts PHP / CMS"}
|
||||
- {id: 8111, cat: Other, desc: "Other/WordPress"}
|
||||
- {id: 8112, cat: Other, desc: "Other/Divers"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
music-search: [q]
|
||||
book-search: [q]
|
||||
|
||||
settings:
|
||||
- name: passkey
|
||||
type: text
|
||||
label: PassKey
|
||||
- name: info_key
|
||||
type: info
|
||||
label: About your PassKey
|
||||
default: "You can find the API PassKey Key by accessing the <a href=\"https://www.yggreborn.org/guide-api\" target=\"_blank\">YggReborn Guide API</a> page and scrolling down to the <b>Authentification</b> section."
|
||||
- name: apiurl
|
||||
label: API URL
|
||||
type: text
|
||||
default: api.yggreborn.org
|
||||
- name: multilang
|
||||
type: checkbox
|
||||
label: Replace MULTi by another language in release name
|
||||
default: false
|
||||
- name: multilanguage
|
||||
type: select
|
||||
label: Replace MULTi by this language
|
||||
default: FRENCH
|
||||
options:
|
||||
FRENCH: FRENCH
|
||||
MULTi.FRENCH: MULTi.FRENCH
|
||||
ENGLISH: ENGLISH
|
||||
MULTi.ENGLISH: MULTi.ENGLISH
|
||||
VOSTFR: VOSTFR
|
||||
MULTi.VOSTFR: MULTi.VOSTFR
|
||||
- name: vostfr
|
||||
type: checkbox
|
||||
label: Replace VOSTFR and SUBFRENCH with ENGLISH
|
||||
default: false
|
||||
|
||||
login:
|
||||
path: "https://{{ .Config.apiurl }}/api"
|
||||
method: get
|
||||
inputs:
|
||||
t: search
|
||||
apikey: "{{ .Config.passkey }}"
|
||||
limit: 1
|
||||
error:
|
||||
- selector: ":contains(\"invalid api key\")"
|
||||
|
||||
search:
|
||||
paths:
|
||||
# docs at https://www.yggreborn.org/guide-api
|
||||
- path: "https://{{ .Config.apiurl }}/api"
|
||||
response:
|
||||
type: xml
|
||||
|
||||
inputs:
|
||||
apikey: "{{ .Config.passkey }}"
|
||||
t: "{{ if .Keywords }}{{ .Query.Type }}{{ else }}search{{ end }}"
|
||||
q: "{{ .Keywords }}"
|
||||
cat: "{{ join .Categories \",\" }}"
|
||||
season: "{{ .Query.Season }}"
|
||||
ep: "{{ .Query.Ep }}"
|
||||
limit: 50
|
||||
|
||||
rows:
|
||||
selector: rss > channel > item
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: "[name=category]"
|
||||
attribute: value
|
||||
title_phase1:
|
||||
selector: title
|
||||
title_vostfr:
|
||||
text: "{{ .Result.title_phase1 }}"
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["(?i)\\b(vostfr|subfrench)\\b", "ENGLISH"]
|
||||
title_phase2:
|
||||
text: "{{ if .Config.vostfr }}{{ .Result.title_vostfr }}{{ else }}{{ .Result.title_phase1 }}{{ end }}"
|
||||
title_multilang:
|
||||
text: "{{ .Result.title_phase2 }}"
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["(?i)\\b(MULTI(?!.*(?:FRENCH|ENGLISH|VOSTFR|VF2|VFF|VFQ|VOQ|VFI|VOF)))\\b", "{{ .Config.multilanguage }}"]
|
||||
title:
|
||||
text: "{{ if .Config.multilang }}{{ .Result.title_multilang }}{{ else }}{{ .Result.title_phase2 }}{{ end }}"
|
||||
details:
|
||||
selector: comments
|
||||
download:
|
||||
selector: enclosure
|
||||
attribute: url
|
||||
infohash:
|
||||
selector: "[name=infohash]"
|
||||
attribute: value
|
||||
date:
|
||||
# e.g. Tue, 31 Mar 2026 20:06:13 +0100
|
||||
selector: pubDate
|
||||
filters:
|
||||
- name: dateparse
|
||||
args: "ddd, dd MMM yyyy HH:mm:ss zzz"
|
||||
size:
|
||||
selector: "[name=size]"
|
||||
attribute: value
|
||||
seeders:
|
||||
selector: "[name=seeders]"
|
||||
attribute: value
|
||||
leechers:
|
||||
selector: "[name=leechers]"
|
||||
attribute: value
|
||||
grabs:
|
||||
selector: "[name=grabs]"
|
||||
attribute: value
|
||||
downloadvolumefactor:
|
||||
selector: "[name=downloadvolumefactor]"
|
||||
attribute: value
|
||||
uploadvolumefactor:
|
||||
selector: "[name=uploadvolumefactor]"
|
||||
attribute: value
|
||||
minimumratio:
|
||||
text: 1.0
|
||||
# torznab xml
|
||||
@@ -0,0 +1,100 @@
|
||||
---
|
||||
id: zamundarip
|
||||
name: Zamunda RIP
|
||||
description: "Zamunda RIP is a BULGARIAN Public Torrent Archive for MOVIES / TV / GENERAL"
|
||||
language: bg-BG
|
||||
type: public
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://zamunda.rip/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
# from https://zamunda.rip/api/torznab/api?t=caps
|
||||
- {id: 1000, cat: Console, desc: "Console"}
|
||||
- {id: 1050, cat: Console/XBox, desc: "Игри/Xbox"}
|
||||
- {id: 2000, cat: Movies, desc: "Movies"}
|
||||
- {id: 2040, cat: Movies/HD, desc: "Филми/HD"}
|
||||
- {id: 2030, cat: Movies/SD, desc: "Филми/SD"}
|
||||
- {id: 2010, cat: Movies, desc: "Филми/Русия"}
|
||||
- {id: 2020, cat: Movies/Other, desc: "Филми/Документални"}
|
||||
- {id: 2050, cat: Movies/BluRay, desc: "Blu-ray"}
|
||||
- {id: 2060, cat: Movies/3D, desc: "Филми/3D"}
|
||||
- {id: 3000, cat: Audio, desc: "Audio"}
|
||||
- {id: 3010, cat: Audio, desc: "Музика"}
|
||||
- {id: 3020, cat: Audio/Video, desc: "Музика/DVD-R"}
|
||||
- {id: 3040, cat: Audio, desc: "Музика/DTS"}
|
||||
- {id: 4000, cat: PC, desc: "PC"}
|
||||
- {id: 4050, cat: PC/Games, desc: "Игри/PC ISO"}
|
||||
- {id: 4030, cat: PC/Mac, desc: "Игри/Mac"}
|
||||
- {id: 4020, cat: PC/ISO, desc: "Програми/PC ISO"}
|
||||
- {id: 4010, cat: PC, desc: "Програми/други"}
|
||||
- {id: 4040, cat: PC/Mobile-Other, desc: "Mobile/GSM"}
|
||||
- {id: 4070, cat: PC/Mobile-Android, desc: "Андроид/Игри"}
|
||||
- {id: 5000, cat: TV, desc: "TV"}
|
||||
- {id: 5070, cat: TV/Anime, desc: "Анимации/Аниме"}
|
||||
- {id: 5030, cat: TV, desc: "Сериали"}
|
||||
- {id: 5040, cat: TV/HD, desc: "Сериали/HD"}
|
||||
- {id: 5020, cat: TV, desc: "Сериали/Русия"}
|
||||
- {id: 5060, cat: TV/Sport, desc: "Спорт/TV"}
|
||||
- {id: 6000, cat: XXX, desc: "XXX"}
|
||||
- {id: 6040, cat: XXX/x264, desc: "XXX"}
|
||||
- {id: 7000, cat: Books, desc: "Other"}
|
||||
- {id: 7030, cat: Books/Comics, desc: "Книги/Комикси"}
|
||||
- {id: 8000, cat: Other, desc: "Misc"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep]
|
||||
movie-search: [q]
|
||||
music-search: [q]
|
||||
book-search: [q]
|
||||
|
||||
settings: []
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://zamunda.rip/api/torznab/api?t=search&limit=100
|
||||
- path: api/torznab/api
|
||||
response:
|
||||
type: xml
|
||||
|
||||
inputs:
|
||||
t: search
|
||||
q: "{{ .Keywords }}"
|
||||
cat: "{{ join .Categories \",\" }}"
|
||||
limit: 100
|
||||
|
||||
rows:
|
||||
selector: rss > channel > item
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: "[name=category]"
|
||||
attribute: value
|
||||
title:
|
||||
selector: title
|
||||
details:
|
||||
text: "{{ .Config.sitelink }}"
|
||||
download:
|
||||
selector: link
|
||||
date:
|
||||
# Sun, 08 Feb 2026 19:31:03 +0000
|
||||
selector: pubDate
|
||||
filters:
|
||||
- name: dateparse
|
||||
args: "ddd, dd MMM yyyy HH:mm:ss zzz"
|
||||
size:
|
||||
selector: "[name=size]"
|
||||
attribute: value
|
||||
seeders:
|
||||
selector: "[name=seeders]"
|
||||
attribute: value
|
||||
leechers:
|
||||
selector: "[name=peers]"
|
||||
attribute: value
|
||||
downloadvolumefactor:
|
||||
text: 0
|
||||
uploadvolumefactor:
|
||||
text: 1
|
||||
# torznab xml
|
||||
@@ -0,0 +1,198 @@
|
||||
---
|
||||
id: zenith
|
||||
name: Zenith
|
||||
description: "Zenith is an Private Torrent Tracker for MOVIES / TV / GENERAL"
|
||||
language: en-US
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://znth.cx/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 1, cat: Movies, desc: "Movies"}
|
||||
- {id: 2, cat: TV, desc: "TV"}
|
||||
- {id: 5, cat: Audio, desc: "Music"}
|
||||
- {id: 6, cat: Books, desc: "Books"}
|
||||
- {id: 7, cat: Audio/Audiobook, desc: "Audiobooks"}
|
||||
- {id: 3, cat: Console, desc: "Games"}
|
||||
- {id: 8, cat: PC, desc: "Software"}
|
||||
- {id: 9, cat: Other, desc: "Misc"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid, tvdbid, tmdbid]
|
||||
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://znth.cx/\" target=\"_blank\">Zenith</a> account <i>My Settings</i> page and clicking on the <b>API Key</b> tab."
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: single_file_release_use_filename
|
||||
type: checkbox
|
||||
label: Use filename as title for single file releases
|
||||
default: true
|
||||
- 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
|
||||
- name: info_activity
|
||||
type: info
|
||||
label: Account Inactivity
|
||||
default: "Accounts get disabled after 90 days of no logins or any sort of activity. Accounts will also get soft deleted after 120 days."
|
||||
|
||||
login:
|
||||
path: api/torrents
|
||||
method: get
|
||||
error:
|
||||
- selector: a[href*="/login"]
|
||||
message:
|
||||
text: "The API key was not accepted by {{ .Config.sitelink }}."
|
||||
- selector: :root:contains("Account is Banned")
|
||||
|
||||
search:
|
||||
paths:
|
||||
# https://hdinnovations.github.io/UNIT3D/torrent_api.html
|
||||
# https://github.com/HDInnovations/UNIT3D/blob/master/app/Http/Controllers/API/TorrentController.php#L657
|
||||
- path: api/torrents/filter
|
||||
response:
|
||||
type: json
|
||||
|
||||
headers:
|
||||
Authorization: ["Bearer {{ .Config.apikey }}"]
|
||||
|
||||
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
|
||||
$raw: "{{ range .Categories }}&categories[]={{.}}{{end}}"
|
||||
name: "{{ .Keywords }}"
|
||||
seasonNumber: "{{ .Query.Season }}"
|
||||
episodeNumber: "{{ .Query.Ep }}"
|
||||
imdbId: "{{ .Query.IMDBIDShort }}"
|
||||
tmdbId: "{{ .Query.TMDBID }}"
|
||||
tvdbId: "{{ .Query.TVDBID }}"
|
||||
"free[]": "{{ if .Config.freeleech }}100{{ else }}{{ end }}"
|
||||
sortField: "{{ .Config.sort }}"
|
||||
sortDirection: "{{ .Config.type }}"
|
||||
perPage: 100
|
||||
|
||||
keywordsfilters:
|
||||
- name: re_replace
|
||||
args: ["\\.", " "]
|
||||
|
||||
rows:
|
||||
selector: data
|
||||
attribute: attributes
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: category_id
|
||||
title_optional:
|
||||
selector: name
|
||||
title_filename:
|
||||
selector: "files[0].name"
|
||||
optional: true
|
||||
files:
|
||||
selector: num_file
|
||||
title:
|
||||
text: "{{ if and (.Config.single_file_release_use_filename) (eq .Result.files \"1\") (.Result.title_filename) }}{{ .Result.title_filename }}{{ else }}{{ .Result.title_optional }}{{ end }}"
|
||||
details:
|
||||
selector: details_link
|
||||
download:
|
||||
selector: download_link
|
||||
poster:
|
||||
selector: meta.poster
|
||||
filters:
|
||||
- name: replace
|
||||
args: ["https://via.placeholder.com/90x135", ""]
|
||||
imdbid:
|
||||
selector: imdb_id
|
||||
tmdbid:
|
||||
selector: tmdb_id
|
||||
tvdbid:
|
||||
selector: tvdb_id
|
||||
genre:
|
||||
selector: meta.genres
|
||||
filters:
|
||||
- name: re_replace
|
||||
args: ["(?i)(Science Fiction)", "Science_Fiction"]
|
||||
- name: re_replace
|
||||
args: ["(?i)(TV Movie)", "TV_Movie"]
|
||||
- name: replace
|
||||
args: [" & ", "_&_"]
|
||||
_internal:
|
||||
selector: internal
|
||||
case:
|
||||
False: "{{ .False }}"
|
||||
True: "{{ .True }}"
|
||||
description:
|
||||
text: "{{ if .Result._internal }}Internal{{ else }}{{ end }}{{ if and .Result._internal .Result.genre }} | {{ else }}{{ end }}{{ .Result.genre }}"
|
||||
seeders:
|
||||
selector: seeders
|
||||
leechers:
|
||||
selector: leechers
|
||||
grabs:
|
||||
selector: times_completed
|
||||
date:
|
||||
# "created_at": "2021-10-18T00:34:50.000000Z" is returned by Newtonsoft.Json.Linq as 18/10/2021 00:34:50
|
||||
selector: created_at
|
||||
filters:
|
||||
- name: append
|
||||
args: " +00:00" # GMT
|
||||
- name: dateparse
|
||||
args: "MM/dd/yyyy HH:mm:ss zzz"
|
||||
size:
|
||||
selector: size
|
||||
_featured:
|
||||
selector: featured
|
||||
case:
|
||||
False: "{{ .False }}"
|
||||
True: "{{ .True }}"
|
||||
downloadvolumefactor_freeleech:
|
||||
# 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
|
||||
downloadvolumefactor:
|
||||
text: "{{ if .Result._featured }}0{{ else }}{{ .Result.downloadvolumefactor_freeleech }}{{ end }}"
|
||||
uploadvolumefactor_double_upload:
|
||||
# api returns False, True
|
||||
selector: double_upload
|
||||
case:
|
||||
False: 1 # normal
|
||||
True: 2 # double
|
||||
uploadvolumefactor:
|
||||
text: "{{ if .Result._featured }}2{{ else }}{{ .Result.uploadvolumefactor_double_upload }}{{ end }}"
|
||||
# global MR is 0.69 but torrents must be seeded for 3 days regardless of ratio
|
||||
# minimumratio:
|
||||
# text: 0.69
|
||||
minimumseedtime:
|
||||
# 3 days (as seconds = 3 x 24 x 60 x 60)
|
||||
text: 259200
|
||||
# json UNIT3D 9.2.0
|
||||
@@ -0,0 +1,179 @@
|
||||
---
|
||||
id: zrpt
|
||||
name: ZRPT (自然)
|
||||
description: "ZRPT (自然) is a CHINESE Private Torrent Tracker for Documentaries"
|
||||
language: zh-CN
|
||||
type: private
|
||||
encoding: UTF-8
|
||||
links:
|
||||
- https://zrpt.cc/
|
||||
|
||||
caps:
|
||||
categorymappings:
|
||||
- {id: 412, cat: TV/Documentary, desc: "Nature"}
|
||||
- {id: 413, cat: TV/Documentary, desc: "NatureWeb"}
|
||||
- {id: 401, cat: TV/Documentary, desc: "军事纪实"}
|
||||
- {id: 402, cat: TV/Documentary, desc: "生物自然"}
|
||||
- {id: 403, cat: TV/Documentary, desc: "餐饮美食"}
|
||||
- {id: 404, cat: TV/Documentary, desc: "人文记录"}
|
||||
- {id: 405, cat: TV/Documentary, desc: "宇宙星球"}
|
||||
- {id: 406, cat: TV/Documentary, desc: "音乐视频"}
|
||||
- {id: 407, cat: TV/Documentary, desc: "体育运动"}
|
||||
- {id: 409, cat: TV/Documentary, desc: "其它"}
|
||||
- {id: 415, cat: TV/Documentary, desc: "旅游风景"}
|
||||
- {id: 416, cat: TV/Documentary, desc: "纪录片"}
|
||||
|
||||
modes:
|
||||
search: [q]
|
||||
tv-search: [q, season, ep, imdbid]
|
||||
|
||||
settings:
|
||||
- name: cookie
|
||||
type: text
|
||||
label: Cookie
|
||||
- name: info_cookie
|
||||
type: info_cookie
|
||||
- name: freeleech
|
||||
type: checkbox
|
||||
label: Search freeleech only
|
||||
default: false
|
||||
- name: sort
|
||||
type: select
|
||||
label: Sort requested from site
|
||||
default: 4
|
||||
options:
|
||||
4: created
|
||||
7: seeders
|
||||
5: size
|
||||
1: title
|
||||
- name: type
|
||||
type: select
|
||||
label: Order requested from site
|
||||
default: desc
|
||||
options:
|
||||
desc: desc
|
||||
asc: asc
|
||||
- name: info_tpp
|
||||
type: info
|
||||
label: Results Per Page
|
||||
default: For best results, change the <b>Torrents per page:</b> setting to <b>100</b> on your account profile.
|
||||
- name: info_activity
|
||||
type: info
|
||||
label: Account Inactivity
|
||||
default: "Account retention rules:<ol><li>Veteran User and above will be retained forever</li><li>Elite User and above will not have their account deleted after parking (in the control panel)</li><li>Users with a parked account will be deleted if they do not log in for 400 consecutive days</li><li>Users with a non-parked account will be deleted if they do not log in for 150 consecutive days</li><li>Users who have no traffic (i.e. upload/download data are both 0) will be deleted if they do not log in for 100 consecutive days.</li></ol>"
|
||||
|
||||
login:
|
||||
# using cookie method because site does a JS call to API/Challenge via JQuery to load response parm required for takelogin.php
|
||||
method: cookie
|
||||
inputs:
|
||||
cookie: "{{ .Config.cookie }}"
|
||||
test:
|
||||
path: index.php
|
||||
selector: a[href="logout.php"]
|
||||
|
||||
search:
|
||||
paths:
|
||||
- path: torrents.php
|
||||
inputs:
|
||||
$raw: "{{ range .Categories }}cat{{.}}=1&{{end}}"
|
||||
search: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{ else }}{{ .Keywords }}{{ end }}"
|
||||
# 0 incldead, 1 active, 2 dead
|
||||
incldead: 0
|
||||
# 0 all, 1 normal, 2 free, 3 2x, 4 2xfree, 5 50%, 6 2x50%, 7 30%
|
||||
spstate: "{{ if .Config.freeleech }}2{{ else }}0{{ end }}"
|
||||
# 0 title, 1 descr, 3 uploader, 4 imdburl
|
||||
search_area: "{{ if .Query.IMDBID }}4{{ else }}0{{ end }}"
|
||||
# 0 AND, 2 exact
|
||||
search_mode: 0
|
||||
sort: "{{ .Config.sort }}"
|
||||
type: "{{ .Config.type }}"
|
||||
notnewword: 1
|
||||
|
||||
rows:
|
||||
selector: table.torrents > tbody > tr:has(a[href*="download.php?id="])
|
||||
|
||||
fields:
|
||||
category:
|
||||
selector: a[href*="?cat="]
|
||||
attribute: href
|
||||
filters:
|
||||
- name: querystring
|
||||
args: cat
|
||||
title_default:
|
||||
selector: a[href*="details.php?id="]
|
||||
title:
|
||||
selector: a[title][href*="details.php?id="]
|
||||
attribute: title
|
||||
optional: true
|
||||
default: "{{ .Result.title_default }}"
|
||||
details:
|
||||
selector: a[href*="details.php?id="]
|
||||
attribute: href
|
||||
download:
|
||||
selector: a[href*="download.php?id="]
|
||||
attribute: href
|
||||
poster:
|
||||
selector: img[data-src]
|
||||
attribute: data-src
|
||||
imdbid:
|
||||
# site currently only has a badge and rating, the id is not present. just in case a future update.
|
||||
selector: a[href*="imdb.com/title/tt"]
|
||||
attribute: href
|
||||
date_elapsed:
|
||||
# time type: time elapsed (default)
|
||||
selector: td.rowfollow:nth-child(4) > span[title]
|
||||
attribute: title
|
||||
optional: true
|
||||
filters:
|
||||
- name: append
|
||||
args: " +08:00" # CST
|
||||
- name: dateparse
|
||||
args: "yyyy-MM-dd HH:mm:ss zzz"
|
||||
date_added:
|
||||
# time added
|
||||
selector: td.rowfollow:nth-child(4):not(:has(span))
|
||||
optional: true
|
||||
filters:
|
||||
- name: append
|
||||
args: " +08:00" # CST
|
||||
- name: dateparse
|
||||
args: "yyyy-MM-ddHH:mm:ss zzz"
|
||||
date:
|
||||
text: "{{ if or .Result.date_elapsed .Result.date_added }}{{ or .Result.date_elapsed .Result.date_added }}{{ else }}now{{ end }}"
|
||||
size:
|
||||
selector: td.rowfollow:nth-child(5)
|
||||
optional: true
|
||||
default: 512MB
|
||||
seeders:
|
||||
selector: td.rowfollow:nth-child(6)
|
||||
optional: true
|
||||
default: 0
|
||||
leechers:
|
||||
selector: td.rowfollow:nth-child(7)
|
||||
optional: true
|
||||
default: 0
|
||||
grabs:
|
||||
selector: td.rowfollow:nth-child(8)
|
||||
optional: true
|
||||
default: 0
|
||||
downloadvolumefactor:
|
||||
case:
|
||||
img.pro_free: 0
|
||||
img.pro_free2up: 0
|
||||
img.pro_50pctdown: 0.5
|
||||
img.pro_50pctdown2up: 0.5
|
||||
img.pro_30pctdown: 0.3
|
||||
"*": 1
|
||||
uploadvolumefactor:
|
||||
case:
|
||||
img.pro_50pctdown2up: 2
|
||||
img.pro_free2up: 2
|
||||
img.pro_2up: 2
|
||||
"*": 1
|
||||
minimumseedtime:
|
||||
# 1 days (as seconds = 1 x 24 x 60 x 60)
|
||||
text: 86400
|
||||
description:
|
||||
selector: td.rowfollow:nth-child(2)
|
||||
remove: a, b, font, img, span
|
||||
# NexusPHP v1.9.6 2025-06-25 (custom)
|
||||
Reference in new issue
Block a user