Skip to content

Instantly share code, notes, and snippets.

@Clemv95
Forked from LimeDrive/ygg-api.yml
Last active January 17, 2026 23:59
Show Gist options
  • Select an option

  • Save Clemv95/8bfded23ef23ec78f6678896f42a2b60 to your computer and use it in GitHub Desktop.

Select an option

Save Clemv95/8bfded23ef23ec78f6678896f42a2b60 to your computer and use it in GitHub Desktop.
Indexeur ygg-api pour jackett / prowlarr
---
id: yggapi
name: YggAPI
description: Indexeur non-officiel pour YggTorrent (YGG) - MOVIES / TV
language: fr-FR
type: private
encoding: UTF-8
testlinktorrent: false
links:
- https://yggapi.eu/
caps:
categorymappings:
- {id: 2145, cat: TV, desc: "Film/Vidéo"}
- {id: 2178, cat: Movies/Other, desc: "Film/Vidéo : Animation"} # changed to movies, see #3553
- {id: 2179, cat: TV/Anime, desc: "Film/Vidéo : Animation Série"}
- {id: 2180, cat: Audio/Video, desc: "Film/Vidéo : Concert"}
- {id: 2181, cat: TV/Documentary, desc: "Film/Vidéo : Documentaire"}
- {id: 2182, cat: TV, desc: "Film/Vidéo : Emission TV"}
- {id: 2183, cat: Movies, desc: "Film/Vidéo : Film"}
- {id: 2184, cat: TV, desc: "Film/Vidéo : Série TV"}
- {id: 2185, cat: TV, desc: "Film/Vidéo : Spectacle"}
- {id: 2186, cat: TV/Sport, desc: "Film/Vidéo : Sport"}
- {id: 2187, cat: TV/Other, desc: "Film/Vidéo : Vidéo-clips"}
- {id: 2139, cat: Audio, desc: "Audio"}
- {id: 2147, cat: Audio, desc: "Audio : Karaoké"}
- {id: 2148, cat: Audio, desc: "Audio : Musique"}
- {id: 2150, cat: Audio, desc: "Audio : Podcast Radio"}
- {id: 2149, cat: Audio/Other, desc: "Audio : Samples"}
- {id: 2144, cat: PC, desc: "Application"}
- {id: 2177, cat: PC/0day, desc: "Application : Autre"}
- {id: 2176, cat: PC, desc: "Application : Formation"}
- {id: 2171, cat: PC/ISO, desc: "Application : Linux"}
- {id: 2172, cat: PC/Mac, desc: "Application : MacOS"}
- {id: 2174, cat: PC/Mobile-Android, desc: "Application : Smartphone"}
- {id: 2175, cat: PC/Mobile-Android, desc: "Application : Tablette"}
- {id: 2173, cat: PC/0day, desc: "Application : Windows"}
- {id: 2142, cat: PC/Games, desc: "Jeu vidéo"}
- {id: 2167, cat: Console/Other, desc: "Jeu vidéo : Autre"}
- {id: 2159, cat: PC/Games, desc: "Jeu vidéo : Linux"}
- {id: 2160, cat: PC/Games, desc: "Jeu vidéo : MacOS"}
- {id: 2162, cat: Console/XBox One, desc: "Jeu vidéo : Microsoft"}
- {id: 2163, cat: Console/Wii, desc: "Jeu vidéo : Nintendo"}
- {id: 2165, cat: PC/Mobile-Android, desc: "Jeu vidéo : Smartphone"}
- {id: 2164, cat: Console/PS4, desc: "Jeu vidéo : Sony"}
- {id: 2166, cat: PC/Mobile-Android, desc: "Jeu vidéo : Tablette"}
- {id: 2161, cat: PC/Games, desc: "Jeu vidéo : Windows"}
- {id: 2140, cat: Books, desc: "eBook"}
- {id: 2151, cat: Audio/Audiobook, desc: "eBook : Audio"}
- {id: 2152, cat: Books/EBook, desc: "eBook : Bds"}
- {id: 2153, cat: Books/Comics, desc: "eBook : Comics"}
- {id: 2154, cat: Books/EBook, desc: "eBook : Livres"}
- {id: 2155, cat: Books/Comics, desc: "eBook : Mangas"}
- {id: 2156, cat: Books/Mags, desc: "eBook : Presse"}
modes:
search: [q]
tv-search: [q, season, ep, tmdbid]
movie-search: [q, year, tmdbid]
music-search: [q]
book-search: [q]
allowrawsearch: true
settings:
- name: website_domain
type: text
label: YGG website domain
default: www.yggtorrent.top
- name: passkey
type: password
label: Passkey
- name: info_key
type: info
label: About your passkey
default: "You will find your passkey on the <a href=\"https://www.yggtorrent.top/user/account\" target=\"_blank\">YGG</a> account page."
- name: sort
type: select
label: Sort requested from site
default: uploaded_at
options:
uploaded_at: publish_date
seeders: seeders
downloads: downloads
- 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: strip_season
type: checkbox
label: Strip season-only (e.g. S01) from searches, as tracker does not support partial matches
default: true
- name: tracker_domain
type: select
label: Domaine du tracker à utiliser
default: tracker.p2p-world.net
options:
tracker.p2p-world.net: tracker.p2p-world.net
connect.maxp2p.org: connect.maxp2p.org
- name: info_downloads
type: info
label: About missing Downloads
default: "If the torrent has no seeder and no leecher then the torrent file may be missing and download may fail."
search:
paths:
- path: torrents
response:
type: json
inputs:
page: 1
- path: torrents
response:
type: json
inputs:
page: 2
- path: torrents
response:
type: json
inputs:
page: 3
inputs:
$raw: "{{ range .Categories }}&category_id={{.}}{{end}}"
q: "{{ .Keywords }}"
season: "{{ .Query.Season }}"
episode: "{{ .Query.Ep }}"
tmdb_id: "{{ .Query.TMDBID }}"
type: "{{ if eq .Query.Type \"tvsearch\" }}tv{{ else }}{{ end }}{{ if eq .Query.Type \"movie\" }}movie{{ else }}{{ end }}"
per_page: 100
order_by: "{{ .Config.sort }}"
# https://github.com/Prowlarr/Indexers/blob/953aa766ef67c782f5aab1b563ce180f49eb9ea5/definitions/v10/yggtorrent.yml#L277
keywordsfilters:
- name: trim
# fix date search and workaround for internal YGG issues
- name: re_replace
args: ["[\\\\\\-\\.\\/!\\s]+", " "]
# strip season-only as tracker does not support partial matches
- name: re_replace
args: ["(?i)\\b(S\\d{1,3})\\b", "{{ if .Config.strip_season }}{{ else }}$1{{ end }}"]
rows:
selector: $
missingAttributeEqualsNoResults: true
fields:
category:
selector: category_id
title_normal:
selector: title
title_multilang:
text: "{{ .Result.title_normal }}"
filters:
- name: re_replace
args: ["(?i)[\\.](MULTI(?!.*(?:FRENCH|ENGLISH|VOSTFR)))[\\.]", ".{{ .Config.multilanguage }}."]
title:
text: "{{ if .Config.multilang }}{{ .Result.title_multilang }}{{ else }}{{ .Result.title_normal }}{{ end }}"
_id:
selector: id
details:
selector: link
download:
text: "torrent/{{ .Result._id }}/download?passkey={{ .Config.passkey }}&tracker_domain={{ .Config.tracker_domain }}"
year:
selector: title
filters:
- name: regexp
args: (\b(19|20)\d{2}\b)
size:
selector: size
seeders:
selector: seeders
leechers:
selector: leechers
grabs:
selector: downloads
optional: true
default: 0
date:
# unix
selector: uploaded_at
downloadvolumefactor:
text: 1
uploadvolumefactor:
text: 1
# JSON 1.0.0
---
id: yggapi
name: YggAPI
description: Indexeur non-officiel pour YggTorrent (YGG) - MOVIES / TV
language: fr-FR
type: private
encoding: UTF-8
testlinktorrent: false
links:
- https://yggapi.eu/
caps:
categorymappings:
- {id: 2145, cat: TV, desc: "Film/Vidéo"}
- {id: 2178, cat: Movies/Other, desc: "Film/Vidéo : Animation"} # changed to movies, see #3553
- {id: 2179, cat: TV/Anime, desc: "Film/Vidéo : Animation Série"}
- {id: 2180, cat: Audio/Video, desc: "Film/Vidéo : Concert"}
- {id: 2181, cat: TV/Documentary, desc: "Film/Vidéo : Documentaire"}
- {id: 2182, cat: TV, desc: "Film/Vidéo : Emission TV"}
- {id: 2183, cat: Movies, desc: "Film/Vidéo : Film"}
- {id: 2184, cat: TV, desc: "Film/Vidéo : Série TV"}
- {id: 2185, cat: TV, desc: "Film/Vidéo : Spectacle"}
- {id: 2186, cat: TV/Sport, desc: "Film/Vidéo : Sport"}
- {id: 2187, cat: TV/Other, desc: "Film/Vidéo : Vidéo-clips"}
- {id: 2139, cat: Audio, desc: "Audio"}
- {id: 2147, cat: Audio, desc: "Audio : Karaoké"}
- {id: 2148, cat: Audio, desc: "Audio : Musique"}
- {id: 2150, cat: Audio, desc: "Audio : Podcast Radio"}
- {id: 2149, cat: Audio/Other, desc: "Audio : Samples"}
- {id: 2144, cat: PC, desc: "Application"}
- {id: 2177, cat: PC/0day, desc: "Application : Autre"}
- {id: 2176, cat: PC, desc: "Application : Formation"}
- {id: 2171, cat: PC/ISO, desc: "Application : Linux"}
- {id: 2172, cat: PC/Mac, desc: "Application : MacOS"}
- {id: 2174, cat: PC/Mobile-Android, desc: "Application : Smartphone"}
- {id: 2175, cat: PC/Mobile-Android, desc: "Application : Tablette"}
- {id: 2173, cat: PC/0day, desc: "Application : Windows"}
- {id: 2142, cat: PC/Games, desc: "Jeu vidéo"}
- {id: 2167, cat: Console/Other, desc: "Jeu vidéo : Autre"}
- {id: 2159, cat: PC/Games, desc: "Jeu vidéo : Linux"}
- {id: 2160, cat: PC/Games, desc: "Jeu vidéo : MacOS"}
- {id: 2162, cat: Console/XBox One, desc: "Jeu vidéo : Microsoft"}
- {id: 2163, cat: Console/Wii, desc: "Jeu vidéo : Nintendo"}
- {id: 2165, cat: PC/Mobile-Android, desc: "Jeu vidéo : Smartphone"}
- {id: 2164, cat: Console/PS4, desc: "Jeu vidéo : Sony"}
- {id: 2166, cat: PC/Mobile-Android, desc: "Jeu vidéo : Tablette"}
- {id: 2161, cat: PC/Games, desc: "Jeu vidéo : Windows"}
- {id: 2140, cat: Books, desc: "eBook"}
- {id: 2151, cat: Audio/Audiobook, desc: "eBook : Audio"}
- {id: 2152, cat: Books/EBook, desc: "eBook : Bds"}
- {id: 2153, cat: Books/Comics, desc: "eBook : Comics"}
- {id: 2154, cat: Books/EBook, desc: "eBook : Livres"}
- {id: 2155, cat: Books/Comics, desc: "eBook : Mangas"}
- {id: 2156, cat: Books/Mags, desc: "eBook : Presse"}
modes:
search: [q]
tv-search: [q, season, ep, tmdbid]
movie-search: [q, year, tmdbid]
music-search: [q]
book-search: [q]
allowrawsearch: true
settings:
- name: website_domain
type: text
label: YGG website domain
default: www.yggtorrent.top
- name: passkey
type: password
label: Passkey
- name: info_key
type: info
label: About your passkey
default: "You will find your passkey on the <a href=\"https://www.yggtorrent.top/user/account\" target=\"_blank\">YGG</a> account page."
- name: sort
type: select
label: Sort requested from site
default: uploaded_at
options:
uploaded_at: publish_date
seeders: seeders
downloads: downloads
- 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: strip_season
type: checkbox
label: Strip season-only (e.g. S01) from searches, as tracker does not support partial matches
default: true
- name: tracker_domain
type: select
label: Domaine du tracker à utiliser
default: tracker.p2p-world.net
options:
tracker.p2p-world.net: tracker.p2p-world.net
connect.maxp2p.org: connect.maxp2p.org
- name: info_downloads
type: info
label: About missing Downloads
default: "If the torrent has no seeder and no leecher then the torrent file may be missing and download may fail."
download:
before:
path: "torrent/{{ .DownloadUri.Query.id }}/magnet?passkey=PASSKEY_TO_BE_REPLACED_BY_REG_EX"
method: get
selectors:
- selector: body
usebeforeresponse: true
filters:
- name: regexp
args: \"magnet\"\s*:\s*"(?<magnet>magnet:[^"]+)"
- name: replace
args: ["PASSKEY_TO_BE_REPLACED_BY_REG_EX", "{{ .Config.passkey }}"]
- name: replace
args: ["tracker.p2p-world.net", "{{ .Config.tracker_domain }}"]
search:
paths:
- path: torrents
response:
type: json
inputs:
page: 1
- path: torrents
response:
type: json
inputs:
page: 2
- path: torrents
response:
type: json
inputs:
page: 3
inputs:
$raw: "{{ range .Categories }}&category_id={{.}}{{end}}"
q: "{{ .Keywords }}"
season: "{{ .Query.Season }}"
episode: "{{ .Query.Ep }}"
tmdb_id: "{{ .Query.TMDBID }}"
type: "{{ if eq .Query.Type \"tvsearch\" }}tv{{ else }}{{ end }}{{ if eq .Query.Type \"movie\" }}movie{{ else }}{{ end }}"
per_page: 100
order_by: "{{ .Config.sort }}"
# https://github.com/Prowlarr/Indexers/blob/953aa766ef67c782f5aab1b563ce180f49eb9ea5/definitions/v10/yggtorrent.yml#L277
keywordsfilters:
- name: trim
# fix date search and workaround for internal YGG issues
- name: re_replace
args: ["[\\\\\\-\\.\\/!\\s]+", " "]
# strip season-only as tracker does not support partial matches
- name: re_replace
args: ["(?i)\\b(S\\d{1,3})\\b", "{{ if .Config.strip_season }}{{ else }}$1{{ end }}"]
rows:
selector: $
missingAttributeEqualsNoResults: true
fields:
category:
selector: category_id
title_normal:
selector: title
title_multilang:
text: "{{ .Result.title_normal }}"
filters:
- name: re_replace
args: ["(?i)[\\.](MULTI(?!.*(?:FRENCH|ENGLISH|VOSTFR)))[\\.]", ".{{ .Config.multilanguage }}."]
title:
text: "{{ if .Config.multilang }}{{ .Result.title_multilang }}{{ else }}{{ .Result.title_normal }}{{ end }}"
_id:
selector: id
details:
selector: link
download:
text: "torrent?id={{ .Result._id }}"
year:
selector: title
filters:
- name: regexp
args: (\b(19|20)\d{2}\b)
size:
selector: size
seeders:
selector: seeders
leechers:
selector: leechers
grabs:
selector: downloads
optional: true
default: 0
download:
text: torrent?id={{ .Result._id }}
date:
# unix
selector: uploaded_at
downloadvolumefactor:
text: 1
uploadvolumefactor:
text: 1
# JSON 1.0.0
@DoloresOmbrage
Copy link

J'ai parlé trop vite : après seulement un téléchargement correct depuis radarr, ça re bloque sur "Downloading metadata" à 0% alors que le statut du tracker est sur "working" et que j'ai des Peers/Seeds... Après peut être qu'il vaut mieux que je fasse un post reddit ?

j'ai pas encore essayer mais ta tester le yml de idjul ? a priori il a plu de soucis depuis

@ygg-api
Copy link

ygg-api commented May 27, 2025

@Clemv95 Je crois qu'il est possible d'ajouter plusieurs fichiers sur un gist. Vu qu'il y a certaines personnes qui ne trouvent pas comment ajouter le fichier dans prowlarr ou jackett (c'est décrit dans ton premier commentaire mais pas visible par défaut), ça peut être intéressant d'ajouter un fichier .md avec l'info non ?

@Clemv95
Copy link
Author

Clemv95 commented May 28, 2025

@Clemv95 Je crois qu'il est possible d'ajouter plusieurs fichiers sur un gist. Vu qu'il y a certaines personnes qui ne trouvent pas comment ajouter le fichier dans prowlarr ou jackett (c'est décrit dans ton premier commentaire mais pas visible par défaut), ça peut être intéressant d'ajouter un fichier .md avec l'info non ?

Désolé à tous j'avais plus les notifs des messages :/

J'ai mis à jour le gist avec deux version, une version magnet, et la version download, qui est l'ancienne, j'invite tous ceux ayant des soucis avec la magnet, soit à changer de client de dl (avec deluge j'ai aucun soucis), soit passer sur la version download

@Bastien42
Copy link

@Clemv95 Je crois qu'il est possible d'ajouter plusieurs fichiers sur un gist. Vu qu'il y a certaines personnes qui ne trouvent pas comment ajouter le fichier dans prowlarr ou jackett (c'est décrit dans ton premier commentaire mais pas visible par défaut), ça peut être intéressant d'ajouter un fichier .md avec l'info non ?

Désolé à tous j'avais plus les notifs des messages :/

J'ai mis à jour le gist avec deux version, une version magnet, et la version download, qui est l'ancienne, j'invite tous ceux ayant des soucis avec la magnet, soit à changer de client de dl (avec deluge j'ai aucun soucis), soit passer sur la version download

Merci la version download fonctionne parfaitement sur les torrent qui précédemment n'arrivait pas dl les metadata depuis le magnet sur les torrent a peut de seed

@TEALC82
Copy link

TEALC82 commented May 28, 2025

@Clemv95 Je crois qu'il est possible d'ajouter plusieurs fichiers sur un gist. Vu qu'il y a certaines personnes qui ne trouvent pas comment ajouter le fichier dans prowlarr ou jackett (c'est décrit dans ton premier commentaire mais pas visible par défaut), ça peut être intéressant d'ajouter un fichier .md avec l'info non ?

Désolé à tous j'avais plus les notifs des messages :/
J'ai mis à jour le gist avec deux version, une version magnet, et la version download, qui est l'ancienne, j'invite tous ceux ayant des soucis avec la magnet, soit à changer de client de dl (avec deluge j'ai aucun soucis), soit passer sur la version download

Merci la version download fonctionne parfaitement sur les torrent qui précédemment n'arrivait pas dl les metadata depuis le magnet sur les torrent a peut de seed

Bonsoir, ce n'est pas du tout un problème de seed ! Un magnet ne contient que très peu d'infos par rapport à un .torrent. Donc si personne n'a ajouté le .torrent sur le debrideur, ton magnet ne fonctionnera jamais car il ne reconnais pas le #hash.

@Bastien42
Copy link

@Clemv95 Je crois qu'il est possible d'ajouter plusieurs fichiers sur un gist. Vu qu'il y a certaines personnes qui ne trouvent pas comment ajouter le fichier dans prowlarr ou jackett (c'est décrit dans ton premier commentaire mais pas visible par défaut), ça peut être intéressant d'ajouter un fichier .md avec l'info non ?

Désolé à tous j'avais plus les notifs des messages :/
J'ai mis à jour le gist avec deux version, une version magnet, et la version download, qui est l'ancienne, j'invite tous ceux ayant des soucis avec la magnet, soit à changer de client de dl (avec deluge j'ai aucun soucis), soit passer sur la version download

Merci la version download fonctionne parfaitement sur les torrent qui précédemment n'arrivait pas dl les metadata depuis le magnet sur les torrent a peut de seed

Bonsoir, ce n'est pas du tout un problème de seed ! Un magnet ne contient que très peu d'infos par rapport à un .torrent. Donc si personne n'a ajouté le .torrent sur le debrideur, ton magnet ne fonctionnera jamais car il ne reconnais pas le #hash.

Oh ok je prends l'info je me doutais que c'était quelque chose comme ça merci

@loonsies
Copy link

petit fichier bash pour mettre a jour automatiquement :

curl -o /mnt/user/appdata/prowlarr/Definitions/Custom/ygg-api.yml https://gist.githubusercontent.com/Clemv95/8bfded23ef23ec78f6678896f42a2b60/raw

@El-Daron
Copy link

El-Daron commented May 29, 2025

Hello,

J'ai adapté le yml pour prendre en compte le tracker à utiliser lors de la configuration :

ygg-api-download.yml :

---
id: ygg-api
name: Ygg API
description: Indexeur non officiel pour ygg.re MOVIES / TV
language: fr-FR
type: private
encoding: UTF-8
testlinktorrent: false
links:
  - https://yggapi.eu/
 
caps:
  categorymappings:
    - {id: 2178, cat: Movies/Other, desc: "Films d’animation"}
    - {id: 2183, cat: Movies, desc: "Films"}
    - {id: 2145, cat: TV, desc: "Film/Vidéo"}
    - {id: 2179, cat: TV/Anime, desc: "Séries d’animation / Mangas"}
    - {id: 2181, cat: TV/Documentary, desc: "Film/Vidéo : Documentaire"}
    - {id: 2182, cat: TV, desc: "Film/Vidéo : Emission TV"}
    - {id: 2184, cat: TV, desc: "Séries"}
    - {id: 2185, cat: TV, desc: "Film/Vidéo : Spectacle"}
    - {id: 2186, cat: TV/Sport, desc: "Film/Vidéo : Sport"}
    - {id: 2187, cat: TV/Other, desc: "Film/Vidéo : Vidéo-clips"}
    - {id: 2139, cat: Audio, desc: "Audio"}
    - {id: 2147, cat: Audio, desc: "Audio : Karaoké"}
    - {id: 2148, cat: Audio, desc: "Audio : Musique"}
    - {id: 2149, cat: Audio/Other, desc: "Audio : Samples"}
    - {id: 2150, cat: Audio, desc: "Audio : Podcast Radio"}
    - {id: 2151, cat: Audio/Audiobook, desc: "eBook : Audio"}
    - {id: 2180, cat: Audio/Video, desc: "Film/Vidéo : Concert"}
    - {id: 2140, cat: Books, desc: "eBook"}
    - {id: 2152, cat: Books/EBook, desc: "eBook : Bds"}
    - {id: 2153, cat: Books/Comics, desc: "eBook : Comics"}
    - {id: 2154, cat: Books/EBook, desc: "eBook : Livres"}
    - {id: 2155, cat: Books/Comics, desc: "eBook : Mangas"}
    - {id: 2156, cat: Books/Mags, desc: "eBook : Presse"}
 
  modes:
    search: [q]
    tv-search: [q, season, ep]
    movie-search: [q, year]
  allowrawsearch: true
 
settings:
  - name: passkey
    type: password
    label: Passkey
  - name: info_key
    type: info
    label: About your passkey
    default: "You will find your passkey on the <a href=\"https://www.ygg.re/user/account\" target=\"_blank\">YGG</a> account page."
  - name: sort
    type: select
    label: Sort requested from site
    default: uploaded_at
    options:
      uploaded_at: publish_date
      seeders: seeders
      downloads: downloads
  - 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: tracker_domain
    type: select
    label: Domaine du tracker à utiliser
    default: tracker.p2p-world.net
    options:
      tracker.p2p-world.net: tracker.p2p-world.net
      connect.maxp2p.org: connect.maxp2p.org
  - name: info_downloads
    type: info
    label: About missing Downloads
    default: "If the torrent has no seeder and no leecher then the torrent file may be missing and download may fail."
 
search:
  paths:
    - path: torrents
      response:
        type: json
  inputs:
    $raw: "{{ range .Categories }}&category_id={{.}}{{end}}"
    q: "{{ .Keywords }}"
    page: 1
    per_page: 100
    order_by: "{{ .Config.sort }}"
 
  rows:
    selector: $
    missingAttributeEqualsNoResults: true
 
  fields:
    category:
      selector: category_id
    title_normal:
      selector: title
    title_multilang:
      text: "{{ .Result.title_normal }}"
      filters:
        - name: re_replace
          args: ["(?i)[\\.](MULTI(?!.*(?:FRENCH|ENGLISH|VOSTFR)))[\\.]", ".{{ .Config.multilanguage }}."]
    title:
      text: "{{ if .Config.multilang }}{{ .Result.title_multilang }}{{ else }}{{ .Result.title_normal }}{{ end }}"
    _id:
      selector: id
    details:
      text: "torrent/{{ .Result._id }}"
    download:
      text: "torrent/{{ .Result._id }}/download?passkey={{ .Config.passkey }}&tracker_domain={{ .Config.tracker_domain }}"
    year:
      selector: title
      filters:
        - name: regexp
          args: (\b(19|20)\d{2}\b)
    size:
      selector: size
    seeders:
      selector: seeders
    leechers:
      selector: leechers
    grabs:
      selector: downloads
      optional: true
      default: 0
    date:
      # unix
      selector: uploaded_at
    downloadvolumefactor:
      text: 1
    uploadvolumefactor:
      text: 1
# JSON 1.0.0

@Clemv95
Copy link
Author

Clemv95 commented May 29, 2025

Hello,

J'ai adapté le yml pour prendre en compte le tracker à utiliser lors de la configuration :

ygg-api-download.yml :

---
id: ygg-api
name: Ygg API
description: Indexeur non officiel pour ygg.re MOVIES / TV
language: fr-FR
type: private
encoding: UTF-8
testlinktorrent: false
links:
  - https://yggapi.eu/
 
caps:
  categorymappings:
    - {id: 2178, cat: Movies/Other, desc: "Films d’animation"}
    - {id: 2183, cat: Movies, desc: "Films"}
    - {id: 2145, cat: TV, desc: "Film/Vidéo"}
    - {id: 2179, cat: TV/Anime, desc: "Séries d’animation / Mangas"}
    - {id: 2181, cat: TV/Documentary, desc: "Film/Vidéo : Documentaire"}
    - {id: 2182, cat: TV, desc: "Film/Vidéo : Emission TV"}
    - {id: 2184, cat: TV, desc: "Séries"}
    - {id: 2185, cat: TV, desc: "Film/Vidéo : Spectacle"}
    - {id: 2186, cat: TV/Sport, desc: "Film/Vidéo : Sport"}
    - {id: 2187, cat: TV/Other, desc: "Film/Vidéo : Vidéo-clips"}
    - {id: 2139, cat: Audio, desc: "Audio"}
    - {id: 2147, cat: Audio, desc: "Audio : Karaoké"}
    - {id: 2148, cat: Audio, desc: "Audio : Musique"}
    - {id: 2149, cat: Audio/Other, desc: "Audio : Samples"}
    - {id: 2150, cat: Audio, desc: "Audio : Podcast Radio"}
    - {id: 2151, cat: Audio/Audiobook, desc: "eBook : Audio"}
    - {id: 2180, cat: Audio/Video, desc: "Film/Vidéo : Concert"}
    - {id: 2140, cat: Books, desc: "eBook"}
    - {id: 2152, cat: Books/EBook, desc: "eBook : Bds"}
    - {id: 2153, cat: Books/Comics, desc: "eBook : Comics"}
    - {id: 2154, cat: Books/EBook, desc: "eBook : Livres"}
    - {id: 2155, cat: Books/Comics, desc: "eBook : Mangas"}
    - {id: 2156, cat: Books/Mags, desc: "eBook : Presse"}
 
  modes:
    search: [q]
    tv-search: [q, season, ep]
    movie-search: [q, year]
  allowrawsearch: true
 
settings:
  - name: passkey
    type: password
    label: Passkey
  - name: info_key
    type: info
    label: About your passkey
    default: "You will find your passkey on the <a href=\"https://www.ygg.re/user/account\" target=\"_blank\">YGG</a> account page."
  - name: sort
    type: select
    label: Sort requested from site
    default: uploaded_at
    options:
      uploaded_at: publish_date
      seeders: seeders
      downloads: downloads
  - 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: tracker_domain
    type: select
    label: Domaine du tracker à utiliser
    default: tracker.p2p-world.net
    options:
      tracker.p2p-world.net: tracker.p2p-world.net
      connect.maxp2p.org: connect.maxp2p.org
  - name: info_downloads
    type: info
    label: About missing Downloads
    default: "If the torrent has no seeder and no leecher then the torrent file may be missing and download may fail."
 
search:
  paths:
    - path: torrents
      response:
        type: json
  inputs:
    $raw: "{{ range .Categories }}&category_id={{.}}{{end}}"
    q: "{{ .Keywords }}"
    page: 1
    per_page: 100
    order_by: "{{ .Config.sort }}"
 
  rows:
    selector: $
    missingAttributeEqualsNoResults: true
 
  fields:
    category:
      selector: category_id
    title_normal:
      selector: title
    title_multilang:
      text: "{{ .Result.title_normal }}"
      filters:
        - name: re_replace
          args: ["(?i)[\\.](MULTI(?!.*(?:FRENCH|ENGLISH|VOSTFR)))[\\.]", ".{{ .Config.multilanguage }}."]
    title:
      text: "{{ if .Config.multilang }}{{ .Result.title_multilang }}{{ else }}{{ .Result.title_normal }}{{ end }}"
    _id:
      selector: id
    details:
      text: "torrent/{{ .Result._id }}"
    download:
      text: "torrent/{{ .Result._id }}/download?passkey={{ .Config.passkey }}&tracker_domain={{ .Config.tracker_domain }}"
    year:
      selector: title
      filters:
        - name: regexp
          args: (\b(19|20)\d{2}\b)
    size:
      selector: size
    seeders:
      selector: seeders
    leechers:
      selector: leechers
    grabs:
      selector: downloads
      optional: true
      default: 0
    date:
      # unix
      selector: uploaded_at
    downloadvolumefactor:
      text: 1
    uploadvolumefactor:
      text: 1
# JSON 1.0.0

Merci pour la contribution, je vais update le gist

@Okiod
Copy link

Okiod commented Jun 3, 2025

Bonjour, je ne sais pas si je suis le seul à avoir le problème, mais depuis le crash de ygg hier, ygg-api ne fonctionne plus sur sonarr au niveau des catégorie
Dans Jackett j'ai dans les logs

2025-06-03 09:20:35 | Warn | Some of the categories provided are unsupported in Ygg API: 2010,2030,2040,2045,2050,2060

Et sur radarr
image
et quand je clique sur la liste des catégories c'est vide.
Vous avez une idée ?

@ygg-api
Copy link

ygg-api commented Jun 6, 2025

Bonjour
Il doit y avoir un souci quelque part car il y a des catégories qui n'existent pas dans celles listées (2010, 2020 et 2030) :-)

@HanaO00
Copy link

HanaO00 commented Jun 9, 2025

Bonjour, pensez à enlever le slash à la fin de la ligne 10, je n'ai pas pu rajouter le lien avec

Peut-être également enlever connect.maxp2p.org: connect.maxp2p.org ?

@El-Daron
Copy link

Peut-être également enlever connect.maxp2p.org: connect.maxp2p.org ?

Pourquoi ?

@HanaO00
Copy link

HanaO00 commented Jun 11, 2025

Pourquoi ?

C'est tracker.p2p-world.net qui est utilisé par défaut sur les nouveaux torrents

@El-Daron
Copy link

Pourquoi ?

C'est tracker.p2p-world.net qui est utilisé par défaut sur les nouveaux torrents

Cette fonctionnalité te permet de choisir quel tracker utiliser lors du téléchargement du torrent.

@wiwi95971
Copy link

Bonjour, je ne sais pas si je suis le seul à avoir le problème, mais depuis le crash de ygg hier, ygg-api ne fonctionne plus sur sonarr au niveau des catégorie Dans Jackett j'ai dans les logs

2025-06-03 09:20:35 | Warn | Some of the categories provided are unsupported in Ygg API: 2010,2030,2040,2045,2050,2060

Et sur radarr image et quand je clique sur la liste des catégories c'est vide. Vous avez une idée ?

j'ai pas exactement la même erreur que toi mais effectivement depuis hier YGG-API ne fonctionne plus sur Jackett :

System.Exception: Unknown indexer: ygg-api

[v0.22.1967.0] System.Exception: Unknown indexer: ygg-api
at Jackett.Common.Services.IndexerManagerService.GetWebIndexer(String name) in ./Jackett.Common/Services/IndexerManagerService.cs:line 306
at Jackett.Common.Services.IndexerManagerService.GetIndexer(String name) in ./Jackett.Common/Services/IndexerManagerService.cs:line 279
at Jackett.Server.Controllers.RequiresConfiguredIndexer.OnActionExecuting(ActionExecutingContext context) in ./Jackett.Server/Controllers/ResultsController.cs:line 85
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeNextActionFilterAsync()
--- End of stack trace from previous location ---
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeInnerFilterAsync()
--- End of stack trace from previous location ---
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|20_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)
at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
at Jackett.Server.Middleware.CustomExceptionHandler.Invoke(HttpContext httpContext) in ./Jackett.Server/Middleware/CustomExceptionHandler.cs:line 26

@Clemv95
Copy link
Author

Clemv95 commented Jun 16, 2025

Bonjour, je ne sais pas si je suis le seul à avoir le problème, mais depuis le crash de ygg hier, ygg-api ne fonctionne plus sur sonarr au niveau des catégorie Dans Jackett j'ai dans les logs
2025-06-03 09:20:35 | Warn | Some of the categories provided are unsupported in Ygg API: 2010,2030,2040,2045,2050,2060
Et sur radarr image et quand je clique sur la liste des catégories c'est vide. Vous avez une idée ?

j'ai pas exactement la même erreur que toi mais effectivement depuis hier YGG-API ne fonctionne plus sur Jackett :

System.Exception: Unknown indexer: ygg-api

[v0.22.1967.0] System.Exception: Unknown indexer: ygg-api at Jackett.Common.Services.IndexerManagerService.GetWebIndexer(String name) in ./Jackett.Common/Services/IndexerManagerService.cs:line 306 at Jackett.Common.Services.IndexerManagerService.GetIndexer(String name) in ./Jackett.Common/Services/IndexerManagerService.cs:line 279 at Jackett.Server.Controllers.RequiresConfiguredIndexer.OnActionExecuting(ActionExecutingContext context) in ./Jackett.Server/Controllers/ResultsController.cs:line 85 at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeNextActionFilterAsync() --- End of stack trace from previous location --- at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeInnerFilterAsync() --- End of stack trace from previous location --- at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|20_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope) at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context) at Jackett.Server.Middleware.CustomExceptionHandler.Invoke(HttpContext httpContext) in ./Jackett.Server/Middleware/CustomExceptionHandler.cs:line 26

Le fichier est toujours bien monté dans un volume ?

@tifo71
Copy link

tifo71 commented Jun 17, 2025

Perso ça fonctionne nickel. Rien a modifier.

@wiwi95971
Copy link

Bonjour, je ne sais pas si je suis le seul à avoir le problème, mais depuis le crash de ygg hier, ygg-api ne fonctionne plus sur sonarr au niveau des catégorie Dans Jackett j'ai dans les logs
2025-06-03 09:20:35 | Warn | Some of the categories provided are unsupported in Ygg API: 2010,2030,2040,2045,2050,2060
Et sur radarr image et quand je clique sur la liste des catégories c'est vide. Vous avez une idée ?

j'ai pas exactement la même erreur que toi mais effectivement depuis hier YGG-API ne fonctionne plus sur Jackett :
System.Exception: Unknown indexer: ygg-api
[v0.22.1967.0] System.Exception: Unknown indexer: ygg-api at Jackett.Common.Services.IndexerManagerService.GetWebIndexer(String name) in ./Jackett.Common/Services/IndexerManagerService.cs:line 306 at Jackett.Common.Services.IndexerManagerService.GetIndexer(String name) in ./Jackett.Common/Services/IndexerManagerService.cs:line 279 at Jackett.Server.Controllers.RequiresConfiguredIndexer.OnActionExecuting(ActionExecutingContext context) in ./Jackett.Server/Controllers/ResultsController.cs:line 85 at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeNextActionFilterAsync() --- End of stack trace from previous location --- at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeInnerFilterAsync() --- End of stack trace from previous location --- at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|20_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope) at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context) at Jackett.Server.Middleware.CustomExceptionHandler.Invoke(HttpContext httpContext) in ./Jackett.Server/Middleware/CustomExceptionHandler.cs:line 26

Le fichier est toujours bien monté dans un volume ?

Oui il est toujours au même endroit mais Jackett ne me le propose plus

@HanaO00
Copy link

HanaO00 commented Jun 19, 2025

C'est normal qu'un WEB-DL 4K soit dans la catégorie HDTV 2160p ? Ou c'est un problème de prowlarr

Screenshot-2025-06-19_11-40-43
Screenshot-2025-06-19_11-41-05

@tifo71
Copy link

tifo71 commented Jun 19, 2025

j'ai tester sur moi j'ai prowlarr aussi et aucun soucis categorie movie. Bizarre que tu ai ça toi

@HanaO00
Copy link

HanaO00 commented Jun 19, 2025

Ça doit être mon instance qui déconne même le yml ne voulait pas se rajouter, je vais essayer de repartir de zéro

@tifo71
Copy link

tifo71 commented Jun 19, 2025

il faut bien mettre le fichier download pas magnet.yml donc dans le dossier appdata/prowlarr/definitions tu crée un dossier custom et tu le met dedans.

@thenamelessthing
Copy link

avec ygg-download.

Je ne suis pas en mesure de télécharger quoi que ce soit. Des idées?

Downloading for release failed (https://yggapi.eu/torrent/1197863/download?passkey=(removed)&tracker_domain=tracker.p2p-world.net): HTTP request failed: [422:UnprocessableEntity] [GET] at [https://yggapi.eu/torrent/1197863/download?passkey=(removed)&tracker_domain=tracker.p2p-world.net]

NzbDrone.Common.Http.HttpException: HTTP request failed: [422:UnprocessableEntity] [GET] at [https://yggapi.eu/torrent/1197863/download?passkey=(removed)&tracker_domain=tracker.p2p-world.net]
   at NzbDrone.Common.Http.HttpClient.ExecuteAsync(HttpRequest request) in ./Prowlarr.Common/Http/HttpClient.cs:line 128
   at NzbDrone.Core.Indexers.IndexerHttpClient.ExecuteProxiedAsync(HttpRequest request, ProviderDefinition definition) in ./Prowlarr.Core/Indexers/IndexerHttpClient.cs:line 43
   at NzbDrone.Core.Indexers.HttpIndexerBase`1.Download(Uri link) in ./Prowlarr.Core/Indexers/HttpIndexerBase.cs:line 251
{"detail":[{"type":"string_too_long","loc":["query","passkey"],"msg":"String should have at most 32 characters","input":"AelA9088BIGeo3Ivo9ZyaUVZsEbfS20j ","ctx":{"max_length":32}}]}

@tifo71
Copy link

tifo71 commented Jun 24, 2025

Tu as bien mis le fichier au bon endroit et ajouter l'indexeur YGGAPI ?

@tifo71
Copy link

tifo71 commented Jun 24, 2025

oui il faut juste mettre le fichier download yml pas le magnet

@tifo71
Copy link

tifo71 commented Jun 25, 2025

perso y a rien a touché. Moi j'ai dl le fichier, je l'ai mis dans le repertoire Appdata/prowlar/definitions/Custom. Et ajouter l'indexeur YGGAPI et c'est tout. et ça fonctionne parfaitement bien.

@Laiteux
Copy link

Laiteux commented Jun 30, 2025

Version améliorée: https://haste.laiteux.dev/gyenbr

changelog:

  • cleanup lightly
  • update ygg url
  • fix date search and workaround for internal YGG issues:
  • put each word in quotations to prevent exact phrase search
  • strip season-only as tracker does not support partial matches (allows searching for episodes / non season packs)
  • search up to 10 pages

(diff: https://diffchecker.com/bD0LoKX7)

@tifo71
Copy link

tifo71 commented Jun 30, 2025

nickel merci beaucoup

@romaiinb
Copy link

romaiinb commented Jul 5, 2025

@Laiteux
Version améliorée: https://haste.laiteux.dev/gyenbr

Merci pour le partage, ca fonctionne très bien!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment