From c6d4dcf0f01f5ea2e6e2c5e56f5ec7fc09f04a5f Mon Sep 17 00:00:00 2001 From: ineednewpajamas <73252768+ineednewpajamas@users.noreply.github.com> Date: Mon, 26 Jan 2026 12:29:47 -0600 Subject: [PATCH] jackett indexers as of 21f9de8d34f9be60912cd0ced3a6e812d92b6ed0 [2026-01-26T18:29:47Z] Added Indexers: definitions/v11/g3minitr4ck3r-api.yml Modified Indexers: definitions/v11/desitorrents-api.yml definitions/v11/kamept.yml definitions/v11/keepfriends.yml definitions/v11/learnflakes.yml definitions/v11/matrix.yml definitions/v11/myspleen.yml definitions/v11/pterclub.yml definitions/v11/torrenting.yml --- definitions/v11/desitorrents-api.yml | 4 +- definitions/v11/g3minitr4ck3r-api.yml | 235 ++++++++++++++++++++++++++ definitions/v11/kamept.yml | 2 +- definitions/v11/keepfriends.yml | 2 +- definitions/v11/learnflakes.yml | 29 +--- definitions/v11/matrix.yml | 2 +- definitions/v11/myspleen.yml | 2 +- definitions/v11/pterclub.yml | 2 +- definitions/v11/torrenting.yml | 2 +- 9 files changed, 250 insertions(+), 30 deletions(-) create mode 100644 definitions/v11/g3minitr4ck3r-api.yml diff --git a/definitions/v11/desitorrents-api.yml b/definitions/v11/desitorrents-api.yml index 3e889a042..d05ad181c 100644 --- a/definitions/v11/desitorrents-api.yml +++ b/definitions/v11/desitorrents-api.yml @@ -61,7 +61,7 @@ settings: default: "Inactive accounts will be disabled after 3 months of inactivity, 1 month for new accounts. Members must generate some download or upload activity at least once every 3 months." login: - path: /api/torrents + path: /api/v1/torrents method: get inputs: {} # TODO: remove in v10 error: @@ -74,7 +74,7 @@ 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 + - path: api/v1/torrents/filter response: type: json diff --git a/definitions/v11/g3minitr4ck3r-api.yml b/definitions/v11/g3minitr4ck3r-api.yml new file mode 100644 index 000000000..9f1fa2bb5 --- /dev/null +++ b/definitions/v11/g3minitr4ck3r-api.yml @@ -0,0 +1,235 @@ +--- +id: g3minitr4ck3r-api +name: G3MINI TR4CK3R (API) +description: "G3MINI TR4CK3R is a FRENCH Private Torrent Tracker for MOVIES / TV / GENERAL" +language: fr-FR +type: private +encoding: UTF-8 +links: + - https://gemini-tracker.org/ + +caps: + categorymappings: + - {id: 1, cat: Movies, desc: "Films"} + - {id: 2, cat: TV, desc: "Séries"} + - {id: 10, cat: TV/Sport, desc: "Sports"} + - {id: 13, cat: Movies/Other, desc: "Documentaires - Film"} + - {id: 14, cat: TV/Documentary, desc: "Documentaires - Series"} + - {id: 3, cat: PC/Games, desc: "Jeux PC"} + - {id: 4, cat: Console, desc: "Jeux Consoles"} + - {id: 7, cat: Movies, desc: "Films Animation Japonaise"} + - {id: 6, cat: TV/Anime, desc: "Animes"} + - {id: 5, cat: Audio, desc: "Audios"} + - {id: 8, cat: Books/Comics, desc: "Bandes dessinées"} + - {id: 11, cat: Books/Comics, desc: "Mangas"} + - {id: 9, cat: Books/Mags, desc: "Magazines"} + - {id: 12, cat: Books/EBook, desc: "Livres"} + + modes: + search: [q] + tv-search: [q, season, ep, imdbid, tvdbid, tmdbid] + movie-search: [q, imdbid, tmdbid] + music-search: [q] + +settings: + - name: apikey + type: text + label: APIKey + - name: info_key + type: info + label: About your API key + default: "Find or Generate a new API Token by accessing your G3MINI TR4CK3R account My Settings page and clicking on the API Key tab." + - 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: true + - name: multilang + type: checkbox + label: Replace MULTi by another language in release name + default: false + - name: multilanguage + type: select + label: Replace MULTi by this language + default: FRENCH + options: + FRENCH: FRENCH + MULTi FRENCH: MULTi FRENCH + ENGLISH: ENGLISH + MULTi ENGLISH: MULTi ENGLISH + VOSTFR: VOSTFR + MULTi VOSTFR: MULTi VOSTFR + - name: vostfr + type: checkbox + label: Replace VOSTFR and SUBFRENCH with ENGLISH + default: false + - name: vfq + type: checkbox + label: Replace VFQ with FRENCH + 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 + 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_phase1: + text: "{{ if and (.Config.single_file_release_use_filename) (eq .Result.files \"1\") (.Result.title_filename) }}{{ .Result.title_filename }}{{ else }}{{ .Result.title_optional }}{{ end }}" + title_vfq: + text: "{{ .Result.title_phase1 }}" + filters: + - name: re_replace + args: ["(?i)\\b(VFQ)\\b", "FRENCH"] + title_phase2: + text: "{{ if .Config.vfq }}{{ .Result.title_vfq }}{{ else }}{{ .Result.title_phase1 }}{{ end }}" + title_vostfr: + text: "{{ .Result.title_phase2 }}" + filters: + - name: re_replace + args: ["(?i)\\b(vostfr|subfrench)\\b", "ENGLISH"] + title_phase3: + text: "{{ if .Config.vostfr }}{{ .Result.title_vostfr }}{{ else }}{{ .Result.title_phase2 }}{{ end }}" + title_multilang: + text: "{{ .Result.title_phase3 }}" + filters: + - name: re_replace + args: ["(?i)\\b(MULTI(?!.*(?:FRENCH|ENGLISH|VOSTFR)))\\b", "{{ .Config.multilanguage }}"] + title: + text: "{{ if .Config.multilang }}{{ .Result.title_multilang }}{{ else }}{{ .Result.title_phase3 }}{{ end }}" + details: + selector: details_link + download: + selector: download_link + poster: + selector: meta.poster + filters: + - name: replace + args: ["https://via.placeholder.com/90x135", ""] + imdbid: + selector: imdb_id + tmdbid: + selector: tmdb_id + tvdbid: + selector: tvdb_id + genre: + selector: meta.genres + filters: + - name: replace + args: [" & ", "_&_"] + _internal: + selector: internal + case: + False: "{{ .False }}" + True: "{{ .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: 0.75 +# json UNIT3D 9.2.0 diff --git a/definitions/v11/kamept.yml b/definitions/v11/kamept.yml index dcaa7b629..60b408fe5 100644 --- a/definitions/v11/kamept.yml +++ b/definitions/v11/kamept.yml @@ -62,7 +62,7 @@ settings: default: For best results, change the Torrents per page: setting to 100 on your account profile. login: - # using cookie method because login page has embedded Clouflare turnstile + # using cookie method because login page has embedded Cloudflare turnstile method: cookie inputs: cookie: "{{ .Config.cookie }}" diff --git a/definitions/v11/keepfriends.yml b/definitions/v11/keepfriends.yml index aaded69e3..4be3a4c17 100644 --- a/definitions/v11/keepfriends.yml +++ b/definitions/v11/keepfriends.yml @@ -72,7 +72,7 @@ settings: default: For best results, change the Torrents per page: setting to 100 on your account profile. login: - # using cookie method because login page has embedded Clouflare turnstile + # using cookie method because login page has embedded Cloudflare turnstile method: cookie inputs: cookie: "{{ .Config.cookie }}" diff --git a/definitions/v11/learnflakes.yml b/definitions/v11/learnflakes.yml index 80f621d5a..09708cc1a 100644 --- a/definitions/v11/learnflakes.yml +++ b/definitions/v11/learnflakes.yml @@ -46,12 +46,11 @@ caps: book-search: [q] settings: - - name: username + - name: cookie type: text - label: Username - - name: password - type: password - label: Password + label: Cookie + - name: info_cookie + type: info_cookie - name: freeleech type: checkbox label: Filter freeleech only @@ -77,24 +76,10 @@ settings: 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: ?p=home&pid=1 - method: form - form: form#loginbox_form - submitpath: ajax/login.php + # using cookie method because login page has embedded Cloudflare turnstile + method: cookie inputs: - 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: div.error - - selector: :contains("-ERROR-") + cookie: "{{ .Config.cookie }}" test: path: ?p=home&pid=1 selector: div#member_info_bar diff --git a/definitions/v11/matrix.yml b/definitions/v11/matrix.yml index 6f3c5ff12..d256cbf4e 100644 --- a/definitions/v11/matrix.yml +++ b/definitions/v11/matrix.yml @@ -94,7 +94,7 @@ settings: default: "If you do not log in to the site for 6 months, the system will automatically delete it!" login: - # using cookie method because login page has embedded Clouflare turnstile + # using cookie method because login page has embedded Cloudflare turnstile method: cookie inputs: cookie: "{{ .Config.cookie }}" diff --git a/definitions/v11/myspleen.yml b/definitions/v11/myspleen.yml index 84a445459..bffdf49be 100644 --- a/definitions/v11/myspleen.yml +++ b/definitions/v11/myspleen.yml @@ -33,7 +33,7 @@ settings: type: info_cookie login: - # using cookie method because login page has embedded Clouflare turnstile + # using cookie method because login page has embedded Cloudflare turnstile method: cookie inputs: cookie: "{{ .Config.cookie }}" diff --git a/definitions/v11/pterclub.yml b/definitions/v11/pterclub.yml index f2ee13902..30628093e 100644 --- a/definitions/v11/pterclub.yml +++ b/definitions/v11/pterclub.yml @@ -75,7 +75,7 @@ settings: default: "Account retention rules: