diff --git a/definitions/v4/1337x.yml b/definitions/v4/1337x.yml
index 09b84039a..2ab492fdf 100644
--- a/definitions/v4/1337x.yml
+++ b/definitions/v4/1337x.yml
@@ -194,7 +194,8 @@ search:
selector: td[class^="coll-1"] a[href^="/torrent/"]
title_optional:
# the movies, tv and music pages abbreviate the title so we process the href instead. #8137
- selector: td[class^="coll-1"] a[href^="/torrent/"]
+ optional: true
+ selector: td[class^="coll-1"] a[href^="/torrent/"]:contains("...")
attribute: href
filters:
- name: urldecode
@@ -205,7 +206,11 @@ search:
text: "{{ if .Result.title_optional }}{{ .Result.title_optional }}{{ else }}{{ .Result.title_default }}{{ end }}"
filters:
- name: re_replace
+ args: ["-([\\w]+(?:[\\[\\]\\(\\)\\w]+)?)$", "~$1"]
+ - name: replace
args: ["-", " "]
+ - name: re_replace
+ args: ["~([\\w]+(?:[\\[\\]\\(\\)\\w]+)?)$", "-$1"]
- name: replace
args: ["Grey's Anatomy", "Greys Anatomy"]
- name: replace
diff --git a/definitions/v4/catorrent.yml b/definitions/v4/catorrent.yml
index cdba27f9e..2afa5fb69 100644
--- a/definitions/v4/catorrent.yml
+++ b/definitions/v4/catorrent.yml
@@ -89,6 +89,7 @@ search:
selector: img
attribute: src
genre:
+ optional: true
selector: div.short_game_genre
filters:
- name: re_replace
diff --git a/definitions/v4/digitalcore.yml b/definitions/v4/digitalcore.yml
index ff5befecf..381a54f7a 100644
--- a/definitions/v4/digitalcore.yml
+++ b/definitions/v4/digitalcore.yml
@@ -178,6 +178,7 @@ search:
optional: true
selector: year
genre:
+ optional: true
selector: genres
_tagline_desc:
optional: true
diff --git a/definitions/v4/estone.yml b/definitions/v4/estone.yml
index 3db5bda5b..a9c40bc13 100644
--- a/definitions/v4/estone.yml
+++ b/definitions/v4/estone.yml
@@ -152,6 +152,7 @@ search:
img[src="pic/dupla_up.png"]: 2
"*": 1
_genre:
+ optional: true
selector: div i
filters:
- name: regexp
diff --git a/definitions/v4/film-paleis.yml b/definitions/v4/film-paleis.yml
index 3fe66af21..00c67f3a1 100644
--- a/definitions/v4/film-paleis.yml
+++ b/definitions/v4/film-paleis.yml
@@ -12,31 +12,31 @@ legacylinks:
caps:
categorymappings:
- - {id: 2, cat: Movies/BluRay, desc: " Bluray/HD"}
- - {id: 3, cat: Movies/DVD, desc: " DVD Kids"}
- - {id: 4, cat: Audio/Video, desc: " DVD Muziek"}
- - {id: 5, cat: Movies/DVD, desc: " DVD Films"}
- - {id: 7, cat: Movies/UHD, desc: " 4K films"}
- - {id: 8, cat: XXX, desc: " Erotiek"}
- - {id: 9, cat: PC/Mobile-Other, desc: " GSM/Navigatie"}
- - {id: 10, cat: Audio, desc: " Muziek Album"}
- - {id: 11, cat: Audio/Other, desc: " Muziek Diverse"}
- - {id: 12, cat: Console/NDS, desc: " Nintendo"}
- - {id: 13, cat: Movies, desc: " Classic"}
- - {id: 15, cat: Other, desc: " Overige"}
- - {id: 16, cat: PC/0day, desc: " PC Software"}
- - {id: 17, cat: PC, desc: " PC Spellen"}
- - {id: 19, cat: TV, desc: " TV Series"}
- - {id: 21, cat: Movies/SD, desc: " Divx/Xvid"}
- - {id: 24, cat: Books/EBook, desc: " E-Books"}
- - {id: 26, cat: Audio/Other, desc: " Cabaret"}
- - {id: 27, cat: TV/Documentary, desc: " Documentaire"}
- - {id: 31, cat: Movies/HD, desc: " FP-release"}
- - {id: 32, cat: Audio/Audiobook, desc: " Luister Boeken"}
+ - {id: 2, cat: Movies/BluRay, desc: "Bluray/HD"}
+ - {id: 3, cat: Movies/DVD, desc: "DVD Kids"}
+ - {id: 4, cat: Audio/Video, desc: "DVD Muziek"}
+ - {id: 5, cat: Movies/DVD, desc: "DVD Films"}
+ - {id: 7, cat: Movies/UHD, desc: "4K films"}
+ - {id: 8, cat: XXX, desc: "Erotiek"}
+ - {id: 9, cat: PC/Mobile-Other, desc: "GSM/Navigatie"}
+ - {id: 10, cat: Audio, desc: "Muziek Album"}
+ - {id: 11, cat: Audio/Other, desc: "Muziek Diverse"}
+ - {id: 12, cat: Console/NDS, desc: "Nintendo"}
+ - {id: 13, cat: Movies, desc: "Classic"}
+ - {id: 15, cat: Other, desc: "Overige"}
+ - {id: 16, cat: PC/0day, desc: "PC Software"}
+ - {id: 17, cat: PC, desc: "PC Spellen"}
+ - {id: 19, cat: TV, desc: "TV Series"}
+ - {id: 21, cat: Movies/SD, desc: "Divx/Xvid"}
+ - {id: 24, cat: Books/EBook, desc: "E-Books"}
+ - {id: 26, cat: Audio/Other, desc: "Cabaret"}
+ - {id: 27, cat: TV/Documentary, desc: "Documentaire"}
+ - {id: 31, cat: Movies/HD, desc: "FP-release"}
+ - {id: 32, cat: Audio/Audiobook, desc: "Luister Boeken"}
modes:
search: [q]
- tv-search: [q, imdbid]
+ tv-search: [q, season, ep, imdbid]
movie-search: [q, imdbid]
music-search: [q]
book-search: [q]
@@ -95,6 +95,11 @@ search:
search: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{ else }}{{ .Keywords }}{{ end }}"
incldead: 1
# does not return imdb link in results
+ keywordsfilters:
+ - name: re_replace # S01E02 to 1 2
+ args: ["(?i)\\bS0*(\\d{1,2})\\s*E0*(\\d{1,2})\\b", "$1 $2"]
+ - name: re_replace # S01 to 1
+ args: ["(?i)\\bS0*(\\d{1,2})\\b", "$1"]
rows:
selector: table.mainouter
@@ -106,11 +111,13 @@ search:
selector: a[href^="details.php?id="]
filters:
- name: re_replace
- args: ["(?i)seizoen\\s*(\\d{1,2})\\s*(tot|t\/m)\\s*(\\d{1,2})", "S$1-$3"]
+ args: ["(?i)(seizoen\\s*)(\\d{1,2})\\s*(tot|t\/m|&|\\+)\\s*(\\d{1,2})", "S$2-$4"]
- name: re_replace
- args: ["(?i)(seizoen\\s*)(\\d{1,2})", "S$2"]
+ args: ["(?i)(seizoen\\s*)(\\d{1,2})\\s*", "S$2"]
- name: re_replace
- args: ["(?i)(afl.\\s*|aflevering\\s*)(\\d{1,2})", "E$2"]
+ args: ["(?i)(afl.\\s*|aflevering\\s*|ep.\\s*)(\\d{1,2})\\s*(tot|t\/m|&|\\+)\\s*(\\d{1,2})", "E$2-$4"]
+ - name: re_replace
+ args: ["(?i)(afl.\\s*|aflevering\\s*|ep.\\s*)(\\d{1,2})", "E$2"]
- name: re_replace
args: ["(?i)compleet", "Complete"]
details:
diff --git a/definitions/v4/haitang.yml b/definitions/v4/haitang.yml
index bf6ab6259..e0f4ee1ac 100644
--- a/definitions/v4/haitang.yml
+++ b/definitions/v4/haitang.yml
@@ -104,19 +104,21 @@ search:
filters:
- name: querystring
args: cat
- title:
+ title_default:
selector: a[href^="details.php?id="]
- title:
+ title_optional:
optional: true
selector: a[title][href^="details.php?id="]
attribute: title
+ title:
+ text: "{{ if .Result.title_optional }}{{ .Result.title_optional }}{{ else }}{{ .Result.title_default }}{{ end }}"
details:
selector: a[href^="details.php?id="]
attribute: href
download:
selector: a[href^="download.php?id="]
attribute: href
- date:
+ date_elapsed:
# time type: time elapsed (default)
selector: td:nth-child(4) > span[title]
attribute: title
@@ -126,7 +128,7 @@ search:
args: " +08:00" # CST
- name: dateparse
args: "2006-01-02 15:04:05 -07:00"
- date:
+ date_added:
# time added
selector: td:nth-child(4):not(:has(span))
optional: true
@@ -135,6 +137,8 @@ search:
args: " +08:00" # CST
- name: dateparse
args: "2006-01-0215:04:05 -07:00"
+ 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:
diff --git a/definitions/v4/korsar.yml b/definitions/v4/korsar.yml
index 442c9dd7c..239a01cfe 100644
--- a/definitions/v4/korsar.yml
+++ b/definitions/v4/korsar.yml
@@ -522,7 +522,7 @@ search:
selector: span.leech
grabs:
selector: span.complet
- date:
+ date_day:
# Сегодня, 15:10 (today)
# Вчера, 23:28 (yesterday)
selector: dd:last-of-type:contains("Сегодня,"), dd:last-of-type:contains("Вчера,")
@@ -536,7 +536,7 @@ search:
- name: replace
args: ["Сегодня,", "Yesterday"]
- name: fuzzytime
- date:
+ date_time:
# 4 минуты назад (4 minutes ago)
# 11 минут назад (11 minutes ago)
# 4 часа назад (4 hours ago)
@@ -558,7 +558,7 @@ search:
- name: replace
args: ["часов", "hours"]
- name: timeago
- date:
+ date_year:
# 12 янв 2019, 11:26
# 25 май 2017, 18:41
selector: dd:last-of-type:not(:contains("назад")):not(:contains("Сегодня,")):not(:contains("Вчера,"))
@@ -597,6 +597,8 @@ search:
args: " +03:00" # MSK
- name: dateparse
args: "02 Jan 2006, 15:04 -07:00"
+ date:
+ text: "{{ if or .Result.date_time .Result.date_year .Result.date_day }}{{ or .Result.date_time .Result.date_year .Result.date_day }}{{ else }}now{{ end }}"
downloadvolumefactor:
text: 0
uploadvolumefactor:
diff --git a/definitions/v4/krazyzone.yml b/definitions/v4/krazyzone.yml
index 9c3ff85e9..6969b1bd9 100644
--- a/definitions/v4/krazyzone.yml
+++ b/definitions/v4/krazyzone.yml
@@ -6,110 +6,58 @@ language: en-US
type: private
encoding: UTF-8
links:
- - http://krazyzone.net/ # does not support https, CA expired Dec 2016
+ - https://krazyzone.net/
+legacylinks:
+ - http://krazyzone.net/
caps:
categorymappings:
- - {id: 3, cat: Audio, desc: "Mastermix"}
- - {id: 4, cat: Audio, desc: "Mastermix Classic"}
- - {id: 5, cat: Audio, desc: "Mastermix DJ Beats"}
- - {id: 6, cat: Audio, desc: "Mastermix Extended"}
- - {id: 7, cat: Audio, desc: "Mastermix- Grandmaster"}
- - {id: 8, cat: Audio, desc: "Mastermix- Mastermix Other"}
- - {id: 9, cat: Audio, desc: "Mastermix- Mastermix Packs"}
- - {id: 10, cat: Audio, desc: "Mastermix Monthly Issue"}
- - {id: 11, cat: Audio, desc: "Mastermix Pro Dance / Disc"}
- - {id: 12, cat: Audio, desc: "Mastermix Professional"}
- - {id: 13, cat: Audio, desc: "DMC"}
- - {id: 83, cat: Audio, desc: "DMC Bootlegs"}
- - {id: 84, cat: Audio, desc: "DMC Classic"}
- - {id: 85, cat: Audio, desc: "DMC Commercial"}
- - {id: 86, cat: Audio, desc: "DMC Complete"}
- - {id: 87, cat: Audio, desc: "DMC Dance Mixes"}
- - {id: 88, cat: Audio, desc: "DMC Essential"}
- - {id: 89, cat: Audio, desc: "DMC Guide"}
- - {id: 90, cat: Audio, desc: "DMC Monsterjam"}
- - {id: 91, cat: Audio, desc: "DMC Other DMC and Packs"}
- - {id: 92, cat: Audio, desc: "DMC Promo"}
- - {id: 14, cat: Audio, desc: "MUSIC Albums"}
- - {id: 110, cat: Audio, desc: "MUSIC Album / Music Packs and other MP3"}
- - {id: 76, cat: Audio, desc: "MUSIC Artist Albums "}
- - {id: 77, cat: Audio, desc: "MUSIC Compilations "}
- - {id: 109, cat: Audio, desc: "MUSIC Discographys , Collection"}
- - {id: 80, cat: Audio, desc: "MUSIC Flac / Lossy / DTS Packs "}
- - {id: 81, cat: Audio/Lossless, desc: "MUSIC FLAC 24bit Hi-Res "}
- - {id: 115, cat: Audio, desc: "MUSIC Singles , Maxi CD and Vinyl"}
- - {id: 15, cat: Audio, desc: "DJ Only"}
- - {id: 74, cat: Audio, desc: "DJ Other DJ Music Including Select Mix , Promo Only"}
- - {id: 75, cat: Audio, desc: "DJ UK Top 40 / Other Top 20 / 40"}
- - {id: 82, cat: Audio, desc: "DJ Ultramix , Ultrasound , UltraTraxx , Xmix "}
- - {id: 16, cat: Audio, desc: "ONLY KZN Packs / Albums"}
- - {id: 73, cat: Audio, desc: "ONLY KZN KZN Packs / Albums Exclusive VIP only"}
- - {id: 69, cat: Audio, desc: "ONLY KZN Album / Music Packs"}
- - {id: 72, cat: Audio, desc: "ONLY KZN MP3 Weekly"}
- - {id: 17, cat: Audio, desc: "Karaoke"}
- - {id: 67, cat: Audio, desc: "Karaoke All Karaoke "}
- - {id: 68, cat: Audio, desc: "Karaoke All Karaoke Packs "}
- - {id: 95, cat: Audio, desc: "KZN Mixed Albums / KZN Mixed Videos "}
- - {id: 96, cat: Audio, desc: "KZN Mixed Albums / KZN Mixed Videos"}
- - {id: 112, cat: Audio, desc: "KZN MP3 Weekly"}
- - {id: 18, cat: Audio/Video, desc: "Music Videos"}
- - {id: 66, cat: Audio/Video, desc: "Music Videos Singles Video"}
- - {id: 65, cat: Audio/Video, desc: "Music Videos Video Packs and Live Video Concerts"}
- - {id: 19, cat: Movies, desc: "Movie Packs"}
- - {id: 62, cat: Movies, desc: "Movie Packs Kids Movie Packs"}
- - {id: 63, cat: Movies, desc: "Movie Packs Movie Packs"}
- - {id: 64, cat: Movies, desc: "Movie Packs Pre 90 Movie Packs"}
- - {id: 21, cat: PC, desc: "Applications"}
- - {id: 50, cat: PC/Mobile-Android, desc: "Applications Android"}
- - {id: 51, cat: PC/Mac, desc: "Applications Misc , Linux , Mac "}
- - {id: 52, cat: PC/0day, desc: "Applications Windows"}
- - {id: 22, cat: Books, desc: "Ebooks/Mags/Comics"}
- - {id: 48, cat: Audio/Audiobook, desc: "Ebooks Audiobooks"}
- - {id: 117, cat: Books/Comics, desc: "Ebooks Comics"}
- - {id: 49, cat: Books/EBook, desc: "Ebooks Mags"}
- - {id: 23, cat: PC/Games, desc: "Games"}
- - {id: 45, cat: PC/Games, desc: "Games PC / ISO"}
- - {id: 105, cat: Console/PS4, desc: "Games PS2 / PS3 / PS4 "}
- - {id: 46, cat: Console/NDS, desc: "Games Wii+ Nds"}
- - {id: 47, cat: Console/XBox 360, desc: "Games Xbox360"}
- - {id: 20, cat: Movies, desc: "Movies"}
- - {id: 113, cat: Movies, desc: "Movies 2022 Movies"}
- - {id: 116, cat: Movies/UHD, desc: "Movies 4K Movies"}
- - {id: 53, cat: Movies, desc: "Movies Anime / Kids"}
- - {id: 54, cat: Movies/BluRay, desc: "Movies Bluray,HDRip,BDRip,Webrip,HEVC"}
- - {id: 55, cat: Movies/SD, desc: "Movies Cam / TS / Screener"}
- - {id: 56, cat: Movies, desc: "Movies Classic Movies Pre 90s to 2000"}
- - {id: 57, cat: Movies/DVD, desc: "Movies DVDR ,NTSCPAL ,ISO"}
- - {id: 58, cat: Movies/WEB-DL, desc: "Movies DVDRip,AVI,XVID,BRRip"}
- - {id: 59, cat: Movies/Foreign, desc: "Movies Foreign"}
- - {id: 118, cat: Movies, desc: "Movies iPad"}
- - {id: 107, cat: Movies/HD, desc: "Movies Mp4 Movies"}
- - {id: 60, cat: Movies, desc: "Movies Netflix"}
- - {id: 61, cat: Movies/3D, desc: "Movies Remux , 3D"}
- - {id: 24, cat: TV, desc: "TV"}
- - {id: 39, cat: TV/Documentary, desc: "TV Discovery / Geographics / Documentary"}
- - {id: 41, cat: TV, desc: "TV Episodes"}
- - {id: 42, cat: TV/Anime, desc: "TV Kids / Anime"}
- - {id: 43, cat: TV/Sport, desc: "TV Sport"}
- - {id: 44, cat: TV/Sport, desc: "TV Sport Packs"}
- - {id: 26, cat: Audio, desc: "Request Seed DMC/Mastermix"}
- - {id: 37, cat: Audio, desc: "Request Seed DMC/Mastermix"}
- - {id: 25, cat: TV, desc: "TV Packs/Full Seasons"}
- - {id: 38, cat: TV, desc: "TV Packs Full Seasons"}
- - {id: 40, cat: TV, desc: "TV Packs Kids / Anime Full Seasons"}
- - {id: 94, cat: TV, desc: "TV Packs Pre 90`s TV series"}
- - {id: 27, cat: Other, desc: "Wallpapers"}
- - {id: 36, cat: Other, desc: "Wallpapers PC Wallpapers"}
- - {id: 1, cat: Other/Misc, desc: "Unsorted"}
- - {id: 2, cat: Other/Misc, desc: "Unsorted To Be Edited"}
- - {id: 30, cat: Other, desc: "Exclusive VIP"}
- - {id: 33, cat: Other, desc: "Exclusive VIP Not To Be Uploaded Anywhere"}
- - {id: 31, cat: Other, desc: "VIP"}
- - {id: 32, cat: Other, desc: "VIP Not To Be Uploaded Anywhere"}
- - {id: 99, cat: Other, desc: "Christmas Albums"}
- - {id: 101, cat: Other, desc: "Christmas Albums Packs"}
- - {id: 103, cat: Other, desc: "All Christmas Movies and Packs"}
+ - {id: 79, cat: Audio, desc: "Music Mastermix"}
+ - {id: 80, cat: Audio, desc: "Music DMC"}
+ - {id: 76, cat: Audio, desc: "Music KZN Packs Exclusive"}
+ - {id: 49, cat: Audio/MP3, desc: "Music KZN MP3 Weekly Ex-Vip"}
+ - {id: 77, cat: Audio, desc: "Music KZN Packs Ex-VIP"}
+ - {id: 98, cat: Audio, desc: "Music Other Mp3 Weekly"}
+ - {id: 74, cat: Audio, desc: "Music Discography Collection"}
+ - {id: 78, cat: Audio, desc: "Music Dj-Only Dj-Music"}
+ - {id: 82, cat: Audio/Lossless, desc: "Music Flac-24 Bit Hi-Res"}
+ - {id: 81, cat: Audio, desc: "Music Assorted Albums"}
+ - {id: 46, cat: Audio/Video, desc: "Music Videos"}
+ - {id: 24, cat: Audio, desc: "Music Karaoke"}
+ - {id: 28, cat: Movies, desc: "Movies 2022"}
+ - {id: 47, cat: Movies/HD, desc: "Movies Bluray-HD"}
+ - {id: 9, cat: Movies/DVD, desc: "Movies Dvdr-ISO"}
+ - {id: 52, cat: Movies, desc: "Movies Classic Pre90s"}
+ - {id: 48, cat: Movies/SD, desc: "Movies AVI - XVID - Dvdrip"}
+ - {id: 41, cat: Movies/3D, desc: "Movies Remux - 3D"}
+ - {id: 22, cat: Movies/Foreign, desc: "Movies Foreign"}
+ - {id: 23, cat: Movies, desc: "Movies Kids-Anime"}
+ - {id: 25, cat: Movies, desc: "Movies Netflix"}
+ - {id: 27, cat: Movies/UHD, desc: "Movies 4K"}
+ - {id: 53, cat: Movies, desc: "Movies Packs"}
+ - {id: 54, cat: Movies, desc: "Movies Packs Pre90s"}
+ - {id: 6, cat: Movies, desc: "Movies Packs Kids"}
+ - {id: 7, cat: TV, desc: "TV Episodes"}
+ - {id: 8, cat: TV/Anime, desc: "TV Kids-Anime"}
+ - {id: 75, cat: TV/Documentary, desc: "TV Documentary"}
+ - {id: 26, cat: TV/Sport, desc: "TV Sports"}
+ - {id: 42, cat: TV, desc: "TV Packs Full Seasons"}
+ - {id: 50, cat: TV/Anime, desc: "TV Packs Kids-Anime"}
+ - {id: 83, cat: TV, desc: "TV Packs Pre90s"}
+ - {id: 84, cat: Audio/Audiobook, desc: "Audio Books"}
+ - {id: 85, cat: Books/EBook, desc: "Ebooks Mags"}
+ - {id: 86, cat: Books/Comics, desc: "Ebooks Comics"}
+ - {id: 87, cat: PC/0day, desc: "Apps Windows"}
+ - {id: 88, cat: PC/Mobile-Other, desc: "Apps Misc"}
+ - {id: 89, cat: PC/Games, desc: "Games PC-ISO"}
+ - {id: 90, cat: PC/Games, desc: "Games Misc"}
+ - {id: 91, cat: Other, desc: "Wallpapers"}
+ - {id: 92, cat: Other, desc: "Xmas Albums"}
+ - {id: 93, cat: Other, desc: "Xmas Movies Packs"}
+ - {id: 94, cat: Other, desc: "Xmas Music Packs"}
+ - {id: 95, cat: Other/Misc, desc: "Unsorted To Be Edited"}
+ - {id: 96, cat: Other, desc: "VIP Don't Uploaded"}
+ - {id: 97, cat: Other, desc: "VIP Exclusive"}
modes:
search: [q]
@@ -127,14 +75,14 @@ settings:
label: Password
- name: freeleech
type: checkbox
- label: Filter freeleech only
+ label: Search freeleech only
default: false
- name: sort
type: select
label: Sort requested from site
- default: added
+ default: id
options:
- added: created
+ id: created
seeders: seeders
size: size
name: title
@@ -151,97 +99,100 @@ settings:
default: "If you are getting 0 results then access the site with your browser and mark as read all PMs."
login:
- path: takelogin.php
+ path: account-login.php
method: post
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
error:
- - selector: table:contains("error has occured")
- - selector: a[href*="/login.php?error="]
- message:
- text: Wrong username or password.
+ - selector: div.myFrame:contains("Access Denied")
test:
path: index.php
- selector: a[href*="/logout.php?logouthash="]
-
-download:
- before:
- path: takethanks.php
- method: post
- inputs:
- torrentid: "{{ .DownloadUri.Query.id }}"
- selectors:
- - selector: a[href*="/download.php?id="]
- attribute: href
+ selector: a[href="account-logout.php"]
search:
paths:
- - path: browse.php
+ - path: torrents-search.php
+ inputs:
+ $raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
+ search: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{ else }}{{ .Keywords }}{{ end }}" # for dashboard imdbid search
+ # 0 active, 1 incldead, 2 onlydead
+ incldead: 1
+ # 0 all, 1 notfree, 2 onlyfree
+ freeleech: "{{ if .Config.freeleech }}2{{ else }}0{{ end }}"
+ # 0 all, 1 bulgarian, 2 english, 3 english and bulgarian
+ inclrosub: 0
+ # 0 both, 1 local, 2 external
+ sort: "{{ .Config.sort }}"
+ order: "{{ .Config.type }}"
keywordsfilters:
- name: re_replace
- args: ["[\\s]+", "%"]
- inputs:
- do: search
- keywords: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{ else }}{{ .Keywords }}{{ end }}"
- # t_name, t_description, t_both, t_uploader, t_genre
- search_type: "{{ if .Query.IMDBID }}t_genre{{ else }}t_name{{ end }}"
- # does not support multi category searching so defaulting to all.
- category: 0
- include_dead_torrents: yes
- sort: "{{ if .Config.freeleech }}free{{ else }}{{ .Config.sort }}{{ end }}"
- order: "{{ if .Config.freeleech }}asc{{ else }}{{ .Config.type }}{{ end }}"
+ args: ["(\\w+)", " +$1"] # prepend + to each word
rows:
- selector: "table.sortable tr:has(a[href*=\"/download.php?id=\"]){{ if .Config.freeleech }}:has(img[src$=\"/freedownload.gif\"]){{ else }}{{ end }}"
+ selector: table.ttable_headinner > tbody > tr
fields:
category:
- selector: a[href*="/browse.php?category="]
+ selector: a[href^="torrents.php?cat="]
attribute: href
filters:
- name: querystring
- args: category
+ args: cat
title:
- selector: a[href*="/details.php?id="]
+ selector: a[href^="torrents-details.php?id="]
+ attribute: title
+ filters:
+ - name: re_replace
+ args: ["[\\[|\\]]", ""]
details:
- selector: a[href*="/details.php?id="]
+ selector: a[href^="torrents-details.php?id="]
attribute: href
download:
- selector: a[href*="/details.php?id="]
+ selector: td a[href^="download.php?id="]
attribute: href
poster:
- selector: img[src*="/torrents/images/"]
- attribute: src
- date:
- selector: td:nth-child(2)
+ selector: a[href^="torrents-details.php?id="]
+ attribute: onmouseover
filters:
- name: regexp
- args: "(\\d{2}-\\d{2}-\\d{4} \\d{2}:\\d{2})"
+ args: src=([^\s]+)
+ genre:
+ optional: true
+ selector: div.t-tags
+ filters:
+ - name: replace
+ args: ["/", ", "]
+ description:
+ text: "{{ .Result.genre }}"
+ imdbid:
+ selector: a[href*="imdb.com/title/tt"]
+ attribute: href
+ size:
+ selector: td:nth-child(4)
+ date:
+ # 24.Jul
2022
07:47
+ selector: td:nth-child(5)
+ filters:
- name: append
args: " +00:00" # auto adjusted by site account profile
- name: dateparse
- args: "02-01-2006 15:04 -07:00"
- size:
- selector: td:nth-last-child(5)
- grabs:
- selector: td:nth-last-child(4)
+ args: "2.Jan200615:04 -07:00"
seeders:
- selector: td:nth-last-child(3)
+ selector: td:nth-child(7)
leechers:
- selector: td:nth-last-child(2)
+ selector: td:nth-child(8)
+ grabs:
+ selector: td:nth-child(9)
downloadvolumefactor:
case:
- img[src$="/freedownload.gif"]: 0
- img[src$="/silverdownload.gif"]: 0.5
+ img[src="images/free.png"]: 0
"*": 1
uploadvolumefactor:
- case:
- img[src$="/x2.gif"]: 2
- "*": 1
+ text: 1
minimumratio:
- text: 0.5
+ text: 1.0
minimumseedtime:
# 24 hours (as seconds = 24 x 60 x 60)
text: 86400
-# TS Special Edition v.7.4
+# TorrentTrader
diff --git a/definitions/v4/oshenpt.yml b/definitions/v4/oshenpt.yml
index ea41bd960..2ac0b65ea 100644
--- a/definitions/v4/oshenpt.yml
+++ b/definitions/v4/oshenpt.yml
@@ -7,7 +7,7 @@ type: private
encoding: UTF-8
links:
- http://www.oshen.win/
-links:
+legacylinks:
- https://www.oshen.win/ # forces http
caps:
diff --git a/definitions/v4/polishsource.yml b/definitions/v4/polishsource.yml
index c2dbf675a..26ce4bf91 100644
--- a/definitions/v4/polishsource.yml
+++ b/definitions/v4/polishsource.yml
@@ -130,7 +130,11 @@ search:
selector: a[href^="downloadssl.php?id="]
attribute: href
_genre:
+ optional: true
selector: td:nth-child(2) > small
+ filters:
+ - name: replace
+ args: [" ", ", "]
_language:
optional: true
selector: img[src="pic/pl.png"]
diff --git a/definitions/v4/putao.yml b/definitions/v4/putao.yml
index ab341c30f..af49c14db 100644
--- a/definitions/v4/putao.yml
+++ b/definitions/v4/putao.yml
@@ -128,19 +128,21 @@ search:
filters:
- name: querystring
args: cat
- title:
+ title_default:
selector: a[href^="details.php?id="]
- title:
+ title_optional:
optional: true
selector: a[title][href^="details.php?id="]
attribute: title
+ title:
+ text: "{{ if .Result.title_optional }}{{ .Result.title_optional }}{{ else }}{{ .Result.title_default }}{{ end }}"
details:
selector: a[href^="details.php?id="]
attribute: href
download:
selector: a[href^="download.php?id="]
attribute: href
- date:
+ date_elapsed:
# time elapsed (default)
# 19时
3分 (19 hours 3 minutes)
# 2天
21时 (2 days 21 hours)
@@ -160,7 +162,7 @@ search:
- name: append
args: " ago"
- name: timeago
- date:
+ date_added:
# time added
selector: td:nth-child(4):contains("-")
optional: true
@@ -169,6 +171,8 @@ search:
args: " +08:00" # CST
- name: dateparse
args: "2006-01-0215:04:05 -07:00"
+ 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:
diff --git a/definitions/v4/pwtorrents.yml b/definitions/v4/pwtorrents.yml
index a054901a1..afb1e5eb8 100644
--- a/definitions/v4/pwtorrents.yml
+++ b/definitions/v4/pwtorrents.yml
@@ -7,7 +7,7 @@ type: private
encoding: UTF-8
links:
- http://pwtorrents.net/
-links:
+legacylinks:
- https://pwtorrents.net/ # site is forcing to http
caps:
diff --git a/definitions/v4/rptorrents.yml b/definitions/v4/rptorrents.yml
index 05f829c50..718ee4f51 100644
--- a/definitions/v4/rptorrents.yml
+++ b/definitions/v4/rptorrents.yml
@@ -156,6 +156,7 @@ search:
img[src="images/t_extern.png"]: 0
"*": 1
genre:
+ optional: true
selector: td div
filters:
- name: regexp
diff --git a/definitions/v4/rustorka.yml b/definitions/v4/rustorka.yml
index 91618a2bd..47321467b 100644
--- a/definitions/v4/rustorka.yml
+++ b/definitions/v4/rustorka.yml
@@ -834,7 +834,6 @@ search:
prev_df: 1
prev_ds: 0
prev_snotd: 0
- prev_a: 0
prev_not_checked: 0
prev_closed: 0
prev_d: 0
diff --git a/definitions/v4/superbits.yml b/definitions/v4/superbits.yml
index 7e7d2cfb7..7b01861c3 100644
--- a/definitions/v4/superbits.yml
+++ b/definitions/v4/superbits.yml
@@ -179,6 +179,7 @@ search:
optional: true
selector: year
genre:
+ optional: true
selector: genres
_tagline_desc:
optional: true
diff --git a/definitions/v4/teracod.yml b/definitions/v4/teracod.yml
index 395f119b9..b5fa2301e 100644
--- a/definitions/v4/teracod.yml
+++ b/definitions/v4/teracod.yml
@@ -171,6 +171,7 @@ search:
"font[color=\"#2A821E\"]:contains(\"x2\")": 2
"*": 1
_genre:
+ optional: true
selector: td.torrent:nth-child(2)
filters:
- name: regexp
diff --git a/definitions/v4/uniongang.yml b/definitions/v4/uniongang.yml
index 92a28b3ea..419a02a9d 100644
--- a/definitions/v4/uniongang.yml
+++ b/definitions/v4/uniongang.yml
@@ -7,7 +7,7 @@ type: private
encoding: windows-1251
links:
- http://www.uniongang.net/
-links:
+legacylinks:
- https://www.uniongang.net/ # site is forcing to http
caps:
diff --git a/definitions/v6/lst.yml b/definitions/v6/lst.yml
new file mode 100644
index 000000000..941b8bbf9
--- /dev/null
+++ b/definitions/v6/lst.yml
@@ -0,0 +1,154 @@
+---
+id: lst
+name: LST
+description: "LST is an English Private tracker for MOVIES / TV / GENERAL"
+language: en-US
+type: private
+encoding: UTF-8
+links:
+ - https://lst.gg/
+
+caps:
+ categorymappings:
+ - {id: 1, cat: Movies, desc: "Movies"}
+ - {id: 2, cat: TV, desc: "TV"}
+ - {id: 6, cat: TV/Anime, desc: "Anime"}
+ - {id: 3, cat: Audio, desc: "Music"}
+ - {id: 4, cat: Console, desc: "Game"}
+ - {id: 5, cat: PC, desc: "Application"}
+ - {id: 7, cat: Other, desc: "Packs"}
+
+ 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 LST account My Security page and clicking on the API Token tab."
+ - name: freeleech
+ type: checkbox
+ label: Search freeleech only
+ default: false
+ - name: sort
+ type: select
+ label: Sort requested from site
+ default: created_at
+ options:
+ created_at: created
+ seeders: seeders
+ size: size
+ name: title
+ - name: type
+ type: select
+ label: Order requested from site
+ default: desc
+ options:
+ desc: desc
+ asc: asc
+
+login:
+ path: /api/torrents
+ method: get
+ inputs:
+ api_token: "{{ .Config.apikey }}"
+ error:
+ - selector: a[href*="/login"]
+ message:
+ text: "The API key was not accepted by {{ .Config.sitelink }}."
+
+search:
+ paths:
+ # https://hdinnovations.github.io/UNIT3D-Community-Edition-Docs/api_endpoints.html
+ # https://github.com/HDInnovations/UNIT3D-Community-Edition/blob/master/app/Http/Controllers/API/TorrentController.php
+ - path: "/api/torrents/filter"
+ response:
+ type: json
+
+ inputs:
+ # if we have an id based search, add Season and Episode as query in name for UNIT3D < v6. Else pass S/E Params for UNIT3D >= v6
+ api_token: "{{ .Config.apikey }}"
+ name: "{{ .Keywords }}"
+ $raw: "{{ if .Query.Season }}&seasonNumber={{ .Query.Season }}{{ else }}{{ end }}{{ if .Query.Ep }}&episodeNumber={{ .Query.Ep }}{{ else }}{{ end }}{{ if .Query.TMDBID }}&tmdbId={{ .Query.TMDBID }}{{ else }}{{ end }}{{ if .Query.IMDBIDShort }}&imdbId={{ .Query.IMDBIDShort }}{{ else }}{{ end }}{{ if .Query.TVDBID }}&tvdbId={{ .Query.TVDBID }}{{ else }}{{ end }}{{ range .Categories }}&categories[]={{.}}{{end}}{{ if .Config.freeleech }}&free=1{{ else }}{{ end }}"
+ sortField: "{{ .Config.sort }}"
+ sortDirection: "{{ .Config.type }}"
+ perPage: 100
+ page: 1
+
+ keywordsfilters:
+ - name: re_replace
+ args: ["\\.", " "]
+
+ rows:
+ selector: data
+ attribute: attributes
+ count:
+ selector: meta.total
+
+ fields:
+ category:
+ selector: category_id
+ title:
+ selector: name
+ filters:
+ - name: re_replace
+ args: ["\\.", " "]
+ details:
+ selector: details_link
+ download:
+ selector: download_link
+ infohash:
+ selector: info_hash
+ poster:
+ selector: poster
+ filters:
+ - name: replace
+ args: ["https://via.placeholder.com/90x135", ""]
+ imdbid:
+ selector: imdb_id
+ tmdbid:
+ selector: tmdb_id
+ tvdbid:
+ selector: tvdb_id
+ files:
+ selector: num_file
+ seeders:
+ selector: seeders
+ leechers:
+ selector: leechers
+ grabs:
+ selector: times_completed
+ date:
+ # 2021-10-18T00:34:50.000000Z"
+ selector: created_at
+ size:
+ selector: size
+ downloadvolumefactor:
+ # api returns 0%, 25%, 50%, 75%, 100%
+ selector: freeleech
+ case:
+ 0%: 1 # not free
+ 25%: 0.75
+ 50%: 0.5
+ 75%: 0.25
+ 100%: 0 # freeleech
+ "*": 0 # catch errors
+ uploadvolumefactor:
+ # api returns 0=false, 1=true
+ selector: double_upload
+ case:
+ 0: 1 # normal
+ 1: 2 # double
+# global MR is 1.0 but torrents must be seeded for 3 days regardless of ratio
+# minimumratio:
+# text: 1.0
+ minimumseedtime:
+ # 3 days (as seconds = 3 x 24 x 60 x 60)
+ text: 259200
+# json UNIT3D 6.2.1
diff --git a/definitions/v7/estone.yml b/definitions/v7/estone.yml
index 7696febf8..1809969ad 100644
--- a/definitions/v7/estone.yml
+++ b/definitions/v7/estone.yml
@@ -35,10 +35,10 @@ caps:
modes:
search: [q]
- tv-search: [q, season, ep]
+ tv-search: [q, season, ep, genre]
movie-search: [q, genre]
- music-search: [q]
- book-search: [q]
+ music-search: [q, genre]
+ book-search: [q, genre]
settings:
- name: username
@@ -154,6 +154,7 @@ search:
img[src="pic/dupla_up.png"]: 2
"*": 1
genre:
+ optional: true
selector: div i
filters:
- name: regexp
diff --git a/definitions/v7/oshenpt.yml b/definitions/v7/oshenpt.yml
index cbd85b129..45bde9040 100644
--- a/definitions/v7/oshenpt.yml
+++ b/definitions/v7/oshenpt.yml
@@ -7,7 +7,7 @@ type: private
encoding: UTF-8
links:
- http://www.oshen.win/
-links:
+legacylinks:
- https://www.oshen.win/ # forces http
caps:
diff --git a/definitions/v7/polishsource.yml b/definitions/v7/polishsource.yml
index 562243c24..9532050e8 100644
--- a/definitions/v7/polishsource.yml
+++ b/definitions/v7/polishsource.yml
@@ -25,10 +25,10 @@ caps:
modes:
search: [q]
- tv-search: [q, season, ep, imdbid]
+ tv-search: [q, season, ep, imdbid, genre]
movie-search: [q, imdbid, genre]
music-search: [q, genre]
- book-search: [q]
+ book-search: [q, genre]
settings:
- name: username
@@ -132,7 +132,11 @@ search:
selector: a[href^="downloadssl.php?id="]
attribute: href
genre:
+ optional: true
selector: td:nth-child(2) > small
+ filters:
+ - name: replace
+ args: [" ", ", "]
_language:
optional: true
selector: img[src="pic/pl.png"]
diff --git a/definitions/v7/putao.yml b/definitions/v7/putao.yml
index 9d253eaf4..f14055e8b 100644
--- a/definitions/v7/putao.yml
+++ b/definitions/v7/putao.yml
@@ -128,19 +128,21 @@ search:
filters:
- name: querystring
args: cat
- title:
+ title_default:
selector: a[href^="details.php?id="]
- title:
+ title_optional:
optional: true
selector: a[title][href^="details.php?id="]
attribute: title
+ title:
+ text: "{{ if .Result.title_optional }}{{ .Result.title_optional }}{{ else }}{{ .Result.title_default }}{{ end }}"
details:
selector: a[href^="details.php?id="]
attribute: href
download:
selector: a[href^="download.php?id="]
attribute: href
- date:
+ date_elapsed:
# time elapsed (default)
# 19时
3分 (19 hours 3 minutes)
# 2天
21时 (2 days 21 hours)
@@ -160,7 +162,7 @@ search:
- name: append
args: " ago"
- name: timeago
- date:
+ date_added:
# time added
selector: td:nth-child(4):contains("-")
optional: true
@@ -169,6 +171,8 @@ search:
args: " +08:00" # CST
- name: dateparse
args: "2006-01-0215:04:05 -07:00"
+ 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:
diff --git a/definitions/v7/schema.json b/definitions/v7/schema.json
index 5edee5478..3ac979e57 100644
--- a/definitions/v7/schema.json
+++ b/definitions/v7/schema.json
@@ -176,7 +176,7 @@
"uniqueItems": true,
"items": {
"type": "string",
- "enum": ["q", "season", "ep", "imdbid", "tvdbid", "tmdbid", "tvmazeid", "traktid", "doubanid"]
+ "enum": ["q", "season", "ep", "imdbid", "tvdbid", "tmdbid", "tvmazeid", "traktid", "doubanid", "year", "genre"]
}
},
"movie-search": {
@@ -184,7 +184,7 @@
"uniqueItems": true,
"items": {
"type": "string",
- "enum": ["q", "imdbid", "tmdbid", "traktid", "doubanid", "genre"]
+ "enum": ["q", "imdbid", "tmdbid", "traktid", "doubanid", "year", "genre"]
}
},
"music-search": {
@@ -200,7 +200,7 @@
"uniqueItems": true,
"items": {
"type": "string",
- "enum": ["q", "title", "author"]
+ "enum": ["q", "title", "author", "publisher", "year", "genre"]
}
}
},
@@ -650,7 +650,7 @@
"^((category|categorydesc)\\|(noappend|append))?$": {
"$ref": "#/definitions/SelectorBlock"
},
- "^(download|magnet|infohash|details|comments|title|description|category|categorydesc|size|leechers|seeders|date|files|grabs|downloadvolumefactor|uploadvolumefactor|minimumratio|minimumseedtime|imdb|imdbid|tmdbid|rageid|tvdbid|tvmazeid|traktid|doubanid|poster|genre|year|author|booktitle|album|artist|label|track)(_([A-Za-z0-9_])*)?$": {
+ "^(download|magnet|infohash|details|comments|title|description|category|categorydesc|size|leechers|seeders|date|files|grabs|downloadvolumefactor|uploadvolumefactor|minimumratio|minimumseedtime|imdb|imdbid|tmdbid|rageid|tvdbid|tvmazeid|traktid|doubanid|poster|genre|year|author|booktitle|publisher|album|artist|label|track)(_([A-Za-z0-9_])*)?$": {
"$ref": "#/definitions/SelectorBlock"
}
},
diff --git a/definitions/v7/teracod.yml b/definitions/v7/teracod.yml
index a222df4cf..84411abb2 100644
--- a/definitions/v7/teracod.yml
+++ b/definitions/v7/teracod.yml
@@ -47,10 +47,10 @@ caps:
modes:
search: [q]
- tv-search: [q, season, ep]
+ tv-search: [q, season, ep, genre]
movie-search: [q, genre]
- music-search: [q]
- book-search: [q]
+ music-search: [q, genre]
+ book-search: [q, genre]
settings:
- name: username
@@ -172,6 +172,7 @@ search:
"font[color=\"#2A821E\"]:contains(\"x2\")": 2
"*": 1
genre:
+ optional: true
selector: td.torrent:nth-child(2)
filters:
- name: regexp