Merge branch 'readarr-support'
This commit is contained in:
483 files changed
+55515
-15966
No files matched your search
@@ -35,6 +35,7 @@ Available recipes:
|
|||||||
build-lidarr # Build the Lidarr mock image
|
build-lidarr # Build the Lidarr mock image
|
||||||
build-prowlarr # Build the Prowlarr mock image
|
build-prowlarr # Build the Prowlarr mock image
|
||||||
build-radarr # Build the Radarr mock image
|
build-radarr # Build the Radarr mock image
|
||||||
|
build-readarr # Build the Readarr mock image
|
||||||
build-sonarr # Build the Sonarr mock image
|
build-sonarr # Build the Sonarr mock image
|
||||||
|
|
||||||
...
|
...
|
||||||
@@ -55,6 +56,7 @@ Available recipes:
|
|||||||
push-lidarr # Push the Lidarr mock image
|
push-lidarr # Push the Lidarr mock image
|
||||||
push-prowlarr # Push the Prowlarr mock image
|
push-prowlarr # Push the Prowlarr mock image
|
||||||
push-radarr # Push the Radarr mock image
|
push-radarr # Push the Radarr mock image
|
||||||
|
push-readarr # Push the Readarr mock image
|
||||||
push-sonarr # Push the Sonarr mock image
|
push-sonarr # Push the Sonarr mock image
|
||||||
|
|
||||||
...
|
...
|
||||||
|
|||||||
@@ -15,6 +15,11 @@ services:
|
|||||||
container_name: lidarr-mock
|
container_name: lidarr-mock
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
|
||||||
|
readarr-mock:
|
||||||
|
image: darkalex17/readarr-mock:latest
|
||||||
|
container_name: readarr-mock
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
prowlarr-mock:
|
prowlarr-mock:
|
||||||
image: darkalex17/prowlarr-mock:latest
|
image: darkalex17/prowlarr-mock:latest
|
||||||
container_name: prowlarr-mock
|
container_name: prowlarr-mock
|
||||||
@@ -33,5 +38,7 @@ services:
|
|||||||
condition: service_started
|
condition: service_started
|
||||||
lidarr-mock:
|
lidarr-mock:
|
||||||
condition: service_started
|
condition: service_started
|
||||||
|
readarr-mock:
|
||||||
|
condition: service_started
|
||||||
prowlarr-mock:
|
prowlarr-mock:
|
||||||
condition: service_started
|
condition: service_started
|
||||||
@@ -20,6 +20,11 @@ default:
|
|||||||
@build-lidarr:
|
@build-lidarr:
|
||||||
docker build -f lidarr.Dockerfile -t {{REPO}}/lidarr-mock:{{VERSION}} .
|
docker build -f lidarr.Dockerfile -t {{REPO}}/lidarr-mock:{{VERSION}} .
|
||||||
|
|
||||||
|
# Build the Readarr mock image
|
||||||
|
[group: 'build']
|
||||||
|
@build-readarr:
|
||||||
|
docker build -f readarr.Dockerfile -t {{REPO}}/readarr-mock:{{VERSION}} .
|
||||||
|
|
||||||
# Build the Prowlarr mock image
|
# Build the Prowlarr mock image
|
||||||
[group: 'build']
|
[group: 'build']
|
||||||
@build-prowlarr:
|
@build-prowlarr:
|
||||||
@@ -27,7 +32,7 @@ default:
|
|||||||
|
|
||||||
# Build all mock container images
|
# Build all mock container images
|
||||||
[group: 'build']
|
[group: 'build']
|
||||||
@build-all: build-radarr build-sonarr build-lidarr build-prowlarr
|
@build-all: build-radarr build-sonarr build-lidarr build-readarr build-prowlarr
|
||||||
|
|
||||||
# Push the Radarr mock image
|
# Push the Radarr mock image
|
||||||
[group: 'push']
|
[group: 'push']
|
||||||
@@ -44,6 +49,11 @@ default:
|
|||||||
@push-lidarr: build-lidarr
|
@push-lidarr: build-lidarr
|
||||||
docker push {{REPO}}/lidarr-mock:{{VERSION}}
|
docker push {{REPO}}/lidarr-mock:{{VERSION}}
|
||||||
|
|
||||||
|
# Push the Readarr mock image
|
||||||
|
[group: 'push']
|
||||||
|
@push-readarr: build-readarr
|
||||||
|
docker push {{REPO}}/readarr-mock:{{VERSION}}
|
||||||
|
|
||||||
# Push the Prowlarr mock image
|
# Push the Prowlarr mock image
|
||||||
[group: 'push']
|
[group: 'push']
|
||||||
@push-prowlarr: build-prowlarr
|
@push-prowlarr: build-prowlarr
|
||||||
@@ -51,7 +61,7 @@ default:
|
|||||||
|
|
||||||
# Push all mock container images
|
# Push all mock container images
|
||||||
[group: 'push']
|
[group: 'push']
|
||||||
@push-all: push-radarr push-sonarr push-lidarr push-prowlarr
|
@push-all: push-radarr push-sonarr push-lidarr push-readarr push-prowlarr
|
||||||
|
|
||||||
# Run the demo
|
# Run the demo
|
||||||
[group: 'run']
|
[group: 'run']
|
||||||
|
|||||||
BIN
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
@@ -14,3 +14,8 @@ lidarr:
|
|||||||
host: lidarr-mock
|
host: lidarr-mock
|
||||||
port: 8686
|
port: 8686
|
||||||
api_token: 611b3863baa2442f975afbc8f1377037
|
api_token: 611b3863baa2442f975afbc8f1377037
|
||||||
|
readarr:
|
||||||
|
- name: Books
|
||||||
|
host: readarr-mock
|
||||||
|
port: 8787
|
||||||
|
api_token: fe0bd24f3efe41bfa43d7b425245f55c
|
||||||
BIN
Binary file not shown.
@@ -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
|
||||||
Loaded 100 of 483 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user