-
Star
(124)
You must be signed in to star a gist -
Fork
(9)
You must be signed in to fork a gist
-
-
Save Clemv95/8bfded23ef23ec78f6678896f42a2b60 to your computer and use it in GitHub Desktop.
Indexeur ygg-api pour jackett / prowlarr
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| --- | |
| 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 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| --- | |
| 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 |
J'ai finalement réussis de mon coté avec mon NAS Synology, voici la procédure et le script qui télécharge les .yml automatiquement avec IDs différents si besoin, et redémarre prowlarr ou télécharge les fichiers seulement s'ils ont changés.
Installation automatique sur Synology NAS
Contexte : Prowlarr en Docker, utilisateur
dockerlimited(exemple : UID 1000, GID 65000)1. Préparation (si nécessaire- via SSH ou autre)
sudo rm -rf /volume1/docker/prowlarr/Definitions/Custom* sudo mkdir -p /volume1/docker/prowlarr/Definitions/Custom sudo chown 1027:65536 /volume1/docker/prowlarr/Definitions/Custom sudo chmod 755 /volume1/docker/prowlarr/Definitions/Custom2. Tâche planifiée DSM
Panneau de configuration → Planificateur → Créer → Script défini par l'utilisateur
- Utilisateur :
root- Planification : Quotidien
Script :
#!/bin/bash GIST_ID="8bfded23ef23ec78f6678896f42a2b60" DEFINITIONS_DIR="/volume1/docker/prowlarr/Definitions/Custom" PUID=1000 PGID=65000 echo "=== Vérification YGG-API ===" lastCommit=$(curl -s "https://api.github.com/gists/$GIST_ID/commits" | jq -r '.[0].committed_at') echo "Dernier commit: $lastCommit" files=$(curl -s "https://api.github.com/gists/$GIST_ID" | jq -r '.files | keys[] | select(endswith(".yml"))') NEED_RESTART=false for file in $files; do filepath="$DEFINITIONS_DIR/$file" filebase="${file%.yml}" variant=$(echo "$filebase" | sed 's/ygg-api-//' | sed 's/.*/\u&/') if [ -f "$filepath" ]; then lastWrite=$(date -r "$filepath" +"%Y-%m-%dT%H:%M:%SZ" -u) if [[ "$lastCommit" > "$lastWrite" ]]; then echo "$file - Mise à jour" wget -qO "$filepath.tmp" "https://gist.githubusercontent.com/Clemv95/$GIST_ID/raw/$file" sed -i "s/^id: yggapi$/id: $filebase/" "$filepath.tmp" sed -i "s/^name: YggAPI$/name: YggAPI $variant/" "$filepath.tmp" mv "$filepath.tmp" "$filepath" chown "$PUID:$PGID" "$filepath" chmod 644 "$filepath" NEED_RESTART=true else echo "$file - Déjà à jour" fi else echo "$file - Nouveau fichier" wget -qO "$filepath.tmp" "https://gist.githubusercontent.com/Clemv95/$GIST_ID/raw/$file" sed -i "s/^id: yggapi$/id: $filebase/" "$filepath.tmp" sed -i "s/^name: YggAPI$/name: YggAPI $variant/" "$filepath.tmp" mv "$filepath.tmp" "$filepath" chown "$PUID:$PGID" "$filepath" chmod 644 "$filepath" NEED_RESTART=true fi done if [ "$NEED_RESTART" = true ]; then docker restart prowlarr echo "Prowlarr redémarré" fiLogs :
=== Vérification YGG-API === Dernier commit: 2025-11-02T16:04:40Z ygg-api-download.yml - Nouveau fichier ygg-api-magnet.yml - Nouveau fichier prowlarr Prowlarr redémarré=== Vérification YGG-API === Dernier commit: 2025-11-02T16:04:40Z ygg-api-download.yml - Déjà à jour ygg-api-magnet.yml - Déjà à jour**Avantages :**
- ✅ Détecte automatiquement tous les fichiers .yml du gist
- ✅ Renomme les IDs/noms pour éviter les doublons dans Prowlarr (
ygg-api-download/ygg-api-magnet)- ✅ Ne redémarre que si changements détectés
- ✅ Future-proof (nouveaux fichiers = auto-détectés)
PS : Je confirme certains commentaires sur les configurations de définitions actuelles, les documentaires ne fonctionne (poutant c'est bien le bon ID de catégorie).
Incroyable.
Une idée de comment avoir un système similaire sur Unraid ?
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment

J'ai finalement réussis de mon coté avec mon NAS Synology, voici la procédure et le script qui télécharge les .yml automatiquement avec IDs différents si besoin, et redémarre prowlarr ou télécharge les fichiers seulement s'ils ont changés.
Installation automatique sur Synology NAS
Contexte : Prowlarr en Docker, utilisateur
dockerlimited(exemple : UID 1000, GID 65000)1. Préparation (si nécessaire- via SSH ou autre)
sudo rm -rf /volume1/docker/prowlarr/Definitions/Custom* sudo mkdir -p /volume1/docker/prowlarr/Definitions/Custom sudo chown 1027:65536 /volume1/docker/prowlarr/Definitions/Custom sudo chmod 755 /volume1/docker/prowlarr/Definitions/Custom2. Tâche planifiée DSM
Panneau de configuration → Planificateur → Créer → Script défini par l'utilisateur
rootScript :
Logs :
Avantages :
ygg-api-download/ygg-api-magnet)PS : Je confirme certains commentaires sur les configurations de définitions actuelles, les documentaires ne fonctionne (poutant c'est bien le bon ID de catégorie).