diff --git a/definitions/v11/danishbytes-api.yml b/definitions/v11/danishbytes-api.yml
deleted file mode 100644
index ab782780e..000000000
--- a/definitions/v11/danishbytes-api.yml
+++ /dev/null
@@ -1,176 +0,0 @@
----
-id: danishbytes-api
-name: DanishBytes (API)
-description: "DanishBytes is a Private Danish Torrent Tracker for MOVIES / TV / GENERAL"
-language: da-DK
-type: private
-encoding: UTF-8
-links:
- - https://danishbytes.club/
- - https://danishbytes2.org/
- - https://dbytes.org/
-legacylinks:
- - https://danishbytes.org/
- - https://danishbytes.art/
-
-caps:
- categorymappings:
- - {id: 1, cat: Movies, desc: "Movies"}
- - {id: 2, cat: TV, desc: "TV"}
- - {id: 5, cat: PC/0day, desc: "Apps"}
- - {id: 4, cat: PC/Games, desc: "Games"}
- - {id: 3, cat: Audio, desc: "Music"}
- - {id: 8, cat: Books, desc: "Books"}
- - {id: 17, cat: Audio/Audiobook, desc: "AudioBooks"}
- - {id: 19, cat: Audio, desc: "Podcasts"}
-
- modes:
- search: [q]
- tv-search: [q, season, ep, imdbid, tvdbid, tmdbid]
- movie-search: [q, imdbid, tmdbid]
- music-search: [q]
- book-search: [q]
-
-settings:
- - name: apikey
- type: text
- label: APIKey
- - name: info_apikey
- type: info
- label: About your API key
- default: "Find or Generate a new API Token by accessing your DanishBytes account My Security page and clicking on the API Token tab."
- - name: rsskey
- type: text
- label: RSSKey
- - name: info_rsskey
- type: info
- label: About your RSS key
- default: "Find or Generate a new RSS key by accessing your DanishBytes account My Security page and clicking on the RSS Key (RID) 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
- - name: info_activity
- type: info
- label: Account Inactivity
- default: "If you have not logged in for 90 days, the user is automatically deleted."
-
-login:
- path: /api/torrents
- method: get
- inputs: {} # TODO: remove in v10
- error:
- - selector: a[href*="/login"]
- message:
- text: "The API key was not accepted by {{ .Config.sitelink }}."
-
-search:
- paths:
- - path: api/torrents/v2/filter
- response:
- type: json
-
- headers:
- Authorization: ["Bearer {{ .Config.apikey }}"]
-
- inputs:
- $raw: "{{ range .Categories }}&categories[]={{.}}{{end}}"
- search: "{{ .Keywords }}"
- imdb: "{{ .Query.IMDBIDShort }}"
- tmdb: "{{ .Query.TMDBID }}"
- tvdb: "{{ .Query.TVDBID }}"
- freeleech: "{{ if .Config.freeleech }}1{{ else }}{{ end }}"
- sorting: "{{ .Config.sort }}"
- direction: "{{ .Config.type }}"
- qty: 100
- page: 1
-
- rows:
- selector: torrents
- count:
- selector: $.resultsCount
-
- fields:
- _id:
- selector: .id
- category:
- selector: category_id
- title:
- selector: name
- details:
- text: "/torrents/{{ .Result._id }}"
- download:
- text: "/torrent/download/{{ .Result._id }}.{{ .Config.rsskey }}"
- infohash:
- selector: info_hash
- poster:
- selector: poster_image
- genre:
- selector: meta_genres
- filters:
- - name: re_replace
- args: ["(?i)(Action og eventyr)", "Action_og_eventyr"]
- - name: re_replace
- args: ["(?i)(Sci-fi og Fantasy)", "Sci-fi_og_Fantasy"]
- - name: re_replace
- args: ["(?i)(Stand-Up Comedy)", "Stand-Up_Comedy"]
- - name: replace
- args: [" & ", "_&_"]
- description:
- text: "{{ .Result.genre }}"
- imdbid:
- selector: imdb
- tmdbid:
- selector: tmdb
- tvdbid:
- selector: tvdb
- seeders:
- selector: seeders
- leechers:
- selector: leechers
- grabs:
- selector: times_completed
- date:
- # "created_at": "2021-10-18T00:34:50.000000Z" is returned by Newtonsoft.Json.Linq as 18/10/2021 00:34:50
- selector: created_at
- filters:
- - name: append
- args: " +00:00" # GMT
- - name: dateparse
- args: "MM/dd/yyyy HH:mm:ss zzz"
- size:
- selector: size
- downloadvolumefactor:
- # api returns 0=false, 1=true
- selector: free
- case:
- 0: 1 # not free
- 1: 0 # freeleech
- uploadvolumefactor:
- # api returns 0=false, 1=true
- selector: doubleup
- case:
- 0: 1 # normal
- 1: 2 # double
- minimumratio:
- text: 1.0
- minimumseedtime:
- # 2 day (as seconds = 2 x 24 x 60 x 60)
- text: 172800
-# json DBy v0.96 (based on UNIT3D 6.3.0?)
diff --git a/definitions/v11/hawke-uno.yml b/definitions/v11/hawke-uno.yml
index 06548f601..f332eb00e 100644
--- a/definitions/v11/hawke-uno.yml
+++ b/definitions/v11/hawke-uno.yml
@@ -161,4 +161,4 @@ search:
minimumseedtime:
# 5 days (as seconds = 5 x 24 x 60 x 60)
text: 432000
-# json UNIT3D 5.3.0 (custom 0.6.1)
+# json UNIT3D 5.3.0 (custom 0.7.0)
diff --git a/definitions/v11/lemonhd.yml b/definitions/v11/lemonhd.yml
deleted file mode 100644
index 3cbbcb915..000000000
--- a/definitions/v11/lemonhd.yml
+++ /dev/null
@@ -1,181 +0,0 @@
----
-id: lemonhd
-name: LemonHD
-description: "LemonHD is a CHINESE Private Torrent Tracker for HD MOVIES / TV"
-language: zh-CN
-type: private
-encoding: UTF-8
-links:
- - https://lemonhd.club/
-legacylinks:
- - https://leaguehd.com/
- - https://lemonhd.org/
-
-caps:
- categorymappings:
- - {id: 401, cat: Movies, desc: "Movies/电影"}
- - {id: 411, cat: Audio, desc: "Music/无损音乐"}
- - {id: 405, cat: TV/Anime, desc: "Animations/动漫"}
- - {id: 406, cat: Audio/Video, desc: "Music Videos/音乐MV"}
- - {id: 404, cat: TV/Documentary, desc: "Documentaries/纪录片"}
- - {id: 402, cat: TV, desc: "TV Series/剧集"}
- - {id: 403, cat: TV, desc: "TV Shows/综艺"}
- - {id: 410, cat: Movies/3D, desc: "Movies 3D"}
-
- modes:
- search: [q]
- tv-search: [q, season, ep, imdbid, doubanid]
- movie-search: [q, imdbid, doubanid]
- music-search: [q]
-
-settings:
- - name: username
- type: text
- label: Username
- - name: password
- type: password
- label: Password
- - name: 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 }}"
- logout: ""
- securelogin: ""
- ssl: yes
- trackerssl: yes
- error:
- - selector: td.embedded:has(h2:contains("失败"))
- test:
- path: index.php
- selector: a[href$="logout.php"]
-
-search:
- paths:
- - path: torrents.php
- inputs:
- $raw: "{{ range .Categories }}cat{{.}}=1&{{end}}"
- search: "{{ if .Query.IMDBID }}{{ .Query.IMDBID }}{{ else }}{{ end }}{{ if or .Query.IMDBID .Query.DoubanID }} {{ else }}{{ .Keywords }}{{ end }}{{ if .Query.DoubanID }}{{ .Query.DoubanID }}{{ else }}{{ end }}"
- # 0 incldead, 1 active, 2 justdead
- incldead: 0
- # promotion: 0 all, 1 normal, 2 free, 3 2x, 4 2xfree, 5 50%, 6 2x 50%, 7 30%
- spstate: "{{ if .Config.freeleech }}2{{ else }}0{{ end }}"
- # 0 title, 1 descr, 3 uploader, 4 imdb, 5 douban
- search_area: "{{ if .Query.IMDBID }}4{{ else }}{{ end }}{{ if .Query.DoubanID }}5{{ else }}{{ end }}{{ if or .Query.IMDBID .Query.DoubanID }}{{ else }}0{{ end }}"
- # 0 AND, 1 OR, 2 exact
- search_mode: 0
- sort: "{{ .Config.sort }}"
- type: "{{ .Config.type }}"
- notnewword: 1
-
- rows:
- selector: table.torrents > tbody > tr:has(table.torrentname)
-
- fields:
- category:
- selector: a[href*="?cat="]
- attribute: href
- filters:
- - name: querystring
- args: cat
- title:
- selector: a[href*="details.php?id="] > b[title]
- attribute: title
- details:
- selector: a[href*="details.php?id="]
- attribute: href
- download:
- selector: a[href*="download.php?id="]
- attribute: href
- imdbid:
- selector: a[href*="imdb.com/title/tt"]
- attribute: href
- doubanid:
- selector: a[href*="movie.douban.com/subject/"]
- attribute: href
- date_elapsed:
- # time type: time elapsed (default)
- selector: td.rowfollow:nth-child(4) > span[title]
- attribute: title
- optional: true
- filters:
- - name: append
- args: " +08:00" # CST
- - name: dateparse
- args: "yyyy-MM-dd HH:mm:ss zzz"
- date_added:
- # time added
- selector: td.rowfollow:nth-child(4):not(:has(span))
- optional: true
- filters:
- - name: append
- args: " +08:00" # CST
- - name: dateparse
- args: "yyyy-MM-ddHH:mm:ss zzz"
- date:
- text: "{{ if or .Result.date_elapsed .Result.date_added }}{{ or .Result.date_elapsed .Result.date_added }}{{ else }}now{{ end }}"
- size:
- selector: td.rowfollow:nth-child(5)
- optional: true
- default: 512MB
- seeders:
- selector: td.rowfollow:nth-child(6)
- optional: true
- default: 0
- leechers:
- selector: td.rowfollow:nth-child(7)
- optional: true
- default: 0
- grabs:
- selector: td.rowfollow:nth-child(8)
- optional: true
- default: 0
- downloadvolumefactor:
- case:
- img.pro_free: 0
- img.pro_free2up: 0
- img.pro_50pctdown: 0.5
- img.pro_50pctdown2up: 0.5
- img.pro_30pctdown: 0.3
- "*": 1
- uploadvolumefactor:
- case:
- img.pro_50pctdown2up: 2
- img.pro_free2up: 2
- img.pro_2up: 2
- "*": 1
- description:
- selector: td:nth-child(2)
- remove: a, img
-# NexusPHP Standard v1.5 Beta 4
diff --git a/definitions/v11/nordicbytes.yml b/definitions/v11/nordicbytes.yml
new file mode 100644
index 000000000..b0e75d9ce
--- /dev/null
+++ b/definitions/v11/nordicbytes.yml
@@ -0,0 +1,208 @@
+---
+id: nordicbytes
+replaces:
+ - danishbytes-api
+name: NordicBytes
+description: "NordicBytes is a Mixed NORDIC Private Torrent Tracker for MOVIES / TV / GENERAL"
+language: en-US
+type: private
+encoding: UTF-8
+links:
+ - https://nordicbytes.org/
+legacylinks:
+ - https://danishbytes.org/
+ - https://danishbytes.art/
+ - https://danishbytes.club/
+ - https://danishbytes2.org/
+ - https://dbytes.org/
+
+caps:
+ categorymappings:
+ - {id: 1, cat: Movies, desc: "Movies"}
+ - {id: 2, cat: TV, desc: "TV"}
+ - {id: 3, cat: PC/0day, desc: "Apps"}
+ - {id: 4, cat: PC/Games, desc: "Games"}
+ - {id: 5, cat: Audio, desc: "Sound"}
+ - {id: 6, cat: Books, desc: "Books"}
+ - {id: 7, cat: Audio/Audiobook, desc: "AudioBooks"}
+ - {id: 8, cat: Audio, desc: "Podcasts"}
+ - {id: 9, cat: XXX, desc: "XXX"}
+
+ modes:
+ search: [q]
+ tv-search: [q, season, ep, imdbid, tvdbid, tmdbid]
+ movie-search: [q, imdbid, tmdbid]
+ music-search: [q]
+ book-search: [q]
+
+settings:
+ - name: apikey
+ type: text
+ label: APIKey
+ - name: info_apikey
+ type: info
+ label: About your API key
+ default: "Find or Generate a new API Key by accessing the NordicBytes Account API Key page."
+ - name: freeleech
+ type: checkbox
+ label: Search freeleech only
+ default: false
+ - name: single_file_release_use_filename
+ type: checkbox
+ label: Use filename as title for single file releases
+ default: false
+ - name: sort
+ type: select
+ label: Sort requested from site
+ default: created_at
+ options:
+ created_at: created
+ seeders: seeders
+ size: size
+ name: title
+ - name: type
+ type: select
+ label: Order requested from site
+ default: desc
+ options:
+ desc: desc
+ asc: asc
+ - name: info_activity
+ type: info
+ label: Account Inactivity
+ default: "Your account is automatically disabled after 90 days of no activity."
+
+login:
+ path: /api/torrents
+ method: get
+ error:
+ - selector: a[href*="/login"]
+ message:
+ text: "The API key was not accepted by {{ .Config.sitelink }}."
+ - selector: :root:contains("Account is Banned")
+
+search:
+ paths:
+ # https://hdinnovations.github.io/UNIT3D/torrent_api.html
+ # https://github.com/HDInnovations/UNIT3D/blob/master/app/Http/Controllers/API/TorrentController.php#L657
+ - path: api/torrents/filter
+ response:
+ type: json
+
+ headers:
+ Authorization: ["Bearer {{ .Config.apikey }}"]
+
+ inputs:
+ # if we have an id based search, add Season and Episode as query in name for UNIT3D < v6. Else pass S/E Params for UNIT3D >= v6
+ $raw: "{{ range .Categories }}&categories[]={{.}}{{end}}"
+ name: "{{ .Keywords }}"
+ seasonNumber: "{{ .Query.Season }}"
+ episodeNumber: "{{ .Query.Ep }}"
+ imdbId: "{{ .Query.IMDBIDShort }}"
+ tmdbId: "{{ .Query.TMDBID }}"
+ tvdbId: "{{ .Query.TVDBID }}"
+ "free[]": "{{ if .Config.freeleech }}100{{ else }}{{ end }}"
+ sortField: "{{ .Config.sort }}"
+ sortDirection: "{{ .Config.type }}"
+ perPage: 100
+
+ keywordsfilters:
+ - name: re_replace
+ args: ["\\.", " "]
+
+ rows:
+ selector: data
+ attribute: attributes
+
+ fields:
+ category:
+ selector: category_id
+ title_optional:
+ selector: name
+ title_filename:
+ selector: "files[0].name"
+ optional: true
+ files:
+ selector: num_file
+ title:
+ text: "{{ if and (.Config.single_file_release_use_filename) (eq .Result.files \"1\") (.Result.title_filename) }}{{ .Result.title_filename }}{{ else }}{{ .Result.title_optional }}{{ end }}"
+ details:
+ selector: details_link
+ download:
+ selector: download_link
+ infohash:
+ selector: info_hash
+ poster:
+ selector: meta.poster
+ filters:
+ - name: replace
+ args: ["https://placehold.co/90x135", ""]
+ imdbid:
+ selector: imdb_id
+ tmdbid:
+ selector: tmdb_id
+ tvdbid:
+ selector: tvdb_id
+ genre:
+ selector: meta.genres
+ filters:
+ - name: re_replace
+ args: ["(?i)(Science Fiction)", "Science_Fiction"]
+ - name: re_replace
+ args: ["(?i)(TV Movie)", "TV_Movie"]
+ - name: replace
+ args: [" & ", "_&_"]
+ _internal:
+ selector: internal
+ case:
+ 0: "{{ .False }}"
+ 1: "{{ .True }}"
+ description:
+ text: "{{ if .Result._internal }}Internal{{ else }}{{ end }}{{ if and .Result._internal .Result.genre }} | {{ else }}{{ end }}{{ .Result.genre }}"
+ seeders:
+ selector: seeders
+ leechers:
+ selector: leechers
+ grabs:
+ selector: times_completed
+ date:
+ # "created_at": "2021-10-18T00:34:50.000000Z" is returned by Newtonsoft.Json.Linq as 18/10/2021 00:34:50
+ selector: created_at
+ filters:
+ - name: append
+ args: " +00:00" # GMT
+ - name: dateparse
+ args: "MM/dd/yyyy HH:mm:ss zzz"
+ size:
+ selector: size
+ _featured:
+ selector: featured
+ case:
+ False: "{{ .False }}"
+ True: "{{ .True }}"
+ downloadvolumefactor_freeleech:
+ # api returns 0%, 25%, 50%, 75%, 100%
+ selector: freeleech
+ case:
+ 0%: 1 # not free
+ 25%: 0.75
+ 50%: 0.5
+ 75%: 0.25
+ 100%: 0 # freeleech
+ "*": 0 # catch errors
+ downloadvolumefactor:
+ text: "{{ if .Result._featured }}0{{ else }}{{ .Result.downloadvolumefactor_freeleech }}{{ end }}"
+ uploadvolumefactor_double_upload:
+ # api returns False, True
+ selector: double_upload
+ case:
+ False: 1 # normal
+ True: 2 # double
+ uploadvolumefactor:
+ text: "{{ if .Result._featured }}2{{ else }}{{ .Result.uploadvolumefactor_double_upload }}{{ end }}"
+ minimumratio:
+ text: 1.0
+ minimumseedtime:
+ # 2 day (as seconds = 2 x 24 x 60 x 60)
+ text: 172800
+# json NBy v1.0 (based on UNIT3D 8.2.0)
diff --git a/definitions/v11/nordichd.yml b/definitions/v11/nordichd.yml
index 27ae62df8..a9608fbf8 100644
--- a/definitions/v11/nordichd.yml
+++ b/definitions/v11/nordichd.yml
@@ -7,49 +7,40 @@ type: private
encoding: UTF-8
links:
- https://nordichd.org/
- - http://cinefilhd.eu/
legacylinks:
- - https://nordichd.sytes.net/ # https not supported
+ - https://nordichd.sytes.net/
- http://nordichd.sytes.net/
- http://nordichd.org/
+ - http://cinefilhd.eu/
caps:
categorymappings:
- - {id: 46, cat: PC/Games, desc: "Games/PC"}
- - {id: 47, cat: PC/Games, desc: "Games/PCRips"}
- - {id: 48, cat: Console, desc: "Games/PS"}
- - {id: 49, cat: Movies/UHD, desc: "Internal/4k-2160p"}
- - {id: 37, cat: Movies/HD, desc: "Internal/HD-1080p"}
- - {id: 17, cat: Movies/HD, desc: "Internal/HD-720p"}
- - {id: 30, cat: TV/HD, desc: "Internal/HDTV"}
- - {id: 15, cat: Movies/HD, desc: "Internal/mHD"}
- - {id: 40, cat: Movies/HD, desc: "Internal/Mp4"}
- - {id: 26, cat: Movies, desc: "Internal/Remux"}
- - {id: 45, cat: Movies/WEB-DL, desc: "Internal/WEB-DL"}
- - {id: 12, cat: TV/HD, desc: "HDTV-Packs"}
- - {id: 25, cat: Movies/3D, desc: "Movies/3D-Ou"}
- - {id: 16, cat: Movies/3D, desc: "Movies/3D-SbS"}
- - {id: 50, cat: Movies/UHD, desc: "Movies/4k-2016p"}
- - {id: 5, cat: Movies/BluRay, desc: "Movies/BluRay"}
- - {id: 38, cat: Movies/HD, desc: "Movies/HD-1080p"}
- - {id: 10, cat: Movies/HD, desc: "Movies/HD-720p"}
- - {id: 21, cat: TV/HD, desc: "Movies/HDTV"}
- - {id: 29, cat: Movies/HD, desc: "Movies/mHD"}
- - {id: 41, cat: Movies/HD, desc: "Movies/Mp4"}
- - {id: 39, cat: Movies, desc: "Movies/Remux"}
- - {id: 44, cat: Movies/WEB-DL, desc: "Movies/WEB-DL"}
- - {id: 23, cat: Audio/Lossless, desc: "Lossless"}
- - {id: 14, cat: Audio/MP3, desc: "MP3-Packs"}
- - {id: 22, cat: Audio/MP3, desc: "Music-MP3"}
- - {id: 43, cat: Audio/Video, desc: "Music/1080p"}
- - {id: 42, cat: Audio/Video, desc: "Music/720p"}
+ - {id: 1, cat: Movies, desc: "Movies"}
+ - {id: 14, cat: Movies/SD, desc: "Movies SD"}
+ - {id: 16, cat: Movies/SD, desc: "Movies Retro"}
+ - {id: 17, cat: Movies/HD, desc: "Movies HD"}
+ - {id: 31, cat: Movies/BluRay, desc: "Movies BDRip"}
+ - {id: 32, cat: Movies/BluRay, desc: "Movies BluRay"}
+ - {id: 33, cat: Movies, desc: "Movies Pack"}
+ - {id: 38, cat: Movies/UHD, desc: "Movies 4k/2160p"}
+ - {id: 6, cat: Movies, desc: "iNTERNAL"}
+ - {id: 18, cat: Movies/SD, desc: "iNTERNAL SD"}
+ - {id: 19, cat: Movies/SD, desc: "iNTERNAL Retro"}
+ - {id: 34, cat: Movies/HD, desc: "iNTERNAL HD"}
+ - {id: 35, cat: Movies/BluRay, desc: "iNTERNAL BDRip"}
+ - {id: 36, cat: Movies/BluRay, desc: "iNTERNAL BluRay"}
+ - {id: 37, cat: Movies, desc: "iNTERNAL Pack"}
+ - {id: 39, cat: Movies/UHD, desc: "iNTERNAL 4k/2160p"}
+ - {id: 2, cat: TV, desc: "TV Episodes"}
+ - {id: 3, cat: TV/SD, desc: "TV Episodes SD"}
+ - {id: 4, cat: TV, desc: "TV Episodes Series"}
+ - {id: 26, cat: TV/HD, desc: "TV Episodes HDTV Episodes"}
+ - {id: 27, cat: TV/HD, desc: "TV Episodes HDTV Series"}
modes:
search: [q]
tv-search: [q, season, ep]
movie-search: [q]
- music-search: [q]
- book-search: [q]
settings:
- name: username
@@ -58,23 +49,18 @@ settings:
- name: password
type: password
label: Password
- - name: info_tpp
- type: info
- label: Results Per Page
- default: For best results, change the Torrents per page setting to 100 on your NORDiCHD account.
- name: freeleech
type: checkbox
- label: Search freeleech only
+ label: Filter freeleech only
default: false
- name: sort
type: select
label: Sort requested from site
- default: 4
+ default: added
options:
- 4: created
- 7: seeders
- 5: size
- 1: title
+ added: created
+ seeders: seeders
+ size: size
- name: type
type: select
label: Order requested from site
@@ -82,95 +68,119 @@ settings:
options:
desc: desc
asc: asc
+ - name: info_results
+ type: info
+ label: Search results
+ default: "If you are getting the error Found no results while trying to browse this tracker then first access the site with your browser and check that you are not being forced to change your password because it has expired after 180 days."
login:
- path: login.php
+ path: ?p=home&pid=1
method: form
- form: form[action="takelogin.php"]
+ form: form#sls_form
+ submitpath: ajax/login.php
inputs:
- username: "{{ .Config.username }}"
- password: "{{ .Config.password }}"
+ action: login
+ loginbox_membername: "{{ .Config.username }}"
+ loginbox_password: "{{ .Config.password }}"
+ loginbox_remember: 1
+ selectorinputs:
+ securitytoken:
+ selector: "script:contains(\"stKey: \")"
+ filters:
+ - name: regexp
+ args: "stKey: \"(.+?)\","
error:
- - selector: h2
- message:
- selector: table tr td.text
+ - selector: div.error
+ - selector: :contains("-ERROR-")
test:
- path: index.php
- selector: a[href^="logout.php?hash_please="]
+ path: ?p=home&pid=1
+ selector: div#member_info_bar
search:
paths:
- # http://nordichd.sytes.net/browse.php?cats3[]=37&cats3[]=17&cats2[]=38&cats2[]=10&search=&searchin=title&incldead=1&only_free=1
- - path: browse.php
+ # 7 results per page, but fetching more pages when results < 7 returns duplicates from each additional page.
+ - path: /
inputs:
- # note: site uses the catsX[]=nn method which cardigann does not support.
- search: "{{ .Keywords }}"
- # title, descr, filelist, genre, all
- searchin: title
- # 0 active, 1 incldead, 2 onlydead
- incldead: 1
- only_free: "{{ if .Config.freeleech }}1{{ else }}{{ end }}"
- sort: "{{ .Config.sort }}"
- type: "{{ .Config.type }}"
- # does not support searching imdbid and does not return imdb links
+ p: torrents
+ pid: 32
+ $raw: "{{ range .Categories }}cid[]={{.}}&{{end}}"
+ keywords: "{{ .Keywords }}"
+ # name, description, both, uploader
+ search_type: name
+ "sortOptions[sortBy]": "{{ .Config.sort }}"
+ "sortOptions[sortOrder]": "{{ .Config.type }}"
+ # does not support imdbid search or have imdbid links in results.
+ error:
+ - selector: div.error:not(:contains("There are no results found."))
rows:
- selector: table tbody tr.browse_color:has(a[href^="download.php?torrent="])
- filters:
- - name: andmatch
- - name: strdump
+ selector: "div.torrent-box[id^=\"torrent_\"]{{ if .Config.freeleech }}:has(img[src$=\"/torrent_free.png\"]){{ else }}{{ end }}"
fields:
category:
- selector: a[href^="browse.php?cat="]
+ selector: a[href*="?p=torrents&pid=10&cid="]
attribute: href
filters:
- name: querystring
- args: cat
+ args: cid
title:
- selector: a[href^="details.php?id="]
+ selector: a[href*="?p=torrents&pid=10&action=details&tid="]
details:
- selector: a[href^="details.php?id="]
+ selector: a[href*="?p=torrents&pid=10&action=details&tid="]
attribute: href
download:
- selector: a[href^="download.php?torrent="]
+ selector: a[href*="?p=torrents&pid=10&action=download&tid="]
attribute: href
poster:
- selector: a[href^="details.php?id="]
- attribute: onmouseover
+ selector: a[href*="data/torrents/torrent_images/"]
+ attribute: href
+ imdbid:
+ selector: a[href*="imdb.com/title/tt"]
+ attribute: href
+ genre:
+ selector: div.torrentDetails > div:has(a[href*="&genre="])
+ filters:
+ - name: replace
+ args: ["Genre:", ""]
+ description:
+ text: "{{ .Result.genre }}"
+ size:
+ selector: a[rel="torrent_size"]
+ grabs:
+ selector: a[rel="times_completed"]
+ seeders:
+ selector: a[rel="torrent_seeders"]
+ leechers:
+ selector: a[rel="torrent_leechers"]
+ date_day:
+ selector: div.torrentOwner:contains("day")
+ # auto adjusted by site account profile
+ optional: true
filters:
- name: regexp
- args: "src=..(https.+).. width"
- files:
- selector: td:nth-last-child(8)
- date_day:
- # Today
08:10 AM
- # Yesterday
06:44 PM
- selector: td:nth-last-child(6):contains("day")
- # auto adjusted by site account profile
- optional: true
+ args: "Uploaded (.+?) by"
+ - name: fuzzytime
date_year:
- # Dec 4 2021
10:20 AM
- selector: td:nth-last-child(6):not(:contains("day"))
+ selector: div.torrentOwner:contains("-")
# auto adjusted by site account profile
optional: true
filters:
+ - name: regexp
+ args: "Uploaded (.+?) by"
- name: dateparse
- args: "MMM d yyyy hh:mm tt"
+ args: "dd-MM-yyyy HH:mm"
+ date_unix:
+ selector: div.torrentOwner abbr
+ optional: true
+ attribute: data-time
date:
- text: "{{ if or .Result.date_day .Result.date_year }}{{ or .Result.date_day .Result.date_year }}{{ else }}now{{ end }}"
- size:
- selector: td:nth-last-child(5)
- grabs:
- selector: td:nth-last-child(4)
- seeders:
- selector: td:nth-last-child(3)
- leechers:
- selector: td:nth-last-child(2)
+ text: "{{ if or .Result.date_day .Result.date_year .Result.date_unix }}{{ or .Result.date_day .Result.date_year .Result.date_unix }}{{ else }}now{{ end }}"
downloadvolumefactor:
- text: 1 # site does not appear to have a freeleech flag
+ case:
+ img[src$="/torrent_free.png"]: 0
+ "*": 1
uploadvolumefactor:
text: 1
minimumratio:
text: 1.0
-# U-232 V3
+# TSUE 2.2
diff --git a/definitions/v11/torrentqq.yml b/definitions/v11/torrentqq.yml
index 4dcf05f37..5c957c134 100644
--- a/definitions/v11/torrentqq.yml
+++ b/definitions/v11/torrentqq.yml
@@ -7,7 +7,7 @@ type: public
encoding: UTF-8
followredirect: true
links:
- - https://torrentqq411.com/
+ - https://torrentqq412.com/
- https://torrentegg87.com/
legacylinks:
- https://torrentegg72.com/
@@ -25,7 +25,6 @@ legacylinks:
- https://torrentegg84.com/
- https://torrentegg85.com/
- https://torrentegg86.com/
- - https://torrentqq395.com/
- https://torrentqq396.com/
- https://torrentqq398.com/
- https://torrentqq399.com/
@@ -40,6 +39,7 @@ legacylinks:
- https://torrentqq408.com/
- https://torrentqq409.com/
- https://torrentqq410.com/
+ - https://torrentqq411.com/
caps:
categorymappings: