Skip to content

Instantly share code, notes, and snippets.

@Clemv95
Forked from LimeDrive/ygg-api.yml
Last active May 29, 2025 20:36
Show Gist options
  • Save Clemv95/8bfded23ef23ec78f6678896f42a2b60 to your computer and use it in GitHub Desktop.
Save Clemv95/8bfded23ef23ec78f6678896f42a2b60 to your computer and use it in GitHub Desktop.
Indexeur ygg-api pour jackett / prowlarr
---
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
---
id: ygg-api
name: Ygg API
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: 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]
music-search: [q]
book-search: [q]
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.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
- 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: 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 }}"]
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 }}"
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
@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

@idjul
Copy link

idjul 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

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