diff --git a/definitions/v3/mteamtp.yml b/definitions/v3/mteamtp.yml
index 10fbe499d..b55d55d69 100644
--- a/definitions/v3/mteamtp.yml
+++ b/definitions/v3/mteamtp.yml
@@ -101,6 +101,8 @@ login:
error:
- selector: td.embedded:has(h2:contains("登录失败"))
- selector: td.embedded:has(h2:contains("failed"))
+ - selector: td.toolbox:contains("錯誤")
+ - selector: td.toolbox:contains("Error")
test:
path: index.php
selector: a[href="logout.php"]
diff --git a/definitions/v3/piratbit.yml b/definitions/v3/piratbit.yml
index 70fbec8d3..32f951ae6 100644
--- a/definitions/v3/piratbit.yml
+++ b/definitions/v3/piratbit.yml
@@ -748,6 +748,9 @@ search:
download:
selector: td a.genmed
attribute: href
+ description:
+ selector: td:first-child span
+ attribute: title
size:
selector: td > u
date:
diff --git a/definitions/v3/piratbitl.yml b/definitions/v3/piratbitl.yml
index c0880daad..af44dd90b 100644
--- a/definitions/v3/piratbitl.yml
+++ b/definitions/v3/piratbitl.yml
@@ -675,6 +675,13 @@ login:
path: index.php
selector: li a[href="/login.php?logout=1"]
+download:
+ selectors:
+ - selector: a[class="btn btn-sm btn-success"][href^="/dl.php?id="]
+ attribute: href
+ - selector: a[href^="magnet:?xt="]
+ attribute: href
+
search:
paths:
- path: tracker.php
@@ -711,7 +718,7 @@ search:
submit: "Поиск"
rows:
- selector: tr[id^="tor_"]:not(:has(span[title="закрыто"])):not(:has(span[title="авторское право"]))
+ selector: tr[id^="tor_"]:not(:has(span[title="закрыто"]))
filters:
- name: andmatch
@@ -762,11 +769,13 @@ search:
selector: td a.genmed
attribute: href
download:
- selector: td div a.dLink
+ selector: td a.genmed
attribute: href
+ description:
+ selector: td:first-child span
+ attribute: title
size:
selector: td > u
- # 2 date flavours for 3 languages
date:
# unix
selector: td[title="Добавлен"] > u, td[title="Added"] > u
diff --git a/definitions/v3/pixelados.yml b/definitions/v3/pixelados.yml
index 2c9868b6e..0c766c356 100644
--- a/definitions/v3/pixelados.yml
+++ b/definitions/v3/pixelados.yml
@@ -1,6 +1,6 @@
---
id: pixelados
-name: Pixelados
+name: Pixelados (API)
description: "Pixelados is a Spanish Private Torrent Tracker for HD MOVIES / TV"
language: es-ES
type: private
@@ -81,12 +81,15 @@ search:
page: 1
keywordsfilters:
+ - name: diacritics
+ args: replace
- name: re_replace
args: ["\\.", " "]
+ # strip season and ep when it's added by tvsearch Query
- name: re_replace
- args: ["(?i)\\bS0*(\\d+)\\b", "T$1"]
+ args: ["(?i)\\bS0*(\\d+)\\b", "{{ if eq .Query.Type \"tvsearch\" }}{{ else }}T$1{{ end }}"]
- name: re_replace
- args: ["(?i)S0?(\\d{1,2})E(\\d{1,2})", "$1x$2"]
+ args: ["(?i)S0?(\\d{1,2})E(\\d{1,2})", "{{ if eq .Query.Type \"tvsearch\" }}{{ else }}$1x$2{{ end }}"]
rows:
selector: data
@@ -100,12 +103,17 @@ search:
title:
selector: name
filters:
+ # Replace Spanish season names like T1, MS (MiniSerie), TU (Temporada Unica) for normalized format S1
- name: re_replace
args: ["(?i)T(\\d{1,2})\\b", "S$1"]
- name: re_replace
args: ["(\\d{2})[×|x](\\d{2})", "S$1E$2"]
- name: re_replace
args: ["(\\d{1})[×|x](\\d{2})", "S0$1E$2"]
+ - name: re_replace
+ args: ["(?i)MS\\b", "S1"]
+ - name: re_replace
+ args: ["(?i)TU\\b", "S1"]
details:
selector: details_link
download:
diff --git a/definitions/v3/pterclub.yml b/definitions/v3/pterclub.yml
index b3dc140d6..89d8be209 100644
--- a/definitions/v3/pterclub.yml
+++ b/definitions/v3/pterclub.yml
@@ -82,7 +82,7 @@ login:
inputs:
username: "{{ .Config.username }}"
password: "{{ .Config.password }}"
- verify_code: "{{ .Config.2facode }}"
+ 2fa_secret: "{{ .Config.2facode }}"
logout: ""
securelogin: ""
ssl: yes
@@ -138,7 +138,8 @@ search:
selector: img[data-orig]
attribute: data-orig
imdbid:
- selector: a[href*="imdb.com/title/tt"]
+ selector: a[href$="&search_area=4"]
+ attribute: href
attribute: href
# staff have extra columns at the start and end of a row, so we have to float the next lot of selectors off an anchor
_anchor1:
diff --git a/definitions/v3/oxtorrent.yml b/definitions/v3/torrent911.yml
similarity index 97%
rename from definitions/v3/oxtorrent.yml
rename to definitions/v3/torrent911.yml
index 22920c015..b814fbff9 100644
--- a/definitions/v3/oxtorrent.yml
+++ b/definitions/v3/torrent911.yml
@@ -1,7 +1,7 @@
---
-id: oxtorrent
-name: OxTorrent
-description: "OxTorrent is a French Public site for TV / MOVIES / GENERAL"
+id: torrent911
+name: Torrent911
+description: "Torrent911 is a French Public site for TV / MOVIES / GENERAL"
language: fr-FR
type: public
encoding: UTF-8
@@ -50,6 +50,7 @@ caps:
- {id: Logiciels, cat: PC, desc: "Software"}
- {id: Jeux-PC, cat: PC/Games, desc: "PC Games"}
- {id: Jeux-Consoles, cat: Console/XBox 360, desc: "Console Games"}
+ - {id: Porno, cat: XXX, desc: "Porno"}
modes:
search: [q]
diff --git a/definitions/v3/torrentparadise.yml b/definitions/v3/torrentparadise.yml
deleted file mode 100644
index 65afb4ab1..000000000
--- a/definitions/v3/torrentparadise.yml
+++ /dev/null
@@ -1,254 +0,0 @@
----
-id: torrentparadise
-name: TorrentParadise
-description: "Torrent Paradise is a Public magnet indexer"
-language: en-US
-type: public
-encoding: UTF-8
-links:
- - https://torrentparadise.cc/
-legacylinks:
- - https://torrentparadise.cl/ # redirects to *.cc
- - https://torrentparadise.to/ # redirects to *.cc
- - https://torrentparadise.la/ # broken
- - https://torrentparadise.org/ # redirects to *.cc
- - https://torrentparadise.pm/ # DNS_PROBE_FINISHED_NXDOMAIN
-
-caps:
- categories:
- ADULT: XXX
- ADULTHENTAI: XXX
- ADULTLATINA: XXX
- ADULTMILF: XXX
- ADULTHDMOVIES: XXX
- ADULTPORN: XXX
- ADULTXXX: XXX
- ANDROID: PC
- ANIME: TV/Anime
- ANIMEDUBBEDSUBBED: TV/Anime
- ANIMEOTHERS: TV/Anime
- APPLICATIONS: PC
- APPLICATIONSANDROID: PC
- APPLICATIONSHANDHELD: PC/Mobile-Other
- APPLICATIONSMAC: PC/Mac
- APPLICATIONSOTHEROS: PC
- APPLICATIONSWINDOWS: PC/0day
- APPS: PC
- APPSANDROID: PC
- APPSHANDHELD: PC/Mobile-Other
- APPSMAC: PC/Mac
- APPSOTHEROS: PC
- APPSPC: PC
- APPSWINDOWS: PC/0day
- AUDIO: Audio
- AUDIOBOOKS: Audio/Audiobook
- AUDIOAUDIOBOOKS: Audio/Audiobook
- AUDIOFLAC: Audio/Lossless
- AUDIOLOSSLESS: Audio/Lossless
- AUDIOMP3: Audio/MP3
- AUDIOMUSIC: Audio
- AUDIOOTHER: Audio/Other
- AUDIOSOUNDCLIPS: Audio
- ADULTGAMES: XXX
- ADULTMOVIES: XXX
- BOOKS: Books
- BOOKSAUDIO: Audio/Audiobook
- BOOKSCOMICS: Books/Comics
- BOOKSEBOOKS: Books/EBook
- BOOKSMAGAZINES: Books/Mags
- BOOKSNONFICTION: Books
- BOOKSTEXTBOOKS: Books
- BOOKSTUTORIALS: Books
- COMIC: Books/Comics
- COMICSNEM43COMICS: Books/Comics
- DESIPORN: XXX
- DOCUMENTARIES: TV/Documentary
- DVDRVIDEO: Movies/DVD
- EBOOKS: Books/EBook
- EBOOKSTUTORIALS: Books/EBook
- ESTRENOS: XXX
- FLAC: Audio/Lossless
- FLACMUSIC: Audio/Lossless
- GAMES: PC/Games
- GAMESANDROID: PC/Games
- GAMESHANDHELD: Console
- GAMESOTHER: Console
- GAMESPC: PC/Games
- GAMESPS2: Console/PSP
- GAMESPS3: Console/PS3
- GAMESPS4: Console/PS4
- GAMESPSP: Console/PSP
- GAMESWII: Console/Wii
- GAMESWIIU: Console/WiiU
- GAMESWINDOWS: PC/Games
- GAMESXBOX: Console/XBox
- GAMESXBOX360: Console/XBox 360
- HDMOVIES: Movies/HD
- IMAGES: Other
- JAPANESEANIME: TV/Anime
- JUEGOS: Console
- JUEGOSPC: PC/Games
- JUEGOSPS2: Console/PSP
- JUEGOSPS3: Console/PS3
- JUEGOSPS4: Console/PS4
- JUEGOSPSP: Console/PSP
- JUEGOSWII: Console/Wii
- JUEGOSWIIU: Console/WiiU
- JUEGOSXBOX: Console/XBox
- JUEGOSXBOX360: Console/XBox 360
- MACINTOSH: PC/Mac
- MISCELLANEOUS: Other
- MOBILE: PC/Mobile-Other
- MOVIES: Movies
- MOVIES3D: Movies/3D
- MOVIESACTION: Movies
- MOVIESBLURAYDISCREMUX: Movies/HD
- MOVIESBOLLYWOOD: Movies
- MOVIESCAMTS: Movies
- MOVIESDOCUMENTARY: TV/Documentary
- MOVIESDUBSDUALAUDIO: Movies
- MOVIESENGLISHSPANISHSUBT: Movies
- MOVIESSDX264H264: Movies/SD
- MOVIESHD: Movies/HD
- MOVIESHD720P: Movies/HD
- MOVIESHD1080P: Movies/HD
- MOVIESHEVCX265: Movies/HD
- MOVIESHIGHRESMOVIES: Movies/HD
- MOVIESSCIFI: Movies
- MOVIESSPANISHLANGUAGE: Movies
- MOVIESSPANISHLATINAMERICA: Movies
- MOVIESULTRAHD4K: Movies/UHD
- MOVIESX264H264: Movies/HD
- MOVIESXVID: Movies/SD
- MOVIESWEBRIPX264X265: Movies/HD
- MP3: Audio/MP3
- MP3MUSIC: Audio/MP3
- MSICA: Other
- MUSIC: Audio
- MUSICFLAC: Audio/Lossless
- MUSICLOSSLESS: Audio/Lossless
- MUSICMP3: Audio/MP3
- MUSICMUSICVIDEOS: Audio/Video
- MUSICVIDEOS: Audio/Video
- OTHER: Other
- OTHERCOMICS: Other
- OTHERCOVERS: Other
- OTHEREBOOKS: Other
- OTHEROTHER: Other
- OTHERPICTURES: Other
- OTHERSOUNDCLIPS: Other
- PACKS: TV
- PELICULASCVCD: TV/SD
- PELICULASDIVX: TV/SD
- PELICULASHDRIP: TV/HD
- PELICULASMICROHD: TV/HD
- PICTURES: Other
- PORN: XXX
- PORNHDMOVIES: XXX
- PORNGAMES: XXX
- PORNMOVIECLIPS: XXX
- PORNMOVIESDVDR: XXX
- PORNMOVIES: XXX
- PORNOTHER: XXX
- PORNPICTURES: XXX
- SERIES: TV
- SOFTWARE: PC
- SOFTWAREANDROID: PC/Mobile-Android
- SOFTWAREMAC: PC/Mac
- SOFTWAREWINDOWS: PC/0day
- SOTFTWARE: PC
- SPORTS: TV/Sport
- TVHDSPORTS: TV/Sport
- TUTORIALS: Other
- TUTORIALSTUTORIALS: Other
- TV: TV
- TVHDX264H264: TV/HD
- TVHEVCX265: TV/HD
- TVDIVXXVID: TV/SD
- TVDOCUMENTARY: TV/Documentary
- TVSDXVID: TV/SD
- TVSDX264H264: TV/SD
- TVSDX264X265: TV/SD
- TVSHOWS: TV
- TVSPORT: TV/Sport
- TVULTRAHD4K: TV/UHD
- TVTVPACKS: TV
- VIDEO: Movies
- UNSORTEDUNSORTED: Other
- VIDEOHANDHELD: Movies
- VIDEOHDMOVIES: Movies/HD
- VIDEOHDRIP: Movies
- VIDEOHDTVSHOWS: TV/HD
- VIDEOMOVIESDVDR: Movies/DVD
- VIDEOMOVIECLIPS: Movies
- VIDEOMOVIES: Movies
- VIDEOMUSICVIDEOS: Audio/Video
- VIDEOOTHER: Movies
- VIDEOS: Movies
- VIDEOSDMOVIES: Movies/SD
- VIDEOSDTVSHOWS: TV/SD
- VIDEOTVSHOWS: TV
- VIDEOUHDMOVIES: Movies/UHD
- VIDEOUHDTVSHOWS: TV/UHD
- WINDOWS: PC/0day
- XXX: XXX
- XXXHDVIDEO: XXX
- XXXVIDEO: XXX
-
- modes:
- search: [q]
- tv-search: [q, season, ep]
- movie-search: [q]
- music-search: [q]
- book-search: [q]
-
-settings: []
-
-download:
- selectors:
- - selector: a[href^="magnet:?xt="]
- attribute: href
-
-search:
- # https://torrentparadise.org/searchA.php?f=monday+night
- paths:
- - path: "searchA.php?f={{ if .Keywords }}{{ .Keywords }}{{ else }}%{{ end }}"
-
- rows:
- selector: table.table-bordered > tbody > tr.table-default
-
- fields:
- category:
- text: OTHER
- category|noappend:
- selector: td:nth-child(1) a
- optional: true
- filters:
- - name: re_replace
- args: ["[^a-zA-Z0-9]+", ""]
- - name: toupper
- description:
- selector: td:nth-child(1) a
- title:
- selector: td:nth-child(2) a
- details:
- selector: td:nth-child(2) a
- attribute: href
- download:
- selector: td:nth-child(2) a
- attribute: href
- size:
- selector: td:nth-child(3)
- date:
- selector: td:nth-child(4)
- filters:
- - name: timeago
- seeders:
- selector: td:nth-child(5)
- leechers:
- selector: td:nth-child(6)
- downloadvolumefactor:
- text: 0
- uploadvolumefactor:
- text: 1
-# engine n/a
diff --git a/definitions/v6/locadora.yml b/definitions/v6/locadora.yml
new file mode 100644
index 000000000..c6891e06a
--- /dev/null
+++ b/definitions/v6/locadora.yml
@@ -0,0 +1,148 @@
+---
+id: locadora
+name: Locadora
+description: "Locadora is a Brazilian tracker for Movies and TV Shows"
+language: pt-BR
+type: private
+encoding: UTF-8
+links:
+ - https://locadora.xyz/
+
+caps:
+ categorymappings:
+ - {id: 1, cat: Movies, desc: "Movies"}
+ - {id: 2, cat: TV, desc: "TV"}
+
+ modes:
+ search: [q]
+ tv-search: [q, season, ep, imdbid, tvdbid, 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 Locadora 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 0.4 but torrents must be seeded for 3 days regardless of ratio
+# minimumratio:
+# text: 0.4
+ minimumseedtime:
+ # 3 days (as seconds = 3 x 24 x 60 x 60)
+ text: 259200
+# json UNIT3D 6.2.1
diff --git a/definitions/v6/pixelados.yml b/definitions/v6/pixelados.yml
index d0e43e17d..1628bb68b 100644
--- a/definitions/v6/pixelados.yml
+++ b/definitions/v6/pixelados.yml
@@ -1,6 +1,6 @@
---
id: pixelados
-name: Pixelados
+name: Pixelados (API)
description: "Pixelados is a Spanish Private Torrent Tracker for HD MOVIES / TV"
language: es-ES
type: private
diff --git a/definitions/v6/pterclub.yml b/definitions/v6/pterclub.yml
new file mode 100644
index 000000000..c50b1a7c8
--- /dev/null
+++ b/definitions/v6/pterclub.yml
@@ -0,0 +1,198 @@
+---
+id: pterclub
+name: PTerClub
+description: "PTerClub is a CHINESE Private Torrent Tracker for HD MUSIC VIDEOS, MOVIES, TV & ANIME"
+language: zh-CN
+type: private
+encoding: UTF-8
+links:
+ - https://pterclub.com/
+
+caps:
+ categorymappings:
+ - {id: 401, cat: Movies, desc: "电影 (Movie)"}
+ - {id: 404, cat: TV, desc: "电视剧 (TV Play)"}
+ - {id: 403, cat: TV/Anime, desc: "动漫 (Anime)"}
+ - {id: 405, cat: TV, desc: "综艺 (TV Show)"}
+ - {id: 413, cat: Audio/Video, desc: "音乐短片 (MV)"}
+ - {id: 418, cat: Audio/Video, desc: "舞台演出(Stage Performance)"}
+ - {id: 406, cat: Audio, desc: "音乐 (Music)"}
+ - {id: 402, cat: TV/Documentary, desc: "纪录片 (Documentary)"}
+ - {id: 407, cat: TV/Sport, desc: "体育 (Sport)"}
+ - {id: 408, cat: Books, desc: "电子书 (Ebook)"}
+ - {id: 409, cat: Console, desc: "游戏 (Game)"}
+ - {id: 410, cat: PC, desc: "软件 (Software)"}
+ - {id: 411, cat: Other, desc: "学习 (Study)"}
+ - {id: 412, cat: Other, desc: "其它 (Other)"}
+
+ modes:
+ search: [q]
+ tv-search: [q, season, ep, imdbid]
+ movie-search: [q, imdbid]
+ music-search: [q]
+ book-search: [q]
+
+settings:
+ - name: username
+ type: text
+ label: Username
+ - name: password
+ type: password
+ label: Password
+ - name: 2facode
+ type: text
+ label: 2FA code
+ - name: info_2fa
+ type: info
+ label: "About 2FA code"
+ default: "Only fill in the 2FA code box if you have enabled 2FA on the PTerClub 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 Torrents per page: setting to 100 on your account profile.
+
+login:
+ path: login.php
+ method: form
+ form: form[action="takelogin.php"]
+ captcha:
+ type: image
+ selector: img[alt="CAPTCHA"]
+ input: imagestring
+ inputs:
+ username: "{{ .Config.username }}"
+ password: "{{ .Config.password }}"
+ 2fa_secret: "{{ .Config.2facode }}"
+ logout: ""
+ securelogin: ""
+ ssl: yes
+ trackerssl: yes
+ error:
+ - selector: td.embedded:has(h2:contains("失败"))
+ test:
+ path: index.php
+ selector: a[data-url="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 }}"
+
+ 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_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
+ poster:
+ selector: img[data-orig]
+ attribute: data-orig
+ imdbid:
+ selector: a[href$="&search_area=4"]
+ attribute: href
+ doubanid:
+ selector: a[href$="&search_area=5"]
+ attribute: href
+ # staff have extra columns at the start and end of a row, so we have to float the next lot of selectors off an anchor
+ _anchor1:
+ selector: td:has(a[href^="comment.php?"])
+ optional: true
+ date_elapsed:
+ # time type: time elapsed (default)
+ selector: "td:has(a[{{ if .Result._anchor1 }}href^=\"comment.php\"{{ else }}href$=\"startcomments\"{{ end }}]) ~ td > span[title]"
+ attribute: title
+ optional: true
+ filters:
+ - name: append
+ args: " +08:00" # CST
+ - name: dateparse
+ args: "2006-01-02 15:04:05 -07:00"
+ date_added:
+ # time added
+ selector: "td:has(a[{{ if .Result._anchor1 }}href^=\"comment.php\"{{ else }}href$=\"startcomments\"{{ end }}]) ~ td:not(:has(span[title]))"
+ optional: true
+ filters:
+ - name: append
+ 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:has(a[{{ if .Result._anchor1 }}href^=\"comment.php\"{{ else }}href$=\"startcomments\"{{ end }}]) ~ td ~ td"
+ seeders:
+ selector: "td:has(a[{{ if .Result._anchor1 }}href^=\"comment.php\"{{ else }}href$=\"startcomments\"{{ end }}]) ~ td ~ td ~ td"
+ leechers:
+ selector: "td:has(a[{{ if .Result._anchor1 }}href^=\"comment.php\"{{ else }}href$=\"startcomments\"{{ end }}]) ~ td ~ td ~ td ~ td"
+ grabs:
+ selector: "td:has(a[{{ if .Result._anchor1 }}href^=\"comment.php\"{{ else }}href$=\"startcomments\"{{ end }}]) ~ td ~ td ~ td ~ td ~ td"
+ 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:has(table.torrentname)
+ remove: a, img
+ minimumratio:
+ text: 0.9
+# NexusPHP custom v2019.12
diff --git a/definitions/v7/pixelados-html.yml b/definitions/v7/pixelados-html.yml
new file mode 100644
index 000000000..6f2f4ea28
--- /dev/null
+++ b/definitions/v7/pixelados-html.yml
@@ -0,0 +1,221 @@
+---
+id: pixelados-html
+name: Pixelados
+description: "Pixelados is a Spanish Private Torrent Tracker for HD MOVIES / TV"
+language: es-ES
+type: private
+encoding: UTF-8
+links:
+ - https://pixelados.tv/
+
+caps:
+ categorymappings:
+ - {id: 1, cat: Movies, desc: "Películas"}
+ - {id: 2, cat: TV, desc: "Series"}
+ - {id: 3, cat: Audio, desc: "Música"}
+ - {id: 4, cat: TV/Documentary, desc: "Documentales"}
+ - {id: 5, cat: TV/Sport, desc: "Deportes"}
+ - {id: 6, cat: TV/Anime, desc: "Animación"}
+
+ modes:
+ search: [q]
+ tv-search: [q, season, ep, imdbid, tvdbid, tmdbid]
+ movie-search: [q, imdbid, tmdbid]
+ music-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: created_at
+ options:
+ created_at: created
+ seeders: seeders
+ size: size
+ name: title
+ - name: type
+ type: select
+ label: Order requested from site
+ default: desc
+ options:
+ desc: desc
+ asc: asc
+
+login:
+ path: login
+ method: form
+ form: form[action$="/login"]
+ inputs:
+ username: "{{ .Config.username }}"
+ password: "{{ .Config.password }}"
+ remember: on
+ selectorinputs:
+ _token:
+ selector: input[name="_token"]
+ attribute: value
+ error:
+ - selector: div#ERROR_COPY
+
+search:
+ paths:
+ - path: torrents
+ inputs:
+ sortField: "{{ .Config.sort }}"
+ sortDirection: "{{ .Config.type }}"
+ perPage: 100
+ name: "{{ .Keywords }}"
+ $raw: "{{ 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 $i, $e := .Categories }}&categories[{{$i}}]={{.}}{{end}}{{ if .Config.freeleech }}&free[0]=100{{ else }}{{ end }}"
+ keywordsfilters:
+ - name: diacritics
+ args: replace
+ - name: re_replace
+ args: ["\\.", " "]
+ - name: re_replace
+ args: ["(?i)\\bS0*(\\d+)\\b", "T$1"]
+ - name: re_replace
+ args: ["(?i)S0?(\\d{1,2})E(\\d{1,2})", "$1x$2"]
+
+ rows:
+ selector: table > tbody > tr
+
+ fields:
+ category:
+ selector: td.torrent-listings-format div:first-child
+ case:
+ i.fa-film: 1
+ i.fa-tv-retro: 2
+ i.fa-music: 3
+ i.fa-paw: 4
+ i.fa-volleyball: 5
+ i.fa-robot: 6
+ details:
+ selector: a.torrent-listings-name
+ attribute: href
+ title_raw:
+ selector: a.torrent-listings-name
+ format:
+ selector: td.torrent-listings-format
+ vose:
+ selector: a[href$="torrents?types[0]=53"]
+ optional: true
+ mejorada:
+ selector: a[href$="torrents?types[0]=52"]
+ optional: true
+ corregida:
+ selector: a[href$="torrents?types[0]=58"]
+ optional: true
+ audio_editado:
+ selector: a[href$="torrents?types[0]=39"]
+ optional: true
+ overview:
+ selector: td.torrent-listings-overview
+ remove: a, span.torrent-listings-comments, span.torrent-listings-thanks, span.torrent-listings-uploader
+ title:
+ text: "{{ .Result.title_raw }} {{ .Result.format }} {{ .Result.overview }}{{ if .Result.vose }}{{ else }} SPANISH{{ end }}{{ if or .Result.mejorada .Result.corregida .Result.audio_editado }} PROPER{{ else }}{{ end }}"
+ filters:
+ # Replace Spanish season names like T1, MS (MiniSerie), TU (Temporada Unica) for normalized format S1
+ - name: re_replace
+ args: ["(?i)T(\\d{1,2})\\b", "S$1"]
+ - name: re_replace
+ args: ["(\\d{2})[×|x](\\d{2})", "S$1E$2"]
+ - name: re_replace
+ args: ["(\\d{1})[×|x](\\d{2})", "S0$1E$2"]
+ - name: re_replace
+ args: ["(?i)MS\\b", "S1"]
+ - name: re_replace
+ args: ["(?i)TU\\b", "S1"]
+ download:
+ selector: a[href*="/download/"]
+ attribute: href
+ poster:
+ selector: div.torrent-poster img
+ attribute: src
+ filters:
+ - name: replace
+ args: ["https://via.placeholder.com/90x135", ""]
+ size:
+ selector: td.torrent-listings-size
+ seeders:
+ selector: td.torrent-listings-seeders
+ leechers:
+ selector: td.torrent-listings-leechers
+ grabs:
+ selector: td.torrent-listings-completed
+ 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: td.torrent-listings-age
+ filters:
+ # translations for Turkish|Estonian|Danish|Italian|Polish|Norwegian|Portuguese|Czech|Russian|Romanian|Spanish|French|German|Bulgarian|Dutch|Chinese|Japanese|Swedish
+ - name: re_replace
+ args: ["(?i)(önce|tagasi|geleden|fa|temu|siden|há|atrás|nazpět|назад|acum|în urmă|hace|il y a|vor|преди|前|sedan)", " ago"]
+ - name: re_replace
+ args: ["(?i)(saniye|sekundit|sekunder|secondi|sekund|segundos|sekundami|секунд|secunde|secondes|Sekunden|секунди|seconden|秒前)", "seconds"]
+ - name: re_replace
+ args: ["(?i)(minutit|minutter|minuti|minuty|minutos|минуты|минут|Minuten|минути|minuten|minuter)", "minutes"]
+ - name: re_replace
+ args: ["(?i)(dakika|minut|minuto|minuta|minutt|минута|Minute|minuut|分钟|分)", " minute"]
+ - name: re_replace
+ args: ["(?i)(tundi|timer|ore|godziny|horas|hodiny|hoden|часа|часов|ore|heures|Stunden|timmar)", "hours"]
+ - name: re_replace
+ args: ["(?i)(saat|tund|time|ora|godzina|hora|hodina|час|oră|heure|Stunde|uur|小时|時間|timme)", " hour"]
+ - name: re_replace
+ args: ["(?i)(päeva|dage|giorni|dni|dias|dny|дня|дней|zile|días|jours|Tagen|дни|dagen|dagar)", "days"]
+ - name: re_replace
+ args: ["(?i)(gün|päev|dag|giorno|dzień|dia|den|день|zi|día|jour|Tag|ден|天|日)", " day"]
+ - name: re_replace
+ args: ["(?i)(nädalat|uger|settimane|tygodnie|uker|semanas|týdny|недели|недель|săptămâni|semaines|Wochen|седмици|weken|veckor)", "weeks"]
+ - name: re_replace
+ args: ["(?i)(hafta|nädal|uge|settimana|tydzień|uke|semana|týden|неделю|săptămână|semaine|Woche|седмица|周|週間|vecka)", " week"]
+ - name: re_replace
+ args: ["(?i) (ay)", "month"]
+ - name: re_replace
+ args: ["(?i)(kuud|måneder|mesi|miesiące|meses|měsíce|месяца|месяцев|luni|meses|mois|Monaten|месеца|maanden|månader)", "months"]
+ - name: re_replace
+ args: ["(?i)(kuu|måned|mese|miesiąc|mês|měsíc|месяц|lună|mes|Monat|месец|maand|个月|ヶ月|månad)", " month"]
+ - name: re_replace
+ args: ["(?i)(aastat|anni|lata|anos|roky|года|ani|años|ans|Jahren|години)", " years"]
+ - name: re_replace
+ args: ["(?i)(yil|aasta|år|anno|rok|ano|год|año|Jahr|година|jaar|年)", " year"]
+ - name: re_replace
+ args: ["(?i) (an)", "year"]
+ - name: re_replace
+ args: ["(?i)(För |und)", ""] # Misc removals
+ - name: timeago
+ downloadvolumefactor:
+ case:
+ i[class*="fa-id-badge text-orange"]: 0 # 24 Hour FreeLeech From BON Store
+ i[class*="fa-trophy text-purple"]: 0 # Special FreeLeech For Certain User Groups
+ i[class*="fa-star text-bold"]: 0 # Freeleech From Token
+ i[class*="fa-coins text-bold"]: 0 # Freeleech From Token
+ i[class*="fa-globe text-blue"]: 0 # Global Freeleech
+ i[class*="fa-star text-gold"]: 0 # Freeleech
+ i[class*="fa-certificate text-pink"]: 0 # Featured Torrent
+ "*": 1
+ uploadvolumefactor:
+ case:
+ i[class*="fa-gem text-green"]: 2 # Single Torrent Double Upload
+ i[class*="fa-globe text-green"]: 2 # Global Double Upload
+ i[class*="fa-certificate text-pink"]: 2 # Featured Torrent
+ "*": 1
+# global MR is 0.4 but torrents must be seeded for 7 days regardless of ratio
+# minimumratio:
+# text: 0.4
+ minimumseedtime:
+ # 7 day (as seconds = 7 x 24 x 60 x 60)
+ text: 604800
+# html UNIT3D 6.1.0 custom