From 1d2f7f36d8242287897e6944534fd5c63f39f2b3 Mon Sep 17 00:00:00 2001
From: ilike2burnthing <59480337+ilike2burnthing@users.noreply.github.com>
Date: Sat, 11 Nov 2023 00:37:04 +0000
Subject: [PATCH] kinozal: add separate magnet indexer. resolves #14835
(#14840)
---
.../Definitions/kinozal-magnet.yml | 311 ++++++++++++++++++
src/Jackett.Common/Definitions/kinozal.yml | 6 +-
2 files changed, 316 insertions(+), 1 deletion(-)
create mode 100644 src/Jackett.Common/Definitions/kinozal-magnet.yml
diff --git a/src/Jackett.Common/Definitions/kinozal-magnet.yml b/src/Jackett.Common/Definitions/kinozal-magnet.yml
new file mode 100644
index 000000000..73fba1e21
--- /dev/null
+++ b/src/Jackett.Common/Definitions/kinozal-magnet.yml
@@ -0,0 +1,311 @@
+---
+id: kinozal-magnet
+name: Kinozal (M)
+description: "Kinozal is a RUSSIAN Semi-Private Torrent Tracker for MOVIES / TV / MUSIC. This indexer uses magnet links."
+language: ru-RU
+type: semi-private
+encoding: windows-1251
+links:
+ - https://kinozal.tv/
+ - https://kinozal.guru/
+ - https://kinozal-guru.appspot.com/
+legacylinks:
+ - https://kinozal-tv.appspot.com/
+ - http://kinozal.tv/
+
+caps:
+ categorymappings:
+ # TV
+ - {id: 1001, cat: TV, desc: "All TV Shows"}
+ - {id: 45, cat: TV, desc: "Russian TV Series"}
+ - {id: 46, cat: TV, desc: "TV Series"}
+ # Movies
+ - {id: 1002, cat: Movies, desc: "All Movies"}
+ - {id: 8, cat: Movies, desc: "Movies - Comedy"}
+ - {id: 6, cat: Movies, desc: "Movies - Action / War"}
+ - {id: 15, cat: Movies, desc: "Movies - Thriller / Detective"}
+ - {id: 17, cat: Movies, desc: "Movies - Drama"}
+ - {id: 35, cat: Movies, desc: "Movies - Melodrama"}
+ - {id: 39, cat: Movies, desc: "Movies - Indian"}
+ - {id: 13, cat: Movies, desc: "Movies - Science Fiction"}
+ - {id: 14, cat: Movies, desc: "Movies - Fantasy"}
+ - {id: 24, cat: Movies, desc: "Movies - Horror / Mystery"}
+ - {id: 11, cat: Movies, desc: "Movies - Adventure"}
+ - {id: 10, cat: Movies, desc: "Movies - Russian Movies"}
+ - {id: 9, cat: Movies, desc: "Movies - Historical"}
+ - {id: 47, cat: Movies, desc: "Movies - Asian"}
+ - {id: 18, cat: Movies, desc: "Movies - Documentaries"}
+ - {id: 37, cat: Movies, desc: "Movies - Sport"}
+ - {id: 12, cat: Movies, desc: "Movies - Kids / Family"}
+ - {id: 7, cat: Movies, desc: "Movies - Classic"}
+ - {id: 48, cat: Movies, desc: "Movies - Concerts"}
+ - {id: 49, cat: Movies, desc: "Movies - Shows / TV Shows"}
+ - {id: 50, cat: Movies, desc: "Movies - TV Show Mir"}
+ - {id: 38, cat: Movies, desc: "Movies - Theatre, Opera, Ballet"}
+ - {id: 16, cat: Movies, desc: "Movies - Erotica"}
+ # Cartoons
+ - {id: 1003, cat: TV/Anime, desc: "All Cartoons/Anime"}
+ - {id: 21, cat: TV/Anime, desc: "Cartoons"}
+ - {id: 22, cat: TV/Anime, desc: "Cartoons - Russian"}
+ - {id: 20, cat: TV/Anime, desc: "Cartoons - Anime"}
+ # Music
+ - {id: 1004, cat: Audio, desc: "All Music"}
+ - {id: 3, cat: Audio, desc: "Music"}
+ - {id: 4, cat: Audio, desc: "Music - Russian"}
+ - {id: 5, cat: Audio, desc: "Music - Collections"}
+ - {id: 42, cat: Audio, desc: "Music - Classical"}
+ # Other
+ - {id: 1006, cat: TV/Other, desc: "Shows, Concerts, Sports"}
+ - {id: 2, cat: Audio/Audiobook, desc: "Other - AudioBooks"}
+ - {id: 1, cat: Audio/Video, desc: "Other - Music Video's"}
+ - {id: 23, cat: Console, desc: "Other - Games"}
+ - {id: 32, cat: PC, desc: "Other - Programs"}
+ - {id: 40, cat: Other, desc: "Other - Design / Graphics"}
+ - {id: 41, cat: Books, desc: "Other - Library"}
+
+ modes:
+ search: [q]
+ tv-search: [q, season, ep]
+ movie-search: [q]
+ music-search: [q]
+ book-search: [q]
+
+settings:
+ - name: username
+ type: text
+ label: Username
+ - name: password
+ type: password
+ label: Password
+ - name: info_sid
+ type: info
+ label: How to get your SID
+ default: "This is only needed when using *.appspot.com mirrors, otherwise just leave blank. Access the tracker's Раздачи page in browser, and in the address bar you will see something like ?sid=abC1de2F. Those last 8 characters are your SID."
+ - name: sid
+ type: text
+ label: SID
+ - name: freeleech
+ type: checkbox
+ label: Search freeleech only
+ default: false
+ - name: striprussian
+ type: checkbox
+ label: Strip Russian Letters
+ default: true
+ - name: addrussian
+ type: checkbox
+ label: Add RUSSIAN to end of all titles to improve language detection by Sonarr and Radarr. Will cause English-only results to be misidentified.
+ default: true
+ - name: sort
+ type: select
+ label: Sort requested from site
+ default: 0
+ options:
+ 0: created
+ 1: seeders
+ 3: size
+ - name: type
+ type: select
+ label: Order requested from site
+ default: 0
+ options:
+ 0: desc
+ 1: asc
+ - name: info_magnets
+ type: info
+ label: Magnets
+ default: "This tracker limits the number of torrents a user can download each day without paying. This indexer uses magnet links to bypass that limit, however this doesn't include the passkey, so any download/upload is not recorded. To download with torrents, use Kinozal."
+
+login:
+ path: takelogin.php
+ method: post
+ inputs:
+ username: "{{ .Config.username }}"
+ password: "{{ .Config.password }}"
+ error:
+ - selector: div.bx1:has(div.red)
+ message:
+ selector: div.bx1 div.red
+ test:
+ path: my.php
+ selector: a[href*="logout.php?hash4u="]
+
+download:
+ before:
+ path: get_srv_details.php
+ inputs:
+ action: 2
+ id: "{{ .DownloadUri.Query.id }}"
+ infohash:
+ usebeforeresponse: true
+ hash:
+ selector: li:first-child
+ filters:
+ - name: regexp
+ args: ([A-F|a-f|0-9]{40})
+ title:
+ selector: div.b
+ filters:
+ - name: trim
+ - name: validfilename
+
+search:
+ paths:
+ # http://kinozal.tv/browse.php?s=lucifer+2017&g=0&c=0&v=0&d=0&w=0&t=0&f=0
+ - path: browse.php
+ # required for the appspot domain.
+ followredirect: true
+ keywordsfilters:
+# - name: diacritics # 8686
+# args: replace
+ - name: re_replace
+ args: ["[^a-zA-Zа-яА-Я0-9]+", " "]
+ - name: re_replace # S01 to 1
+ args: ["(?i)\\bS0*(\\d+)\\b", "$1"]
+ - name: re_replace # S01E01 to 1 1
+ args: ["(?i)\\bS0*(\\d+)E0*(\\d+)\\b", "$1 $2"]
+ inputs:
+ # multi cat is not supported. so defaulting to ALL
+ c: 0
+ s: "{{ .Keywords }}"
+ # where 0 title, 1 person, 2 genres, 3 regular expression
+ g: 0
+ # format 0 all
+ v: 0
+ # released 0 all
+ d: 0
+ # filter 0 all, 1 today, 2 yesterday, 3 in 3 days, 4 this week, 5 per month, 6-10 size rages, 11 gold, 12 silver
+ w: "{{ if .Config.freeleech }}11{{ else }}0{{ end }}"
+ t: "{{ .Config.sort }}"
+ f: "{{ .Config.type }}"
+ sid: "{{ if .Config.sid }}{{ .Config.sid }}{{ else }}{{ end }}"
+
+ rows:
+ selector: table > tbody > tr:has(td.bt)
+
+ fields:
+ title:
+ selector: td.nam a[href^="/details.php?"]
+ filters:
+ # normalize to SXXEYY format
+ - name: replace
+ args: ["Кураж-Бамбей", "kurazh"]
+ - name: replace
+ args: ["Кубик в Кубе", "Kubik"]
+ - name: replace
+ args: ["Кравец", "Kravec"]
+ - name: replace
+ args: ["Пифагор", "Pifagor"]
+ - name: replace
+ args: ["Невафильм", "Nevafilm"]
+ - name: replace
+ args: ["АП", "AVO"]
+ - name: replace
+ args: ["ЛО", "VO"]
+ - name: replace
+ args: ["ЛД", "DVO"]
+ - name: replace
+ args: ["ЛМ", "MVO"]
+ - name: replace
+ args: ["ПО", "VO"]
+ - name: replace
+ args: ["ПД", "DVO"]
+ - name: replace
+ args: ["ПМ", "MVO"]
+ - name: replace
+ args: ["ДБ", "DUB"]
+ - name: replace
+ args: ["СТ", "Sub"]
+ - name: re_replace
+ args: ["\\((\\d+-*\\d*)\\s+[Сс]езоны?:?\\s+(?:(\\d+-*\\d*)\\s+(?:[Сс]ери[ийя]|выпуски?(?:ов)?)(?:.*\\d+)?)?\\)(.*)\\s+((?:[12][0-9]{3}-?){1,})(.*)", "$3 - S$1E$2 - $4 $5"]
+ - name: re_replace
+ args: ["\\((?:(\\d+-*\\d*)\\s+(?:[Сс]ери[ийя]|выпуски?(?:ов)?)(?:.*\\d+)?)?\\)(.*)\\s+((?:[12][0-9]{3}-?){1,})(.*)", "$2 - E$1 - $3 $4"]
+ - name: re_replace
+ args: ["(\\([А-Яа-яЁё\\W]+\\))|(^[А-Яа-яЁё\\W\\d]+\\/ ((?:[12][0-9]{3}-?){1,}))|(^[А-Яа-яЁё\\W\\d]+\\/ )|([а-яА-ЯЁё \\-]+,+)|([а-яА-ЯЁё]+)", "{{ if .Config.striprussian }}{{ else }}$0{{ end }}"]
+ - name: replace
+ args: [" / ", " "]
+ - name: re_replace
+ args: ["^-\\s+", " "]
+ - name: re_replace
+ args: ["\\((\\d+[pi])\\)", "$1"]
+ - name: re_replace
+ args: ["(.*)(Blu-Ray\\s*(?:Disc|EUR|CEE)?)\\s*(\\d+[pi])", "$1 BR-DISK $3"]
+ - name: append
+ args: "{{ if .Config.addrussian }} - RUSSIAN{{ else }}{{ end }}"
+ - name: replace
+ args: ["-Rip", "Rip"]
+ - name: replace
+ args: ["WEB-DL", "WEBDL"]
+ - name: replace
+ args: ["WEBDLRip", "WEBDL"]
+ - name: replace
+ args: ["HDTVRip", "HDTV"]
+ details:
+ selector: td.nam a[href^="/details.php?"]
+ attribute: href
+ category:
+ selector: td.bt img
+ attribute: onclick
+ filters:
+ - name: re_replace
+ args: ["[^\\d+]", ""]
+ download:
+ selector: td.nam a[href^="/details.php?"]
+ attribute: href
+ filters:
+ - name: replace
+ args: ["details", "download"]
+ size:
+ selector: td:nth-child(4)
+ filters:
+ - name: replace
+ args: ["ТБ", "TB"]
+ - name: replace
+ args: ["ГБ", "GB"]
+ - name: replace
+ args: ["МБ", "MB"]
+ - name: replace
+ args: ["КБ", "KB"]
+ seeders:
+ selector: td:nth-child(5)
+ leechers:
+ selector: td:nth-child(6)
+ # dates come in four flavours:
+ date_day:
+ # now
+ # Today 09:10
+ # Yesterday 13:04
+ selector: td:nth-child(7):not(:contains("."))
+ # auto adjusted by site account profile
+ optional: true
+ filters:
+ - name: replace
+ args: [" в", ""]
+ - name: replace
+ args: ["сейчас", "now"]
+ - name: replace
+ args: ["сегодня", "Today"]
+ - name: replace
+ args: ["вчера", "Yesterday"]
+ date_year:
+ # 24.10.2017 at 23:44
+ selector: td:nth-child(7):contains(".")
+ # auto adjusted by site account profile
+ optional: true
+ filters:
+ - name: replace
+ args: [" в", ""]
+ - name: dateparse
+ args: "dd.MM.yyyy HH:mm"
+ date:
+ text: "{{ if or .Result.date_day .Result.date_year }}{{ or .Result.date_day .Result.date_year }}{{ else }}now{{ end }}"
+ downloadvolumefactor:
+ case:
+ a.r1: 0 # gold
+ a.r2: 0.5 # silver
+ "*": 1
+ uploadvolumefactor:
+ text: 1
+ minimumratio:
+ text: 1.0
+# engine n/a
diff --git a/src/Jackett.Common/Definitions/kinozal.yml b/src/Jackett.Common/Definitions/kinozal.yml
index 6bff36cb8..fc04a516d 100644
--- a/src/Jackett.Common/Definitions/kinozal.yml
+++ b/src/Jackett.Common/Definitions/kinozal.yml
@@ -1,7 +1,7 @@
---
id: kinozal
name: Kinozal
-description: "Kinozal is a RUSSIAN Semi-Private Torrent Tracker for MOVIES / TV / MUSIC"
+description: "Kinozal is a RUSSIAN Semi-Private Torrent Tracker for MOVIES / TV / MUSIC. This indexer uses torrents."
language: ru-RU
type: semi-private
encoding: windows-1251
@@ -111,6 +111,10 @@ settings:
options:
0: desc
1: asc
+ - name: info_torrent
+ type: info
+ label: Torrents
+ default: "This tracker limits the number of torrents a user can download each day without paying. This indexer uses torrent files with the user's passkey, so any download/upload is recorded. If you receive errors when downloading torrent files, you may have reached this limit. To bypass the limit with magnet links, use Kinozal (M)."
login:
path: takelogin.php