From 56a63bf560ab54d085def17d88785ca9b82a9d12 Mon Sep 17 00:00:00 2001
From: bakerboy448 <55419169+bakerboy448@users.noreply.github.com>
Date: Mon, 18 Apr 2022 07:21:51 -0500
Subject: [PATCH] jackett recon 20220418 - v5 api have json attributes
---
definitions/v3/Bittorrentfiles.yml | 240 +++++++++++++++++++++++
definitions/v3/arabp2p.yml | 172 +++++++++++++++++
definitions/v5/brsociety-api.yml | 133 +++++++++++++
definitions/v5/hdonly.yml | 294 ++++++++++++++++-------------
definitions/v5/lat-team-api.yml | 169 +++++++++++++++++
definitions/v5/reelflix-api.yml | 142 ++++++++++++++
definitions/v5/skipthetrailers.yml | 143 ++++++++++++++
definitions/v5/xthor-api.yml | 154 +++++++--------
8 files changed, 1239 insertions(+), 208 deletions(-)
create mode 100644 definitions/v3/Bittorrentfiles.yml
create mode 100644 definitions/v3/arabp2p.yml
create mode 100644 definitions/v5/brsociety-api.yml
create mode 100644 definitions/v5/lat-team-api.yml
create mode 100644 definitions/v5/reelflix-api.yml
create mode 100644 definitions/v5/skipthetrailers.yml
diff --git a/definitions/v3/Bittorrentfiles.yml b/definitions/v3/Bittorrentfiles.yml
new file mode 100644
index 000000000..07ebcf5a3
--- /dev/null
+++ b/definitions/v3/Bittorrentfiles.yml
@@ -0,0 +1,240 @@
+---
+id: Bittorrentfiles
+name: Bittorrentfiles
+description: "Bittorrentfiles is a Private GERMAN tracker"
+language: de-DE
+type: private
+encoding: UTF-8
+links:
+ - https://bittorrentfiles.me/
+legacylinks:
+ - https://www.Bittorrentfiles.me/
+
+caps:
+ categorymappings:
+ # Movie
+ - {id: 48, cat: Movies/HD, desc: "Movie 1080p"}
+ - {id: 31, cat: Movies/3D, desc: "Movie 3D"}
+ - {id: 21, cat: Movies/HD, desc: "Movie 720p"}
+ - {id: 28, cat: Movies/SD, desc: "Movie AVI"}
+ - {id: 20, cat: Movies/DVD, desc: "Movie DVD-R"}
+ - {id: 40, cat: Movies/HD, desc: Movie "h264/x264"}
+ - {id: 30, cat: Movies/HD, desc: "Movie HD/BD"}
+ - {id: 49, cat: Movies/Foreign, desc: "Movie International"}
+ - {id: 78, cat: Movies/UHD, desc: "Movie UHD"}
+ - {id: 85, cat: Movies/HD, desc: "Movie x265"}
+ # Serien
+ - {id: 79, cat: TV/HD, desc: "Staffeln HD"}
+ - {id: 56, cat: TV/SD, desc: "Staffeln SD"}
+ - {id: 88, cat: TV/UHD, desc: "Staffeln UHD"}
+ - {id: 86, cat: TV/UHD, desc: "Folgen UHD"}
+ - {id: 54, cat: TV/HD, desc: "Folgen HD"}
+ - {id: 80, cat: TV/HD, desc: "Folgen HD/BD"}
+ - {id: 7, cat: TV/SD, desc: "Folgen SD"}
+ - {id: 55, cat: TV/Foreign, desc: "Folgen International"}
+ # Doku
+ - {id: 91, cat: TV/Documentary, desc: "Doku UHD"}
+ - {id: 64, cat: TV/Documentary, desc: "Doku HD"}
+ - {id: 36, cat: TV/Documentary, desc: "Doku SD"}
+ - {id: 81, cat: TV/Documentary, desc: "Doku 3D"}
+ - {id: 82, cat: TV/Documentary, desc: "Doku Packs"}
+ # Spiele
+ - {id: 4, cat: PC/Games, desc: "Spiele Windows"}
+ - {id: 92, cat: PC/Mac, desc: "Spiele Mac"}
+ - {id: 93, cat: PC, desc: "Spiele Linux"}
+ - {id: 97, cat: Console/XBox, desc: "Spiele XBOX"}
+ - {id: 94, cat: PC/Mobile-Other, desc: "Spiele Mobile"}
+ - {id: 95, cat: Console/NDS, desc: "Spiele Nintendo"}
+ - {id: 96, cat: Console/PSP, desc: "Spiele Playstation"}
+ - {id: 42, cat: Console/Other, desc: "Spiele Andere"}
+ # Musik
+ - {id: 66, cat: Audio, desc: "Musik Alben"}
+ - {id: 75, cat: Audio, desc: "Musik Singles"}
+ - {id: 50, cat: Audio, desc: "Musik Charts"}
+ - {id: 52, cat: Audio, desc: "Musik Packs"}
+ - {id: 53, cat: Audio/Video, desc: "Musik Video"}
+ - {id: 61, cat: Audio/Video, desc: "Musik DVD-R"}
+ - {id: 83, cat: Audio/Lossless, desc: "Musik Flac"}
+ - {id: 68, cat: Audio, desc: "Musik Live"}
+ - {id: 6, cat: Audio, desc: "Musik Misc"}
+ - {id: 51, cat: Audio, desc: "Musik OST"}
+ - {id: 67, cat: Audio, desc: "Musik Sampler"}
+ # App
+ - {id: 98, cat: PC/0day, desc: "App Windows"}
+ - {id: 62, cat: PC/Mac, desc: "App Mac OS"}
+ - {id: 63, cat: PC/0day, desc: "App Linux"}
+ - {id: 34, cat: PC, desc: "App Andere"}
+ # Sport
+ - {id: 74, cat: TV/Sport, desc: "Sport HD"}
+ - {id: 39, cat: TV/Sport, desc: "Sport SD"}
+ # Sonstiges
+ - {id: 41, cat: Audio/Audiobook, desc: "Sonstiges A-Book"}
+ - {id: 33, cat: TV/Anime, desc: "Sonstiges Anime"}
+ - {id: 35, cat: Books/EBook, desc: "Sonstiges e-Book-DE"}
+ - {id: 90, cat: Books/EBook, desc: "Sonstiges e-Book-INT"}
+ - {id: 65, cat: Other, desc: "Sonstiges E-Learning"}
+ - {id: 37, cat: PC, desc: "Sonstiges Mobile"}
+ - {id: 87, cat: Books/Mags, desc: "Sonstiges E-Paper"}
+ - {id: 38, cat: Other, desc: "Sonstiges Kids"}
+ - {id: 47, cat: Other, desc: "Sonstiges Line"}
+ - {id: 9, cat: Other, desc: "Sonstiges Andere"}
+ # XXX
+ - {id: 58, cat: XXX/x264, desc: "XXX HD"}
+ - {id: 46, cat: XXX, desc: "XXX Hentai"}
+ - {id: 59, cat: XXX/Pack, desc: "XXX Pack"}
+ - {id: 27, cat: XXX/SD, desc: "XXX SD"}
+ - {id: 76, cat: XXX, desc: "XXX Andere"}
+
+
+ modes:
+ search: [q]
+ tv-search: [q, season, ep, imdbid]
+ movie-search: [q, imdbid]
+ music-search: [q]
+ book-search: [q]
+
+settings:
+ - name: user
+ type: text
+ label: Username
+ - name: pass
+ 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
+ seeds: seeders
+ size: size
+ name: title
+ - name: type
+ type: select
+ label: Order requested from site
+ default: desc
+ options:
+ desc: desc
+ asc: asc
+ - name: info_account
+ type: info
+ label: Account Settings
+ default: In order to see the correct date and size in the torrent rows, change the Torrentliste: setting to Modern on your account profile.
+ - 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: signin.php
+ method: form
+ form: form
+ inputs:
+ user: "{{ .Config.user }}"
+ pass: "{{ .Config.pass }}"
+ error:
+ - selector: .error
+ test:
+ path: browse.php
+
+search:
+ path: browse.php
+ inputs:
+ $raw: "{{ range .Categories }}c{{.}}=1&{{end}}"
+ search: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{ else }}{{ .Keywords }}{{ end }}"
+ # 0=title, 1=descr, 2=nfo, 3=all, 4=imdb
+ search_where: "{{ if .Query.IMDBID }}3{{ else }}0{{ end }}"
+ # 0=active, 1=all, 2=onlydead, 4=only upload, 5=doubleup, 6=halfdown, 7=highlight, 8=request
+ status: "{{ if .Config.freeleech }}4{{ else }}1{{ end }}"
+ orderby: "{{ .Config.sort }}"
+ sort: "{{ .Config.type }}"
+
+ rows:
+ selector: table.tableinborder > tbody > tr:has(a[href^="/download.php"])
+
+ fields:
+ title:
+ selector: a[href^="details.php"]
+ attribute: title
+ category:
+ selector: a[href^="/browse.php?cat="]
+ attribute: href
+ filters:
+ - name: querystring
+ args: cat
+ details:
+ selector: a[href^="details.php"]
+ attribute: href
+ download:
+ selector: a[href^="/download.php"]
+ attribute: href
+ grabs_optional:
+ selector: a[title="Snatcher"]
+ optional: true
+ grabs:
+ text: "{{ if .Result.grabs_optional }}{{ .Result.grabs_optional }}{{ else }}0{{ end }}"
+ files_optional:
+ selector: a[title="Files"]
+ optional: true
+ files:
+ text: "{{ if .Result.files_optional }}{{ .Result.files_optional }}{{ else }}0{{ end }}"
+ size:
+ selector: td:nth-child(6)
+ seeders_optional:
+ selector: a[title="Seeder"]
+ optional: true
+ seeders:
+ text: "{{ if .Result.seeders_optional }}{{ .Result.seeders_optional }}{{ else }}0{{ end }}"
+ leechers_optional:
+ selector: a[title="Leecher"]
+ optional: true
+ leechers:
+ text: "{{ if .Result.leechers_optional }}{{ .Result.leechers_optional }}{{ else }}0{{ end }}"
+ # 2 flavours of dates
+ date_day:
+ # Heute 13:30:04
+ # Gestern 09:10:10
+ selector: td:nth-child(10):contains("Heute"), td:nth-child(10):contains("Gestern")
+ optional: true
+ filters:
+ - name: split
+ args: ["b", 0]
+ - name: replace
+ args: ["Heute", "Today"]
+ - name: replace
+ args: ["Gestern", "Yesterday"]
+ - name: append
+ args: " +01:00" # CET
+ date_year:
+ # 30.02.2018 23:12:50
+ selector: td:nth-child(10):contains("."):contains(":")
+ optional: true
+ filters:
+ - name: split
+ args: ["b", 0]
+ - name: append
+ args: " +01:00" # CET
+ - name: dateparse
+ args: "02.01.2006 15:04:05 -07:00"
+ date:
+ text: "{{ if or .Result.date_year .Result.date_day }}{{ or .Result.date_year .Result.date_day }}{{ else }}now{{ end }}"
+ downloadvolumefactor:
+ case:
+ img[alt="OU"]: 0
+ img[alt="D/2"]: 0.5
+ img[alt="D / 2"]: 0.5
+ "*": 1
+ uploadvolumefactor:
+ case:
+ img[alt="2xU"]: 2
+ "*": 1
+ minimumratio:
+ text: 0.8
+ minimumseedtime:
+ # 60 hours (as seconds = 60 x 60 x 60)
+ text: 216000
+# engine n/a
diff --git a/definitions/v3/arabp2p.yml b/definitions/v3/arabp2p.yml
new file mode 100644
index 000000000..520071478
--- /dev/null
+++ b/definitions/v3/arabp2p.yml
@@ -0,0 +1,172 @@
+---
+id: arabp2p
+name: ArabP2P
+description: "ArabP2P is an ARABIC Private Torrent Tracker for MOVIES / TV / GENERAL"
+language: ar-AR
+type: private
+encoding: UTF-8
+links:
+ - https://www.arabp2p.com/
+legacylinks:
+ - http://www.arabp2p.com/
+
+settings:
+ - name: username
+ type: text
+ label: Username
+ - name: password
+ type: password
+ label: Password
+ - 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
+
+caps:
+ categorymappings:
+ # المرئيات العربية Arabic Movies
+ - {id: 14, cat: Movies, desc: "اسلامي (Islamic)"}
+ - {id: 19, cat: TV/Documentary, desc: "وثائقي (Documentary)"}
+ - {id: 70, cat: TV, desc: "تعليمي (Educational)"}
+ - {id: 41, cat: Movies, desc: "افلام عربيه (Arabic Movies)"}
+ - {id: 88, cat: Movies, desc: "افلام مدبلجه عربي (Arabic Dubbed Movies)"}
+ - {id: 44, cat: TV, desc: "مسلسلات عربية (Arabic Series)"}
+ - {id: 89, cat: TV, desc: "مسلسلات عربية كامله (Full Arabic Series)"}
+ - {id: 52, cat: TV, desc: "مسرحيات (Plays)"}
+ - {id: 71, cat: TV, desc: "مسلسلات مدبلجه عربي (Arabic Dubbed Series)"}
+ - {id: 90, cat: TV, desc: "برامج ومسابقات (Shows)"}
+ - {id: 111, cat: TV, desc: "2022 رمضان (2022 Ramadan)"}
+ # المرئيات الاجنبية Foreign Movies
+ - {id: 92, cat: TV/Foreign, desc: "تعليمي (Educational)"}
+ - {id: 93, cat: TV/Documentary, desc: "وثائقي (Documentary)"}
+ - {id: 45, cat: TV/Foreign, desc: "مسلسلات وبرامج اجنبيه (Serials)"}
+ - {id: 57, cat: TV/Foreign, desc: "مسلسلات آسيوية (Asian Series)"}
+ - {id: 42, cat: Movies/Foreign, desc: "افلام اجنبيه (Foreign)"}
+ - {id: 76, cat: Movies/3D, desc: "&ثلاثي الابعاد 3D (3D)"}
+ - {id: 74, cat: Movies/HD, desc: "جودة عالية HD"}
+ - {id: 59, cat: Movies/Foreign, desc: "افلام آسيوية (Asian Movies)"}
+ - {id: 86, cat: Movies/Foreign, desc: "افلام هنديه (Indian Movies)"}
+ # انمي مدبلج عربي Anime Arabic dubbed
+ - {id: 98, cat: TV/Anime, desc: "افلام (Movies)"}
+ - {id: 100, cat: TV/Anime, desc: "مسلسلات (Series)"}
+ - {id: 102, cat: TV/Anime, desc: "حلقات (Episdoes)"}
+ # انمي مترجم عربي Anime Arabic translator
+ - {id: 99, cat: TV/Anime, desc: "افلام (Movies)"}
+ - {id: 101, cat: TV/Anime, desc: "مسلسلات (Series)"}
+ - {id: 103, cat: TV/Anime, desc: "حلقات (Episodes)"}
+ - {id: 85, cat: TV/Anime, desc: "الكارتون الصامت والكلاسيكي (Cartoons)"}
+ # صوتيات Audio
+ - {id: 25, cat: Audio, desc: "القران الكريم (The Holy Quran)"}
+ - {id: 27, cat: Audio, desc: "محاضرات (Lectures)"}
+ - {id: 26, cat: Audio, desc: "اناشيد (Chants)"}
+ # برامج Software
+ - {id: 22, cat: PC, desc: "برامج عربية (Arabic Software)"}
+ - {id: 23, cat: PC, desc: "برامج عامه (Public Software)"}
+ - {id: 78, cat: PC/Mobile-iOS, desc: "iPad/iPhone"}
+ - {id: 79, cat: PC/Mobile-Android, desc: "android"}
+ # العاب Games
+ - {id: 30, cat: PC/Games, desc: "PC"}
+ - {id: 31, cat: Console/PS3, desc: "PS2"}
+ - {id: 53, cat: Console/Wii, desc: "wii"}
+ - {id: 55, cat: Console/PSP, desc: "PSP"}
+ - {id: 63, cat: Console/XBox, desc: "XBOX"}
+ - {id: 64, cat: Console/PS3, desc: "PS3"}
+ # اخرى Other
+ - {id: 17, cat: Books, desc: "كتب (Books)"}
+ - {id: 65, cat: Other, desc: "صور (Images)"}
+ - {id: 56, cat: Other, desc: "رياضي (Sport)"}
+ - {id: 46, cat: Other, desc: "منوع (Misc)"}
+
+ modes:
+ search: [q]
+ tv-search: [q, season, ep]
+ movie-search: [q]
+ music-search: [q]
+ book-search: [q]
+
+login:
+ path: index.php?page=login
+ method: form
+ form: form[action^="index.php?page=login"]
+ inputs:
+ uid: "{{ .Config.username }}"
+ pwd: "{{ .Config.password }}"
+ error:
+ - selector: tr td span[style="color:#FF0000;"]
+ test:
+ path: index.php
+ selector: a[href^="logout.php?t="]
+
+search:
+ paths:
+ # https://www.arabp2p.com/index.php?page=torrents&search=&category=0&active=0&internel=0
+ - path: index.php
+ inputs:
+ page: torrents
+ search: "{{ .Keywords }}"
+ category: "{{ if .Categories }}{{ range .Categories }}{{.}};{{end}}{{ else }}0{{ end }}"
+ # 0 all 1 activeonly 2 deadonly
+ active: 0
+ # 0 all 1 internal 2 external
+ internel: 0
+ order: "{{ .Config.sort }}"
+ by: "{{ .Config.type }}"
+ # does not support imdbid search or provide imdb link in results
+
+ rows:
+ selector: table.torrent tr.torrent
+ filters:
+ - name: andmatch
+
+ fields:
+ category:
+ selector: td a[href^="index.php?page=torrents&category="]
+ attribute: href
+ filters:
+ - name: querystring
+ args: category
+ title:
+ selector: td a[href^="index.php?page=torrent-details"]
+ details:
+ selector: td a[href^="index.php?page=torrent-details"]
+ attribute: href
+ download:
+ selector: td a[href^="download.php"]
+ attribute: href
+ date:
+ selector: td:nth-child(4) span
+ attribute: title
+ filters:
+ - name: append
+ args: " +00:00" # auto adjusted by site account profile
+ - name: dateparse
+ args: "2006-01-02 15:04:05 -07:00"
+ seeders:
+ selector: td:nth-child(5)
+ leechers:
+ selector: td:nth-child(6)
+ size:
+ selector: td:nth-child(7)
+ downloadvolumefactor:
+ case:
+ span.free: 0
+ "*": 1
+ uploadvolumefactor:
+ text: 1
+ minimumratio:
+ text: 0.8
+ minimumseedtime:
+ text: 259200 # 3 days
+# xbtit
diff --git a/definitions/v5/brsociety-api.yml b/definitions/v5/brsociety-api.yml
new file mode 100644
index 000000000..7ee609b65
--- /dev/null
+++ b/definitions/v5/brsociety-api.yml
@@ -0,0 +1,133 @@
+---
+id: brsociety-api
+name: BrSociety (API)
+description: "BrSociety (SemeandoCC) is a BRAZILIAN Private Torrent Tracker for E-LEARNING"
+language: pt-BR
+type: private
+encoding: UTF-8
+links:
+ - https://brsociety.club/
+
+caps:
+ categorymappings:
+ - {id: 1, cat: TV, desc: "Cursos"}
+ - {id: 2, cat: Books/EBook, desc: "eBooks"}
+ - {id: 5, cat: Books/Mags, desc: "Revistas"}
+ - {id: 3, cat: Audio/Audiobook, desc: "Audiobooks"}
+ - {id: 4, cat: Other, desc: "Arquivos de Auxilio"}
+ - {id: 6, cat: Other, desc: "Graduação"}
+
+ modes:
+ search: [q]
+ tv-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 BrSociety 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?api_token={{ .Config.apikey }}&name={{ if .Query.IMDBID }}{{ else }}{{ .Keywords }}{{ 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 }}&sortField={{ .Config.sort }}&sortDirection={{ .Config.type }}&perPage=100&page=1{{ range .Categories }}&categories[]={{.}}{{end}}{{ if .Config.freeleech }}&free=1{{ else }}{{ end }}"
+ response:
+ type: json
+
+ rows:
+ selector: data
+ attribute: attributes
+ count:
+ selector: meta.total
+
+ fields:
+ categorydesc:
+ selector: category
+ title:
+ selector: name
+ details:
+ selector: details_link
+ download:
+ selector: download_link
+ size:
+ selector: size
+ magnet:
+ selector: magnet_link
+ optional: true
+ poster:
+ selector: poster
+ filters:
+ - name: replace
+ args: ["https://via.placeholder.com/90x135", ""]
+ - name: replace
+ args: ["https://via.placeholder.com/400x600", ""]
+ 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
+ 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: double_upload
+ case:
+ 0: 1 # normal
+ 1: 2 # double
+ minimumratio:
+ text: 1.0
+ minimumseedtime:
+ # 5 days (as seconds = 5 x 24 x 60 x 60)
+ text: 432000
+# json UNIT3D 5.3.0
diff --git a/definitions/v5/hdonly.yml b/definitions/v5/hdonly.yml
index 7318bf43d..264b15ce2 100644
--- a/definitions/v5/hdonly.yml
+++ b/definitions/v5/hdonly.yml
@@ -5,19 +5,16 @@ description: "HD-Only (HD-O) is a FRENCH Private Torrent Tracker for HD MOVIES /
language: fr-FR
type: private
encoding: UTF-8
-followredirect: false
-allowdownloadredirect: false
-protocol: torrent
-testlinktorrent: true
links:
- https://hd-only.org/
caps:
categorymappings:
- - {id: 1, cat: Movies, desc: "Film", default: true}
+ - {id: 1, cat: Movies, desc: "Film"}
- {id: 3, cat: TV/Anime, desc: "Dessin animé"}
+ - {id: 4, cat: Movies, desc: "Concert"}
- {id: 5, cat: TV, desc: "Série"}
- - {id: 6, cat: TV/Anime, desc: "Série animé"}
+ - {id: 6, cat: TV/Anime, desc: "Série anim"}
- {id: 7, cat: Movies/Other, desc: "Film d'animation"}
- {id: 9, cat: Audio/Video, desc: "Concert"}
- {id: 11, cat: TV/Documentary, desc: "Documentaire"}
@@ -39,74 +36,17 @@ settings:
- name: password
type: password
label: Password
- - name: info_search
- type: info
- label: Search Tweak
- default: You can tweak the search query by using the following parameters.
- - name: scene
- type: checkbox
- label: Scene Release only
- default: false
- - name: bitrate
- type: select
- label: Bitrate
- default: all
- options:
- all: all
- 4320p: 4320p
- 2160p: 2160p
- 1440p: 1440p
- 1080p: 1080p
- 1080i: 1080i
- 720p: 720p
- - name: format
- type: select
- label: Format
- default: all
- options:
- all: all
- x264: x264
- VC-1: VC-1
- AVC: AVC
- MPEG-2: MPEG-2
- x265: x265
- HEVC: HEVC
- VP9: VP9
- Autre: others
- - name: sort
- type: select
- label: Sort by
- default: time
- options:
- time: created
- year: year
- size: size
- snatched: snatched
- seeders: seeders
- leechers: leechers
- random: random
- - name: type
- type: select
- label: Order type
- default: desc
- options:
- desc: descendant
- asc: ascendant
- name: freeleech
type: checkbox
- label: Freeleech only
+ label: Search freeleech only
default: false
- - name: info_replacement
- type: info
- label: Replacements
- default: You can replace some values by using the following parameters.
- name: multilang
type: checkbox
- label: Replace MULTI in release name
+ label: Replace MULTI by another language in release name
default: false
- name: multilanguage
type: select
- label: ... by this language
+ label: Replace MULTI by this language
default: FRENCH
options:
FRENCH: FRENCH
@@ -119,6 +59,25 @@ settings:
type: checkbox
label: Replace VOSTFR 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-Only web site cannot find movies if you use the release year in a title search. When you define your Radarr v3 Indexer remember to tick the Remove year from search string checkbox.
login:
path: login.php
@@ -134,18 +93,19 @@ login:
selector: a[href^="logout.php?auth="]
search:
+ # https://hd-only.org/torrents.php?groupname=blood&freetorrent=1&order_by=time&order_way=desc&action=advanced&searchsubmit=1
path: torrents.php
inputs:
- searchstr: "{{ .Keywords }}"
+ # does not support categories, uses releasetype for single filter so we canot do multi releasetype filtering either.
+ # $raw: "{{ range .Categories }}filter_cat[{{.}}]=1&{{end}}"
+ groupname: "{{ .Keywords }}"
order_by: "{{ .Config.sort }}"
order_way: "{{ .Config.type }}"
- group_results: 0
- encoding: "{{ if ne .Config.bitrate \"all\" }}{{ .Config.bitrate }}{{ else }}{{ end }}"
- format: "{{ if ne .Config.format \"all\" }}{{ .Config.format }}{{ else }}{{ end }}"
- freetorrent: "{{ if .Config.freeleech }}1{{ else }}{{ end }}"
- scene: "{{ if .Config.scene }}1{{ else }}0{{ end }}"
action: advanced
searchsubmit: 1
+ # 1 freeleech, 2 neutral, 3 both, 0 normal
+ freetorrent: "{{ if .Config.freeleech }}1{{ else }}{{ end }}"
+ # site does not support imdbid search or display imdb links in results
rows:
selector: table#torrent_table > tbody > tr.torrent
@@ -154,73 +114,145 @@ search:
download:
selector: a[href^="torrents.php?action=download&"]
attribute: href
- # title > step 1 - grab orginal title and normalize
- title_result:
- selector: div.group_info > a
+ title_phase1:
+ selector: div.group_info
+ remove: span:nth-child(1), div.tags
filters:
+ - name: replace
+ args: ["\n", ""]
+ - name: re_replace
+ args: ["^(.+) (.+)", "$2-$1"]
+ - name: replace
+ args: [" ", " "]
+ - 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: replace
+ args: ["/ DC", "/ Directors.Cut"]
+ - name: replace
+ args: ["/ VL", "/ Extended"]
+ - name: replace
+ args: ["/ RM", "/ Remastered"]
+ - name: replace
+ args: ["/ UC", "/ Uncut"]
+ - name: replace
+ args: ["/ ES", "/ Special.Edition"]
+ - name: replace
+ args: [" / Cust_sub", ""]
+ - name: replace
+ args: [" / Cust", ""]
+ - name: replace
+ args: ["/ UN", "/ Unrated"]
+ - name: replace
+ args: [" / Crit", ""]
+ - name: replace
+ args: [" / WAC", ""]
+ - name: replace
+ args: [" / MoC", ""]
+ - name: replace
+ args: [" / BFI", ""]
+ - name: replace
+ args: [" / MUET", ""]
+ - name: replace
+ args: ["/ Exc NF", "/ NF"]
+ - name: replace
+ args: ["/ Exc AMZ", "/ AMZ"]
+ - name: replace
+ args: ["/ Exc YOU", "/ YT"]
+ - name: replace
+ args: [" / Freeleech!", ""]
+ - name: replace
+ args: [" / Complété!", ""]
+ - name: replace
+ args: [" / ", "."]
- name: trim
+ - name: replace
+ args: [".VFF.VFQ.stFR.MULTI", ".MULTI.VFF.VFQ"]
+ - name: replace
+ args: [".VFF.VFQ.VO.stFR.MULTI", ".MULTI.VFF.VFQ"]
+ - name: replace
+ args: [".VFF.VFQ.VO.stFR", ".MULTI.VFF.VFQ"]
+ - name: replace
+ args: [".VFQ.VO.stFR", ".MULTI.VFQ"]
+ - name: replace
+ args: [".VO.VFI.stFR", ".MULTI"]
+ - name: replace
+ args: [".VO.VF?.stFR", ".MULTI"]
+ - name: replace
+ args: [".VFF.VO.stFR", ".MULTI.VFF"]
+ - name: replace
+ args: [".VOF.stFR", ".FRENCH"]
+ - name: replace
+ args: [".VFQ.stFR", ".FRENCH"]
+ - name: replace
+ args: [".VFF.stFR.MULTI", ".MULTI.VFF"]
+ - name: replace
+ args: [".VFF.stFR", ".FRENCH"]
+ - name: replace
+ args: [".VFI.MULTI", ".MULTI"]
+ - name: replace
+ args: [".VO.stFR", ".VOSTFR"]
+ - name: replace
+ args: [".VFQ.VO", ".MULTI.VFQ"]
+ - name: replace
+ args: [".VFF.VO", ".MULTI.VFF"]
+ - name: replace
+ args: [".VO.VF?.stFR", ".MULTI"]
+ - name: replace
+ args: [".VFI.stFR", ".FRENCH"]
+ - name: replace
+ args: [".VOF.MULTI", ".MULTI.FRENCH"]
+ - name: replace
+ args: [".VOF", ".FRENCH"]
+ - name: replace
+ args: [".VFQ.MULTI", ".MULTI.VFQ"]
+ - name: replace
+ args: ["[Film]", ""]
+ - name: replace
+ args: ["[Dessin animé]", ""]
+ - name: replace
+ args: ["[Film d'animation]", ""]
+ - name: replace
+ args: ["[Concert]", ""]
+ - name: replace
+ args: ["[Documentaire]", ""]
+ - name: replace
+ args: ["[Court-métrage]", ""]
+ - name: replace
+ args: ["[Clip]", ""]
+ - name: replace
+ args: ["[Démonstration]", ""]
+ - name: replace
+ args: ["[Bonus de BD]", ""]
+ - name: replace
+ args: ["[Autre]", ""]
+ - name: replace
+ args: ["[Série Animée]", ""]
+ - name: replace
+ args: ["[Série]", ""]
- name: re_replace
- args: ["\\s:\\s", " "]
- - name: re_replace
- args: ["\\s", "."]
- - name: append
- args: "."
- # title > step 2 - grab movie year
- title_year:
- selector: div.group_info.clear
+ args: ["\\[(\\d{4})\\]", "$1"]
+ title_multilang:
+ text: "{{ .Result.title_phase1 }}"
filters:
- - name: regexp
- args: "\\s\\[(\\d{4})\\]\\s"
- - name: append
- args: "."
- # title > step 3 - grab release group
- title_group:
- selector: div.group_info.clear > div.torrent_info > strong:last-child
- attribute: title
- # title > step 4 - grab release infos and normalize
- title_infos:
- selector: div.group_info.clear > div.torrent_info
- remove: strong
+ - name: re_replace
+ args: ["(?i)([\\s|\\.|-]*multi[\\s|\\.|-]*)", ".{{ .Config.multilanguage }}."]
+ title_phase2:
+ text: "{{ if .Config.multilang }}{{ .Result.title_multilang }}{{ else }}{{ .Result.title_phase1 }}{{ end }}"
+ title_vostfr:
+ text: "{{ .Result.title_phase2 }}"
filters:
- - name: toupper
- name: re_replace
- args: ["\\sBLU-RAY\\s(ORIGINAL|4K|HD)\\s", "COMPLETE.BLURAY"]
+ args: ["(?i)([\\s|\\.|-]*vostfr[\\s|\\.|-]*)", ".ENGLISH."]
- name: re_replace
- args: ["\\sBLU-RAY\\sREMUX\\s(4K|HD)\\s", "BLURAY.REMUX"]
- - name: re_replace
- args: ["\\sBLU-RAY\\sRIP\\s(4K|HD)\\s", "BLURAY"]
- - name: re_replace
- args: ["\\sWEB-DL/RIP\\s(4K|HD)\\s", "WEBDL"]
- - name: re_replace
- args: ["\\s(CUST_SUB|CUST|CRIT|WAC|MOC|BFI|MUET|EXC\\sNF|EXC\\sAMZ|EXC\\sYOU)\\s", ""]
- - name: re_replace
- args: ["\\s(VOF|STFR)\\s", ""]
- - name: re_replace
- args: ["\\sVO\\s", "MULTI"]
- - name: re_replace
- args: ["\\s(UN)\\s", "UNRATED"]
- - name: re_replace
- args: ["\\s(ES)\\s", "SPECIAL.EDITION"]
- - name: re_replace
- args: ["\\s(UC)\\s", "UNCUT"]
- - name: re_replace
- args: ["\\s(RM)\\s", "REMASTERED"]
- - name: re_replace
- args: ["\\s(VL)\\s", "EXTENDED"]
- - name: re_replace
- args: ["\\s(DC)\\s", "DIRECTORS.CUT"]
- - name: re_replace
- args: ["\\s+", ""]
- - name: re_replace
- args: ["\/+", "."]
- - name: trim
- args: "."
- - name: re_replace
- args: ["VFF.VFQ", "VFF"]
- # title > step 5 - finale concatenation
+ args: ["(?i)([\\s|\\.|-]*subfrench[\\s|\\.|-]*)", ".ENGLISH."]
title:
- text: "{{ .Result.title_result }}{{ .Result.title_year }}{{ .Result.title_infos }}{{ if .Result.title_group }}-{{ .Result.title_group }}{{ else }}-HDO{{ end }}"
- ### NEXT
+ text: "{{ if .Config.vostfr }}{{ .Result.title_vostfr }}{{ else }}{{ .Result.title_phase2 }}{{ end }}"
description:
selector: div.group_info
poster:
diff --git a/definitions/v5/lat-team-api.yml b/definitions/v5/lat-team-api.yml
new file mode 100644
index 000000000..a847ee392
--- /dev/null
+++ b/definitions/v5/lat-team-api.yml
@@ -0,0 +1,169 @@
+---
+id: lat-team-api
+name: Lat-Team (API)
+description: "Lat-Team is a SPANISH Private Torrent Tracker for MOVIES / TV"
+language: es-ES
+type: private
+encoding: UTF-8
+links:
+ - https://lat-team.com/
+
+caps:
+ categorymappings:
+ - {id: 1, cat: Movies, desc: "Peliculas"}
+ - {id: 2, cat: TV, desc: "TV Series"}
+ - {id: 3, cat: Audio, desc: "Musica"}
+ - {id: 4, cat: Console, desc: "Juegos"}
+ - {id: 5, cat: TV/Anime, desc: "Anime"}
+ - {id: 6, cat: Movies/Other, desc: "Retro Pelicula"}
+ - {id: 7, cat: TV/Other, desc: "Retro Serie TV"}
+ - {id: 8, cat: TV/Foreign, desc: "Telenovelas y Teleseries"}
+ - {id: 9, cat: Audio/Video, desc: "Conciertos"}
+ - {id: 10, cat: TV/Documentary, desc: "Documentales"}
+ - {id: 11, cat: Other, desc: "Videotutoriales y Educativo"}
+ - {id: 12, cat: XXX, desc: "XXX"}
+ - {id: 16, cat: TV/Sport, desc: "Deportes"}
+ - {id: 17, cat: PC, desc: "Sistemas Operativos"}
+ - {id: 18, cat: Books, desc: "E-Books"}
+ - {id: 19, cat: Audio/Audiobook, desc: "Audiolibros"}
+ - {id: 20, cat: Movies/Other, desc: "Películas Oscars"}
+ - {id: 21, cat: Audio/Video, desc: "VideoMixes"}
+
+ modes:
+ search: [q]
+ tv-search: [q, season, ep, imdbid, tvdbid]
+ movie-search: [q, imdbid, tmdbid]
+ music-search: [q]
+ book-search: [q]
+
+settings:
+ - name: apikey
+ type: text
+ label: APIKey
+ - name: info_key
+ type: info
+ label: About your API key
+ default: "Find or Generate a new API Token by accessing your Lat-Team 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?api_token={{ .Config.apikey }}&name={{ if .Query.IMDBID }}{{ else }}{{ .Keywords }}{{ 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 }}&sortField={{ .Config.sort }}&sortDirection={{ .Config.type }}&perPage=100&page=1{{ range .Categories }}&categories[]={{.}}{{end}}{{ if .Config.freeleech }}&free=1{{ else }}{{ end }}"
+ response:
+ type: json
+ keywordsfilters:
+ - name: re_replace
+ args: ["(?i)\\bS(\\d+)", "T$1"]
+
+ rows:
+ selector: data
+ attribute: attributes
+ count:
+ selector: meta.total
+
+ fields:
+ categorydesc:
+ selector: category
+ title_vose:
+ selector: name:contains(VOSE)
+ optional: true
+ filters:
+ - name: re_replace
+ args: ["^ *\\[[^\\]]*\\] *", ""] # Remove prefix tags
+ - name: re_replace
+ args: ["(?i)\\bT(\\d+)", "S$1"]
+ - name: re_replace
+ args: ["UHDRip", "BDRip"] # Fix for Radarr
+ - name: append
+ args: " ENGLiSH"
+ title_notvose:
+ selector: name:not(:contains(VOSE))
+ optional: true
+ filters:
+ - name: re_replace
+ args: ["^ *\\[[^\\]]*\\] *", ""] # Remove prefix tags
+ - name: re_replace
+ args: ["(?i)\\bT(\\d+)", "S$1"]
+ - name: re_replace
+ args: ["UHDRip", "BDRip"] # Fix for Radarr
+ - name: append
+ args: " SPANiSH"
+ title:
+ text: "{{ if .Result.title_vose }}{{ .Result.title_vose }}{{ else }}{{ .Result.title_notvose }}{{ end }}"
+ details:
+ selector: details_link
+ download:
+ selector: download_link
+ poster:
+ selector: poster
+ filters:
+ - name: replace
+ args: ["https://via.placeholder.com/90x135", ""]
+ imdbid:
+ selector: imdb_id
+ tmdbid:
+ selector: tmdb_id
+ tvdbid:
+ selector: tvdb_id
+ files:
+ selector: num_file
+ seeders:
+ selector: seeders
+ leechers:
+ selector: leechers
+ grabs:
+ selector: times_completed
+ date:
+ # 2021-10-18T00:34:50.000000Z"
+ selector: created_at
+ size:
+ selector: size
+ downloadvolumefactor:
+ # api returns 0=false, 1=true
+ selector: freeleech
+ case:
+ 0: 1 # not free
+ 1: 0 # freeleech
+ uploadvolumefactor:
+ # api returns 0=false, 1=true
+ selector: double_upload
+ case:
+ 0: 1 # normal
+ 1: 2 # double
+ minimumratio:
+ text: 1.0
+ minimumseedtime:
+ # 4 days (as seconds = 4 x 24 x 60 x 60)
+ text: 345600
+# json UNIT3D 5.3.0
diff --git a/definitions/v5/reelflix-api.yml b/definitions/v5/reelflix-api.yml
new file mode 100644
index 000000000..f5b2e5677
--- /dev/null
+++ b/definitions/v5/reelflix-api.yml
@@ -0,0 +1,142 @@
+---
+id: reelflix-api
+name: ReelFLiX (API)
+description: "ReelFLiX (HD4Free,LegacyHD) is a Private Torrent Tracker for HD MOVIES"
+language: en-US
+type: private
+encoding: UTF-8
+links:
+ - https://reelflix.xyz/
+legacylinks:
+ - https://legacyhd.org/
+
+caps:
+ categorymappings:
+ - {id: 1, cat: Movies, desc: "Movie"}
+
+ modes:
+ search: [q]
+ tv-search: [q, season, ep, imdbid, tvdbid]
+ movie-search: [q, imdbid, tmdbid]
+ music-search: [q]
+ book-search: [q]
+
+settings:
+ - name: apikey
+ type: text
+ label: APIKey
+ - name: info_key
+ type: info
+ label: About your API key
+ default: "Find or Generate a new API Token by accessing your ReelFlix 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
+ details:
+ selector: details_link
+ download:
+ selector: download_link
+ poster:
+ selector: poster
+ filters:
+ - name: replace
+ args: ["https://via.placeholder.com/90x135", ""]
+ imdbid:
+ selector: imdb_id
+ tmdbid:
+ selector: tmdb_id
+ tvdbid:
+ selector: tvdb_id
+ files:
+ selector: num_file
+ seeders:
+ selector: seeders
+ leechers:
+ selector: leechers
+ grabs:
+ selector: times_completed
+ date:
+ # 2021-10-18T00:34:50.000000Z"
+ selector: created_at
+ size:
+ selector: size
+ downloadvolumefactor:
+ # api returns 0%, 25%, 50%, 75%, 100%
+ selector: freeleech
+ case:
+ 0%: 1 # not free
+ 25%: 0.75
+ 50%: 0.5
+ 75%: 0.25
+ 100%: 0 # freeleech
+ "*": 0 # catch errors
+ uploadvolumefactor:
+ # api returns 0=false, 1=true
+ selector: double_upload
+ case:
+ 0: 1 # normal
+ 1: 2 # double
+ minimumratio:
+ text: 1.0
+# json UNIT3D 6.0.6
diff --git a/definitions/v5/skipthetrailers.yml b/definitions/v5/skipthetrailers.yml
new file mode 100644
index 000000000..8d038282f
--- /dev/null
+++ b/definitions/v5/skipthetrailers.yml
@@ -0,0 +1,143 @@
+---
+id: skipthetrailers
+name: SkipTheTrailers
+description: "SkipTheTrailers (STT) is a Private Torrent Tracker for MOVIES"
+language: en-US
+type: private
+encoding: UTF-8
+links:
+ - https://skipthetrailers.xyz/
+
+caps:
+ categorymappings:
+ - {id: 1, cat: Movies, desc: "Movies"}
+
+ modes:
+ search: [q]
+ tv-search: [q, season, ep, imdbid, tvdbid]
+ movie-search: [q, imdbid, tmdbid]
+ music-search: [q]
+ book-search: [q]
+
+settings:
+ - name: apikey
+ type: text
+ label: APIKey
+ - name: info_key
+ type: info
+ label: About your API key
+ default: "Find or Generate a new API Token by accessing your SkipTheTrailers 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
+ details:
+ selector: details_link
+ download:
+ selector: download_link
+ poster:
+ selector: poster
+ filters:
+ - name: replace
+ args: ["https://via.placeholder.com/90x135", ""]
+ imdbid:
+ selector: imdb_id
+ tmdbid:
+ selector: tmdb_id
+ tvdbid:
+ selector: tvdb_id
+ files:
+ selector: num_file
+ seeders:
+ selector: seeders
+ leechers:
+ selector: leechers
+ grabs:
+ selector: times_completed
+ date:
+ # 2021-10-18T00:34:50.000000Z"
+ selector: created_at
+ size:
+ selector: size
+ downloadvolumefactor:
+ # api returns 0%, 25%, 50%, 75%, 100%
+ selector: freeleech
+ case:
+ 0%: 1 # not free
+ 25%: 0.75
+ 50%: 0.5
+ 75%: 0.25
+ 100%: 0 # freeleech
+ "*": 0 # catch errors
+ uploadvolumefactor:
+ # api returns 0=false, 1=true
+ selector: double_upload
+ case:
+ 0: 1 # normal
+ 1: 2 # double
+ minimumratio:
+ text: 1.0
+ minimumseedtime:
+ # 7 days (as seconds = 2 x 24 x 60 x 60)
+ text: 172800
+# json UNIT3D 6.0.6
diff --git a/definitions/v5/xthor-api.yml b/definitions/v5/xthor-api.yml
index f58f01cb3..0c46862ec 100644
--- a/definitions/v5/xthor-api.yml
+++ b/definitions/v5/xthor-api.yml
@@ -7,95 +7,96 @@ type: private
encoding: windows-1252
requestDelay: 2.5
links:
- - https://xthor.tk
+ - https://xthor.tk/
legacylinks:
- - https://xthor.to
+ - https://xthor.bz/
+ - https://xthor.to/
caps:
categorymappings:
# Movies / Films
- - { id: 118, cat: Movies/BluRay, desc: "Films/2160p/Bluray" }
- - { id: 119, cat: Movies/UHD, desc: "Films/2160p/Remux" }
- - { id: 107, cat: Movies/UHD, desc: "Films/2160p/x265" }
- - { id: 1, cat: Movies/BluRay, desc: "Films/1080p/BluRay" }
- - { id: 2, cat: Movies/HD, desc: "Films/1080p/Remux" }
- - { id: 100, cat: Movies/HD, desc: "Films/1080p/x265" }
- - { id: 4, cat: Movies/HD, desc: "Films/1080p/x264" }
- - { id: 5, cat: Movies/HD, desc: "Films/720p/x264" }
- - { id: 7, cat: Movies/SD, desc: "Films/SD/x264" }
- - { id: 3, cat: Movies/3D, desc: "Films/3D" }
- - { id: 6, cat: Movies/SD, desc: "Films/XviD" }
- - { id: 8, cat: Movies/DVD, desc: "Films/DVD" }
- - { id: 122, cat: Movies/HD, desc: "Films/HDTV" }
- - { id: 94, cat: Movies/WEB-DL, desc: "Films/WEBDL" }
- - { id: 95, cat: Movies/WEB-DL, desc: "Films/WEBRiP" }
- - { id: 12, cat: TV/Documentary, desc: "Films/Documentaire" }
- - { id: 31, cat: Movies/Other, desc: "Films/Animation" }
- - { id: 33, cat: Movies/Other, desc: "Films/Spectacle" }
- - { id: 125, cat: TV/Sport, desc: "Films/Sports" }
- - { id: 20, cat: Audio/Video, desc: "Films/Concerts, Clips" }
- - { id: 9, cat: Movies/Other, desc: "Films/VOSTFR" }
+ - {id: 118, cat: Movies/BluRay, desc: "Films/2160p/Bluray"}
+ - {id: 119, cat: Movies/UHD, desc: "Films/2160p/Remux"}
+ - {id: 107, cat: Movies/UHD, desc: "Films/2160p/x265"}
+ - {id: 1, cat: Movies/BluRay, desc: "Films/1080p/BluRay"}
+ - {id: 2, cat: Movies/HD, desc: "Films/1080p/Remux"}
+ - {id: 100, cat: Movies/HD, desc: "Films/1080p/x265"}
+ - {id: 4, cat: Movies/HD, desc: "Films/1080p/x264"}
+ - {id: 5, cat: Movies/HD, desc: "Films/720p/x264"}
+ - {id: 7, cat: Movies/SD, desc: "Films/SD/x264"}
+ - {id: 3, cat: Movies/3D, desc: "Films/3D"}
+ - {id: 6, cat: Movies/SD, desc: "Films/XviD"}
+ - {id: 8, cat: Movies/DVD, desc: "Films/DVD"}
+ - {id: 122, cat: Movies/HD, desc: "Films/HDTV"}
+ - {id: 94, cat: Movies/WEB-DL, desc: "Films/WEBDL"}
+ - {id: 95, cat: Movies/WEB-DL, desc: "Films/WEBRiP"}
+ - {id: 12, cat: TV/Documentary, desc: "Films/Documentaire"}
+ - {id: 31, cat: Movies/Other, desc: "Films/Animation"}
+ - {id: 33, cat: Movies/Other, desc: "Films/Spectacle"}
+ - {id: 125, cat: TV/Sport, desc: "Films/Sports"}
+ - {id: 20, cat: Audio/Video, desc: "Films/Concerts, Clips"}
+ - {id: 9, cat: Movies/Other, desc: "Films/VOSTFR"}
# TV Series / Series TV
- - { id: 104, cat: TV/Other, desc: "Series/BluRay" }
- - { id: 13, cat: TV, desc: "Series/Pack VF" }
- - { id: 15, cat: TV/HD, desc: "Series/HD VF" }
- - { id: 14, cat: TV/SD, desc: "Series/SD VF" }
- - { id: 98, cat: TV/Other, desc: "Series/Pack VOSTFR" }
- - { id: 17, cat: TV/HD, desc: "Series/HD VOSTFR" }
- - { id: 16, cat: TV/SD, desc: "Series/SD VOSTFR" }
- - { id: 101, cat: TV/Anime, desc: "Series/Packs Anime" }
- - { id: 32, cat: TV/Anime, desc: "Series/Animes" }
- - { id: 110, cat: TV/Anime, desc: "Series/Anime VOSTFR" }
- - { id: 123, cat: TV/Other, desc: "Series/Animation" }
- - { id: 109, cat: TV/Documentary, desc: "Series/DOC" }
- - { id: 34, cat: TV/Sport, desc: "Series/Sport" }
- - { id: 30, cat: TV/Other, desc: "Series/Emission TV" }
+ - {id: 104, cat: TV/Other, desc: "Series/BluRay"}
+ - {id: 13, cat: TV, desc: "Series/Pack VF"}
+ - {id: 15, cat: TV/HD, desc: "Series/HD VF"}
+ - {id: 14, cat: TV/SD, desc: "Series/SD VF"}
+ - {id: 98, cat: TV/Other, desc: "Series/Pack VOSTFR"}
+ - {id: 17, cat: TV/HD, desc: "Series/HD VOSTFR"}
+ - {id: 16, cat: TV/SD, desc: "Series/SD VOSTFR"}
+ - {id: 101, cat: TV/Anime, desc: "Series/Packs Anime"}
+ - {id: 32, cat: TV/Anime, desc: "Series/Animes"}
+ - {id: 110, cat: TV/Anime, desc: "Series/Anime VOSTFR"}
+ - {id: 123, cat: TV/Other, desc: "Series/Animation"}
+ - {id: 109, cat: TV/Documentary, desc: "Series/DOC"}
+ - {id: 34, cat: TV/Sport, desc: "Series/Sport"}
+ - {id: 30, cat: TV/Other, desc: "Series/Emission TV"}
# Porn / XxX
- - { id: 36, cat: XXX, desc: "MISC/XxX/Films" }
- - { id: 105, cat: XXX, desc: "MISC/XxX/Séries" }
- - { id: 114, cat: XXX, desc: "MISC/XxX/Lesbiennes" }
- - { id: 115, cat: XXX, desc: "MISC/XxX/Gays" }
- - { id: 113, cat: XXX, desc: "MISC/XxX/Hentai" }
- - { id: 120, cat: XXX, desc: "MISC/XxX/Magazines" }
+ - {id: 36, cat: XXX, desc: "MISC/XxX/Films"}
+ - {id: 105, cat: XXX, desc: "MISC/XxX/Séries"}
+ - {id: 114, cat: XXX, desc: "MISC/XxX/Lesbiennes"}
+ - {id: 115, cat: XXX, desc: "MISC/XxX/Gays"}
+ - {id: 113, cat: XXX, desc: "MISC/XxX/Hentai"}
+ - {id: 120, cat: XXX, desc: "MISC/XxX/Magazines"}
# Books / Livres
- - { id: 24, cat: Books/EBook, desc: "Livres/Romans" }
- - { id: 124, cat: Audio/Audiobook, desc: "Livres/Audio Books" }
- - { id: 96, cat: Books/Mags, desc: "Livres/Magazines" }
- - { id: 99, cat: Books/Other, desc: "Livres/Bandes dessinées" }
- - { id: 116, cat: Books/EBook, desc: "Livres/Romans Jeunesse" }
- - { id: 102, cat: Books/Comics, desc: "Livres/Comics" }
- - { id: 103, cat: Books/Other, desc: "Livres/Mangas" }
+ - {id: 24, cat: Books/EBook, desc: "Livres/Romans"}
+ - {id: 124, cat: Audio/Audiobook, desc: "Livres/Audio Books"}
+ - {id: 96, cat: Books/Mags, desc: "Livres/Magazines"}
+ - {id: 99, cat: Books/Other, desc: "Livres/Bandes dessinées"}
+ - {id: 116, cat: Books/EBook, desc: "Livres/Romans Jeunesse"}
+ - {id: 102, cat: Books/Comics, desc: "Livres/Comics"}
+ - {id: 103, cat: Books/Other, desc: "Livres/Mangas"}
# Softwares / Logiciels
- - { id: 25, cat: PC/Games, desc: "Logiciels/Jeux PC" }
- - { id: 27, cat: Console/PS3, desc: "Logiciels/Playstation" }
- - { id: 111, cat: PC/Mac, desc: "Logiciels/Jeux MAC" }
- - { id: 26, cat: Console/XBox 360, desc: "Logiciels/XboX" }
- - { id: 112, cat: PC, desc: "Logiciels/Jeux Linux" }
- - { id: 28, cat: Console/Wii, desc: "Logiciels/Nintendo" }
- - { id: 29, cat: Console/NDS, desc: "Logiciels/NDS" }
- - { id: 117, cat: PC, desc: "Logiciels/ROM" }
- - { id: 21, cat: PC, desc: "Logiciels/Applis PC" }
- - { id: 22, cat: PC/Mac, desc: "Logiciels/Applis Mac" }
- - { id: 23, cat: PC/Mobile-Android, desc: "Logiciels/Smartphone" }
+ - {id: 25, cat: PC/Games, desc: "Logiciels/Jeux PC"}
+ - {id: 27, cat: Console/PS3, desc: "Logiciels/Playstation"}
+ - {id: 111, cat: PC/Mac, desc: "Logiciels/Jeux MAC"}
+ - {id: 26, cat: Console/XBox 360, desc: "Logiciels/XboX"}
+ - {id: 112, cat: PC, desc: "Logiciels/Jeux Linux"}
+ - {id: 28, cat: Console/Wii, desc: "Logiciels/Nintendo"}
+ - {id: 29, cat: Console/NDS, desc: "Logiciels/NDS"}
+ - {id: 117, cat: PC, desc: "Logiciels/ROM"}
+ - {id: 21, cat: PC, desc: "Logiciels/Applis PC"}
+ - {id: 22, cat: PC/Mac, desc: "Logiciels/Applis Mac"}
+ - {id: 23, cat: PC/Mobile-Android, desc: "Logiciels/Smartphone"}
modes:
- search: [ q ]
- movie-search: [ q, tmdbid ]
- tv-search: [ q, season, ep ]
- book-search: [ q ]
+ search: [q]
+ movie-search: [q, tmdbid]
+ tv-search: [q, season, ep]
+ book-search: [q]
settings:
- - name: apikey
+ - name: passkey
type: text
- label: PassKey
+ label: Passkey
- name: info_key
type: info
label: About your Passkey
- default: "Find your PassKey on Xthor > API page."
+ default: "Find your Passkey on Xthor > API page."
- name: freeleech
type: checkbox
label: Search freeleech only
@@ -107,14 +108,14 @@ settings:
- name: subfrench
type: text
label: Replace "VOSTFR/SUBFRENCH" by
- default:
+ default: ""
search:
paths:
# https://api.xthor.tk/?passkey=&search=&category=&freeleech=&tmdbid=&size=&accent=&price=&page=
- path: "https://api.xthor.tk/"
inputs:
- passkey: "{{ .Config.apikey }}"
+ passkey: "{{ .Config.passkey }}"
category: "{{ if .Categories }}{{ range .Categories }}{{.}}+{{end}}{{ else }}{{ end }}"
search: "{{ if .Query.TMDBID }}{{ else }}{{ .Keywords }}{{ end }}"
tmdbid: "{{ .Query.TMDBID }}"
@@ -138,27 +139,27 @@ search:
text: "{{ .Result.title_original }}"
filters:
- name: re_replace
- args: [ "(?i)[\\.\\s\\[\\-]multi[\\.\\s\\]\\-]", ".{{ .Config.multilanguage }}." ]
+ args: ["(?i)[\\.\\s\\[\\-]multi[\\.\\s\\]\\-]", ".{{ .Config.multilanguage }}."]
title_multi_out:
text: "{{ if .Config.multilanguage }}{{ .Result.title_multi }}{{ else }}{{ .Result.title_original }}{{ end }}"
title_vostfr:
text: "{{ .Result.title_multi_out }}"
filters:
- name: re_replace
- args: [ "(?i)[\\.\\s\\[\\-]vostfr[\\.\\s\\]\\-]", ".{{ .Config.subfrench }}." ]
+ args: ["(?i)[\\.\\s\\[\\-]vostfr[\\.\\s\\]\\-]", ".{{ .Config.subfrench }}."]
- name: re_replace
- args: [ "(?i)[\\.\\s\\[\\-]subfrench[\\.\\s\\]\\-]", ".{{ .Config.subfrench }}." ]
+ args: ["(?i)[\\.\\s\\[\\-]subfrench[\\.\\s\\]\\-]", ".{{ .Config.subfrench }}."]
title:
text: "{{ if .Config.subfrench }}{{ .Result.title_vostfr }}{{ else }}{{ .Result.title_multi_out }}{{ end }}"
details:
- text: "{{ .Config.sitelink }}/details.php?id={{ .Result.id }}"
+ text: "{{ .Config.sitelink }}details.php?id={{ .Result.id }}"
download:
selector: download_link
poster:
selector: descr
filters:
- name: regexp
- args: ["({{ .Config.sitelink }}/info_images\\/allocine\\/covers\\/film\\/small_\\d+?\\.jpg)"]
+ args: ["({{ .Config.sitelink }}info_images\\/allocine\\/covers\\/film\\/small_\\d+?\\.jpg)"]
tmdbid:
selector: tmdb_id
files:
@@ -179,13 +180,12 @@ search:
case:
0: 1 # not free
1: 0 # freeleech
- text: 0
uploadvolumefactor:
text: 1
minimumseedtime:
# 24 hours (as seconds = 1 x 24 x 60 x 60)
text: 86400
minimumratio:
- # minimum ratio per torrent is 0.8
+ # minimum ratio per torrent is 0.8
text: 0.8
# json api