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
@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