{"id":19694733,"url":"https://github.com/simulot/aspiratv","last_synced_at":"2025-04-29T10:31:07.878Z","repository":{"id":53606151,"uuid":"144373437","full_name":"simulot/aspiratv","owner":"simulot","description":"Surveille la télévision de rattrapage et télécharge les émissions qui vous intéressent, compatible avec Kodi, Plex et Emby","archived":false,"fork":false,"pushed_at":"2023-02-25T02:28:16.000Z","size":106019,"stargazers_count":21,"open_issues_count":7,"forks_count":8,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-04-24T19:52:00.343Z","etag":null,"topics":["artetv","emby","francetv","golang","gulli","kodi","plex","replay"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/simulot.png","metadata":{"files":{"readme":"README.md","changelog":"changelog.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-08-11T09:42:42.000Z","updated_at":"2024-05-29T10:36:30.000Z","dependencies_parsed_at":"2024-06-19T00:23:34.836Z","dependency_job_id":"3888abe9-b2bb-454f-b89a-eb23a6ec806c","html_url":"https://github.com/simulot/aspiratv","commit_stats":null,"previous_names":[],"tags_count":38,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simulot%2Faspiratv","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simulot%2Faspiratv/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simulot%2Faspiratv/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/simulot%2Faspiratv/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/simulot","download_url":"https://codeload.github.com/simulot/aspiratv/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251483708,"owners_count":21596584,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["artetv","emby","francetv","golang","gulli","kodi","plex","replay"],"created_at":"2024-11-11T19:24:20.195Z","updated_at":"2025-04-29T10:31:04.678Z","avatar_url":"https://github.com/simulot.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Go Reference](https://pkg.go.dev/badge/github.com/simulot/aspiratv.svg)](https://pkg.go.dev/github.com/simulot/aspiratv)\n# aspiratv\n\nCe programme interroge les serveurs de télévision de rattrapage et télécharge les émissions souhaitées et les enregistre sur un disque selon une organisation reconnue par des programmes comme [PLEX](https://www.plex.tv/) ou [EMBY](https://emby.media/). Les métadonnées (titre des émissions, desciption, vignettes) sont placées de façon à être directement reconnues par Emby (à tester dans Plex).\n\n⚠️ La ligne de commande change avec la version 0.16\n\n\n## Télécharger un programme, une série\n\n``` sh\n./aspiratv  download --provider francetv --show-path {$HOME}/Videos/DL/ \"La minute vieille\"\n```\n\n## Télécharger les dernières diffusions à partir d'une liste\n\n``` sh\n./aspiratv\n```\nCette commande vérifie les serveurs et télécharge les épisodes qui ne le sont pas encore.\n\n\n## :warning: Avertissement :warning: \nLes contenus mis à disposition par les diffuseurs sont soumis aux droits d'auteur. Ne les utilisez pas en dehors du cadre privé.\n\nAspiratv ne fait que garder une copie de l’œuvre sur votre disque dur, comme vous l'auriez fait avec votre enregistreur vidéo, votre box TV ou une clé USB branchée sur votre TV. Cette opération est seulement rendue plus simple qu'en gérant manuellement les enregistrements.\n\nLe fonctionnement de ce programme n'est pas garanti. Notamment, les fournisseurs de contenus sont susceptibles de changer leurs APIs ou interdire leur utilisation sans pré-avis. \n\n## Rendu dans Emby\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"_images/Screenshot_2019-10-14 Emby-Saison.png\" width=\"800\" alt=\"Saison Emby\" /\u003e\n\u003c/p\u003e\n\n\n# Installation\n\n## Prérequis\n\n- FFMPEG: ffmpeg est utilisé pour convertir le flux vidéo en fichiers mp4. l'exécutable doit être disponible dans votre système. Page de téléchargement pour Windows: [https://ffmpeg.zeranoe.com/builds/](https://ffmpeg.zeranoe.com/builds/)\n\n## Installation des binaires\nLes binaires pour Windows, Linux et FreeBSD sont directement disponibles sur la page [releases](https://github.com/simulot/aspiratv/releases/latest). Les binaires n'ont pas de dépendance autre que FFMPEG et n'ont pas besoin d'être installés.\n\n### linux\n- Télécharger les binaires correspondant à votre système sur la page de la dernière release de le répertoire de votre choix.\n- Puis décompresser l'archive\n```\ntar -czvf aspiratv_0.15.0_Linux_x86_64.tar.gz\n```\n\n\n# Ligne de commande\n\n```\nUsage of ./aspiratv:\n\nCommand run: download new shows listed into configuration file in the watchlist\n\naspiratv  run [ options... ]\naspiratv  [ options... ]\n\n  example:   aspiratv run --log aspiratv.log\n\n  options:\n      --config string      Configuration file name. (default \"config.json\")\n      --headless           Headless mode. Progression bars are not displayed.\n      --log string         Give the log file name.\n  -l, --log-level string   Log level (INFO,TRACE,ERROR,DEBUG) (default \"ERROR\")\n  -m, --max-tasks int      Maximum concurrent downloads at a time. (default 12)\n\nCommand download: download show with given options\n\naspiratv  download --provider PROVIDER --show-path PATH [ options... ] \"show name\"\n\n  example:   aspiratv  download --provider francetv --show-path {$HOME}/Videos/Animes/  \"lapins crétins\"\n\n  options:\n      --force                           Force media download even when present on the show-path.\n      --headless                        Headless mode. Progression bars are not displayed.\n  -b, --keep-bonuses                    Download bonuses when true\n      --log string                      Give the log file name.\n  -l, --log-level string                Log level (INFO,TRACE,ERROR,DEBUG) (default \"ERROR\")\n  -a, --max-aged int                    Retrieve media younger than MaxAgedDays.\n  -m, --max-tasks int                   Maximum concurrent downloads at a time. (default 12)\n      --name-template name-template     Show name file template\n  -p, --provider string                 Provider to be used with download command. Possible values : artetv, francetv, gulli (mandatory).\n      --retention int                   Delete media older than retention days for the downloaded show.\n      --season-template name-template   Season directory template\n  -s, --show-path string                Show's path (mandatory).\n  -e, --title-exclude regexp-filter     Showtitle and Episode title must not satisfy regexp filter\n  -f, --title-filter regexp-filter      Showtitle or Episode title must satisfy regexp filter\n ``` \n\nLe programme fonctionne selon deux modilités :\n## Pour surveiller la mise à disposition de nouveaux épisodes d'une émission\n``` sh\n./aspiratv run\n```\n\nDans ce mode, le fichiers de configuration `config.json` placé dans le même répertoire que le programe est lu pour pour interroger les différents serveur. Pour interroger automatiquement les serveur, ajouter une ligne dans crontab, ou une tâche planifiée dans windows.\n\n### --config votreconfig.json\n\nL'option `--config` indique le fichier de configuration à utiliser.\n\n## Pour télécharger une émission, ou une série\n```sh\naspiratv  download --provider francetv --show-path {$HOME}/Videos/Animes/  \"Les Dalton\"\n```\nCette commande cherchera les épisodes de la série \"Les Dalton\" sur france télévisions, et les téléchargera dans le répertoire ~/Video/DL\n\nLes paramètres `--provider` et  `--show-path` sont obligatoires\n\n### --provider (obligatoire)\n\nCe paramètre précise quel fournisseur de contenu sera intérrogé pour la recherche. Les valeurs possibles sont :\n- francetv\n- artetv\n- guilli\n\n### --show-path (obligatoire)\nCette option force le chemin dans lequel la saison ou le film sera téléchargé. \n\nExemple, les épisodes seront téléchargés dans le répertoire `~/Videos/MaisonF5/Season ...`\n```sh\n./aspiratv --provider=francetv --show-path = ~/Videos/MaisonF5 download \"La maison France 5\"\n```\n\n### --title-filter\nUtiliser l'option `--title-filter` pour télécharger un épisode précis. Le filtre est une expression régulière GO. Voir la syntaxe précise (https://golang.org/pkg/regexp/syntax/). Le site (https://regex101.com/) permet de construire et tester les expressons régulières. \n\n\nPar exemple, pour télécharger les émissions spéciales de \"La maison France 5\"\n\n```sh\n./aspiratv download --provider=francetv --show-path=$HOME/Videos/DL/Replay --title-filter \"spéciale\" \"La maison France 5\"\n```\n\n### --title-exclude\nUtiliser l'option `--title-exclude` pour exclure du téléchargement certains épisodes. Le filtre est une expression régulière GO. \n\n\nPour télécharger tous les épisodes de \"La Maison France 5\" sauf les émissions spéciales\n```sh\n./aspiratv download --provider=francetv --show-path=$HOME/Videos/DL/Replay  --title-exclude \"spéciale\" \"La maison France 5\"\n``` \nLa combinaison des deux filtres est possible.\n\n### --destination (SUPPRIMÉE)\n\nCette option est remplacée par `--show-path`\n\n### --name-template\n\nCette option permet de constituer le nom du fichier .mp4 selon vos besoins. Le système de template est système de la librairie standard. [Voir la documentation de la libraie.](https://pkg.go.dev/text/template)\n\nIl est possible d'utiliser les champs suivants:\n| Champ | Description |\n|-|-\n|    .Title          | Titre de l'épisode\n|    .Showtitle      | Nom de la série, de l'émission\n|    .Season         | Numéro de saison ou année de diffusion\n|    .Episode        | Episode\n|    .UniqueID       | Identifion de l'émission chez le diffuseur (voir exemple)\n|    .Aired          | Date de diffusion (voir exemple)\n\n\n#### Modèle par défaut pour les séries:\n`{{.Showtitle}} - s{{.Season | printf \"%02d\" }}e{{.Episode | printf \"%02d\" }} - {{.Title}}.mp4`\n\nExemples : \n\u003e Les Dalton - s03e03 - A l'intérieur de Rantanplan.mp4 \n\n\u003e Doctor Who - s12e01 - La chute des espions  partie 1.mp4 \n#### Modèle par défaut pour les émissions régulières:\n`{{.Showtitle}} - {{.Aired.Time.Format \"2006-01-02\"}}.mp4`\n\nExemple:\n\n\u003e Tout le monde a son mot à dire - 2021-02-10.mp4\n\n\u003e 28 minutes - 2021-02-11.mp4\n#### Autres Exemples\n\nPlusieurs émissions peuvent être diffusées le même jour, à la même date et avec le même titre. Sans précaution, le fichier de la deuxième diffusion écrase le premier. Pour garder toutes les diffusions, on peut rajouter l'identifiant unique donné par le diffuseur: \n\n`{{ .Showtitle}} - {{ .Aired.Time.Format \\\"2006-01-02\\\" }} - {{(index .UniqueID 0).ID}}.mp4`\n\n\u003eTout le monde a son mot à dire - 2021-02-10 - 2235183.nfo\n\n### --season-template\nIl est possible d'adapter le nom du répertoire correspondant à la saison. Les mêmes champs sont possibles. \n\n#### Modèle par défaut pour les séries:\n`{{if not .IsBonus}}Season {{.Season | printf \"%02d\" }}{{else}}Specials{{end}}`\n\nExemple: \n\u003e Season 03\n\n\u003e Speicals\n\n#### Modèle par défaut pour les émissions régulières:\n`{{if not .IsBonus}}Season {{.Aired.Time.Year | printf \"%04d\" }}{{else}}Specials{{end}}`\n\nExemple:\n\u003e Season 2021\n\n\u003e Specials\n\n## Les options communes aux deux modes :\n\n### --headless\n\nL option `--headless` désactive les barres de progressions et produit une log sur la console.\n\n### --max-tasks NUM\nPrécise le nombre maximal de téléchargements simultanés possible. La valeur par défaut est le nombre de processeurs de la machine.\n\n### --log-level, -l\nIndique le niveau de détail du fichier de log. Les options possibles sont:\n* INFO \n* TRACE  \n* DEBUG\n\n\n### --log LOG_FILE\n\nL'option `--log` indique le fichier dans lequel les messages d'erreur sont écrits. \n\n### --force\nTélécharge toutes les émissions correspondant à la liste de recherche, même si elles ont été déjà téléchargées.\n\n\n### --keep-bonuses\nTélécharge les vidéos associées au show demandé.\n\n### --max-aged DAYS\nNe télécharge que les émissions qui ont été diffusées moins de DAYS jours. Cette option est utile quand vous téléchargez une émission quotidienne par exemple.\n\n\n# Configuration\n\n## fichier **config.json**\n\nLe fichier config.json contient les paramètres et la liste des émissions que l'on souhaite télécharger :\n\n``` json\n{\n  \"Destinations\": {\n    \"Documentaires\": \"${HOME}/Videos/Documentaires\",\n    \"Jeunesse\": \"${HOME}/Videos/Jeunesse\",\n    \"Séries\": \"${HOME}/Videos/Series\",\n    \"News\": \"${HOME}/Videos/News\"\n  },\n  \"Providers\": {\n    \"artetv\": {\n      \"Enabled\": false        \n    },\n    \"gulli\":{\n      \"Enabled\": true\n    },\n    \"francetv\":{\n        \"Enabled\": true\n    }\n  },\n  \"WatchList\": [\n    {\n      \"Show\": \"Doctor Who\", \n      \"Provider\": \"francetv\",\n      \"Destination\": \"Séries\"\n    },\n    {\n      \"Show\": \"Oggy et les cafards\",\n      \"Provider\": \"gulli\",\n      \"Destination\": \"Jeunesse\",\n      \"TitleFilter\": \"(?i)Oggy\"\n    },\n    {\n      \"Show\": \"Tout le monde a son mot à dire\",\n      \"Provider\": \"francetv\",\n      \"ShowPath\": \"${HOME}/Videos/TV/TLMASMAD\",\n      \"SeasonPathTemplate\": \"Season {{.Aired.Time.Year | printf \\\"%04d\\\"}}\",\n      \"ShowNameTemplate\": \"{{ .Showtitle}} - {{ .Aired.Time.Format \\\"2006-01-02\\\" }} - {{(index .UniqueID 0).ID}}.mp4\"\n    }\n  ]\n}\n```\n\n### Destinations\nDéfini les répertoires de destination des fichiers. A noter que les variables d'environnement peuvent être utilisées.\n\n### WatchList\nDonne la liste des critères de recherche pour sélectionner les émissions à télécharger. L'ensemble des critères non vides doit être satisfait. Ils sont évalués dans l'ordre suivant :\n1. Provider: code du fournisseur de contenu\n1. Show : nom de l'émission\n1. TitleFilter: Le titre doit contenir le filtre, ou correspondre à l'expression régulière\n1. TitleExclude: Le titre ne doit pas contenir le filtre, ou ne pas correspondre à l'expression régulière\nLe contenu du critère doit être contenu dans le champ correspondant obtenu sur le serveur de la télévision.\n\n* Destination: code du répertoire où les fichiers doivent être téléchargés, dont la définition est placée dans la section  **Destinations**\n\nChaque provider peut traiter spécifiquement les recherches. \n\n# Les fournisseurs de contenu : les providers\nUn provider est un package du logiciel permettant d'implémenter les différents connecteurs.\nLes connecteurs disponibles sont :\n## France Télévision (`francetv`):\n  Ce connecteur permet de surveiller les programmes en replay des chaînes France 2, France 3, France 4, France 5, France Ô, et La 1ère.\n## Arte France (`artetv`) :\n  Ce connecteur permet de surveiller les programmes de la chaîne Arte\n  \n  Les playlists Arte peuvent être surveillées pour que les nouveaux épisodes soit téléchargés dès leur disponibilité. \n## Gulli (`gulli`)\n  Ce connecteur permet de surveiller les programmes de la chaîne Gulli. Attention Gulli tronque le nom des shows. Il convient de paramétrer les recherches avec les noms tronqués. \n\n# Configuration de Emby\n\nCréez une médiathèque de type \"TV\". Les réglages par défaut conviennent bien. Les données pourront être complétés si la série est connue des sites tesl de ImDB,Fanart...\n\n\n# Configuration de PLEX\n\nPour obtenir un résultat acceptable, il faut configurer une librairie de type \"Séries TV\" en utilisant l'agent \"Personal Media Shows\" afin que plex utilise les titres et les imagettes téléchargées depuis le serveur de la télévision. Veillez à ce que l'agent \"Local Media Assets (TV)\" soit placé en tête de liste des agents pour les Séries / Personal Media Shows ([voir cette page](https://support.plex.tv/articles/200265256-naming-home-series-media/)) . \n\n\n# Compilation des sources\nVous devez avoir un compilateur pour [le langage GO](https://golang.org/dl/).\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsimulot%2Faspiratv","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsimulot%2Faspiratv","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsimulot%2Faspiratv/lists"}