Ytdl-sub : les nouvelles vidéos de vos chaînes Youtube téléchargés automatiquement sur Plex/Jellyfin
Comment télécharger automatiquement les nouvelles vidéos Youtube de vos abonnements préféré et les mettre sur Plex/Jellyfin ?
Comment télécharger automatiquement les nouvelles vidéos Youtube de vos abonnements préféré et les mettre sur Plex/Jellyfin ?
Pour ma veille technologique, j’ai fait le choix d’utiliser l’outil open source FreshRSS et d’utiliser les Flux RSS. Par le passé, j’utilisais Feedly. Bien que puissant, Feedly dispose de limite comme tout modèle payant (limite de source et de folder).
Les flux RSS ne sont clairement pas tous jeune, mais je trouve qu’à l’aire des réseaux sociaux, elle a encore de beaux jours devant elle.
Les flux RSS (Rich Site Summary) sont des fichiers XML qui permettent aux utilisateurs de suivre facilement les actualités et les contenus web, sans avoir à vous assurer d’actualiser manuellement ces informations. Les flux RSS ont été créés pour combler un déficit dans le fonctionnement des systèmes de partage de contenu tels que les forums en ligne, qui n’ont pas la capacité de proposer une actualisation régulière de leurs contenus.
Voici par exemple sur ce blog le lien vers les flux RSS est : (https://blog.callot.fr/rss/) :
Une fois utilisé dans FreshRSS :
Si vous utilisez Portainer pour docker (que je vous conseille) voici mon docker-compose :
version: '3.3'services: freshrss: container_name: freshrss environment: - PUID=1000 - PGID=100 - TZ=Europe/Paris ports: - '3002:80' volumes: - '/docker/appdata/freshrss/data:/var/www/FreshRSS/data' - '/docker/appdata/freshrss/extensions:/var/www/FreshRSS/extensions' restart: unless-stopped image: freshrss/freshrss
Bien entendu, adaptez le path de votre volume et le port par rapport à votre environnement.
Une fois lancé nous allons le configurer :
Valider les différentes étapes, jusqu’à la base de données.
Pour la base de données, pour ma part, je reste en SQLite, pour ma part, avec mes besoins, cela suffit largement (avec plus de 100 sources agréger et un historique de 60 jours je n’ai aucun ralentissement), mais si vous le souhaitez, FreshRSS est compatible avec MySQL et Postgres :
Ensuite créer un compte et connectez-vous :
Maintenant que l’installation est terminée, on va passer à l’utilisation, on va s’abonner à notre premier flux et créer une catégorie actualité :
En cliquant sur le petit ”+” on va pouvoir ajouter des abonnements et rajouter des catégories :
Si vous avez du mal à trouver le flux RSS d’un site je vous conseil l’application Want my RSS sur Firefox.
Une fois ceci fait, vous pourrez retourner dans la gestion de vos abonnements pour avoir une vue de tous vos abonnements :
Très bien maintenant, on va pousser un peu plus loin l’outil, nous allons gérer l’archivage histoire de ne pas louper une news :
Ici, vous allez pouvoir modifier certains paramètres comme :
La gestion des utilisateurs : des paramètres > gestion des utilisateurs.
Vous allez pouvoir créer des utilisateurs pour qu’ils puissent suivre leurs propre flux RSS :
Pour l’utilisation de FreshRSS sur un iphone, on va utiliser l’application NetNewsWire, un lecteur de flux RSS opensource, bien pratique sur Iphone qui est compatible avec FreshRSS.
FreshRSS & internet
Pour pouvoir récupérer vos fluxRSS de FreshRSS via Internet, il faut bien entendu que votre instance de FreshRSS soit exposée sur internet. Je ferai sûrement un petit tutoriel sur la question avec le très bon proxy NginxProxyManager. La suite de l’article s’adresse donc à ceux qui ont exposé leur instance de FreshRSS sur internet.
Pour pouvoir récupérer le contenu de votre instance de FreshRSS vous allez devoir créer une clé API :
Une fois ceci fait, sur NetNewsWire, il suffit de rentrer les bonnes informations :
Voilà vous avez à présent votre FreshRSS sur votre mobile IOS !
Pour l’application Android, j’en ai testé plusieurs, une des rares qui ne soit pas rempli de pub est FeedMe :
Pour la configuration même topo :
Voilà vous avez à présent votre FreshRSS sur votre mobile Android !
FreshRSS permet non seulement de disposer d’une gestion de FluxRSS décentralisé, mais également d’être compatible avec différentes application mobile. Je l’utilise depuis 2 ans est je n’ai jamais eu de souci avec, je vous le recommande donc en remplacement de Feedly pour votre veille.
Saviez-vous que Free met à disposition une API SMS pour envoyer des notifications SMS directement sur votre téléphone ?
Note : L’API permet d’envoyer des notifications uniquement à votre numéro de téléphone Free, elle ne permet pas d’envoyer des SMS à d’autres numéros, mais c’est parfait pour un système de notification.
Bien entendu, il faut disposer d’un numéro de téléphone Free pour accéder à cette fonctionnalité. Ensuite, il faut vous rendre dans les paramètres de votre compte Free mobile (https://mobile.free.fr/account/mes-options):
Activer la fonctionnalité (dans “mes options > notification par sms”) :
Copier la clé API pour le besoin juste après.
Pour l’exemple, on va créer un workflow qui notifie par sms. On va faire en sorte que ce workflow s’exécute, par le biais d’un autre workflow.
On va créer ceci :
Faire un node Set avec les variables suivantes :
On va définir :
Pourquoi ne pas définir sous forme de Credential ?
Les variables, user, pass et mess sont directement encoder dans l’url, pour le moment d’après mes recherches, on peut pas créer de Credential n8n pour les mettre directement dans une URL. Si j’ai faux, merci de me le signaler en commentaire 😄.
Comme nous allons envoyer le message comme variable dans l’url, nous allons créer un node pour encoder le message dans l’url :
Le code :
{{ encodeURIComponent( $json["mess"]) }}
Ensuite, un node HTTP request :
L’URL avec les variables :
https://smsapi.free-mobile.fr/sendmsg?user={{$json.user}}&pass={{$json.pass}}&msg={{$json.mess}}
Pour pouvoir l’utiliser à partir d’un autre workflow on va utiliser le trigger “Execute Workflow Trigger”. Ce trigger prend en paramètre le résultat d’un node précédent, on va le voir après, lors d’un déclenchement à partir d’un autre workflow.
Dans le node “Envoi message” on crée une variable “mess” avec notre message test qui sera pris en paramètre du précédent workflow.
Pour le node execute Workflow :
Dans Workflow ID on va mette l’ID du workflow.
Comment obtenir l’ID ?
Tout simplement avec l’URL du Workflow en question :
https://n8n.monlab.fr/workflow/4LjGtoFyzPKgn2xr
Voici un exemple de résultat si c’est ok :
On a vu dans ce tutoriel :
Nous pouvons faire bien des choses avec n8n. Dans cet article nous allons voir comment on peut lancer un workflow n8n à partir d’un shortcut sur ios (l’application Raccourcis en français 😄), mais également ce que l’on peut faire avec. Si vous ne connaissez pas encore n8n je vous invites à lire mon article sur celui-ci.
L’intérêt de cette exercice est par exemple de déclencher un Workflow depuis un iphone/ipad/mac 🍎.
Note : utilisation en direct de l’API Notion
Nous pouvons en effet utiliser directement l’API de Notion depuis un shortcut, mais l’avantage d’utiliser n8n va être dans l’utilisation d’autres outils, tel que Telegram pour envoyer une notification ou encore utiliser une variable “choix” pour choisir de créer une tâche dans Notion ou Trello par exemple.
Voici le résultat :
Pour commencer, nous allons donc lancer un workflow n8n à partir d’un shortcut. Une manière simple d’y parvenir est d’utiliser un appel webhook. Un webhook est une fonction de rappel basée sur le protocole HTTP.
Sur n8n, on va utiliser le déclencheur “on webhook call” :
Je vais vous détailler certains paramètres car ceci peuvent être utile pour votre workflow :
On va personnaliser le Path en “test-webhook” (1) pour simplifier un peu et rajouter une authentification (2-3) :
Pour l’authentification basique, ajouter un utilisateur et un mot de passe (dans mon authentification, j’ai utilisé login: test, password : test) :
Maintenant, allons du côté de l’application shortcut :
Cliquer ensuite sur “Listen for test Event” sur n8n, pour lancer le test, puis exécuter le shortcut sur votre iphone.
Félicitation, vous venez dans lancer un workflow n8n depuis un shortcut ios ! 😄
On peut maintenant envoyer de la donnée au Workflow.
Dans le shortcut nous allons :
Vous pouvez à présent cliquer sur “listen for test event” dans n8n , puis exécuter le Workflow, définir votre texte. Vous pouvez retrouver ensuite vos données dans n8n comme ceci :
On va maintenant envoyer des données dans Notion pour créer une tâche et renvoyer le lien de la tâche précédemment crée vers le shortcut.
Dans Shortcuts :
A la suite du shortcut précédent :
Dans n8n :
Dans n8n, nous allons donc récupérer l’appel API et les données, ainsi que répondre avec l’url de la tâche Notion crée :
On va modifier notre webhook :
On rajouter d’ailleurs, le node en question :
On va renvoyer les données en json à notre shortcut avec les bonnes variables :
Nous venons de voir :
Un éventail de possibilité s’offre maintenant à vous pour vos workflows 🤩
/!\ Article non sponsorisé /!\
Aujourd’hui je vous présente N8N, un outil que j’utilise souvent dans le cadre de projet personnel ou professionnel qui permet d’interconnecté différentes API et d’effectuer des transformation, insertion et suppressions par le biais d’une interface facile à prendre en main. Un outil très utiliser par les “no-codeur”. En NO-CODE on parle également d’outil d’automatisation.
Capture d’écran d’un exemple de Workflow sur le site de N8N
L’intérêt de N8N est qu’il s’agit d’un projet “faircode” (on reviendra après sur cette licence) souvent mis à jours et que vous pouvez avoir une version héberger chez vous.
N8N n’est pas le seul sur le marché, bien au contraire. Il existe bon nombre d’outil plus où moins cher sur le marché voici quelques exemples :
Les prix qui sont notés ici sont datés de l’écriture de ce billet. Il faut également faire attention, la “tâche”, “opération” ou “workflow” ce défini de façon différente selon les outils, il est important de faire différents tests d’un même workflow sur plusieurs outils pour comparer. Par exemple, une “ops” sous Make va représenter souvent simplement l’envoi d’une ligne alors que sous Zapier il s’agit d’une exécution d’un workflow (ou Zaps) en entier.
Je vais pas faire de comparaison pousser ici, mais de ce que j’ai pu voir, Zapier à plus de paramètres et il conviendra mieux aux développeurs, Make est très “user friendly” avec une interface facile à prendre en main et donc idéal pour les débutants. Pour IFTTT (ou définition), il dispose de beaucoup d’intégration disponible pour IOT, il conviendra donc mieux à ceux qui cherchent à automatiser leurs objets connectés. Pour Microsoft Power Automate, il sera forcément mieux intégré à un environnement Microsoft.
Du coup, pourquoi choisir N8N qui n’est pas dans la liste précédente ? 😄
Tarification sur le site de N8N
❓
“Faircode licence” ? N8N est un logiciel Fair-code, c’est à dire qu’il est qu’il est libre d’utilisation, son code est généralement publique mais il peut être limité en fonctionnalité par ces auteurs. Pour plus information vous pouvez allez à la page dédié sur la documentation de N8N.
Il y a aussi des mauvais côtés que j’ai noté :
💡
Passer cette étape si vous souhaité utiliser la version SAAS de l’outil
Maintenant que les présentation sont fait avec N8N, on va passer à l’installation. La suite, dans le cadre où vous n’utilisez pas la version SAAS de l’outil.
Lancer un conteneur N8N :
docker run -it --rm --name n8n -p 5678:5678 -v ~/.n8n:/home/node/.n8n docker.n8n.io/n8nio/n8n
Docker-compose avec Postgres :
On peut aussi avec docker-compose relier N8N à une base de données Postgres pour plus de performance.
Voici le squelette :
Le .env va permettre de définir les mot de passes, nom d’utilisateurs et nom de la BDD :
POSTGRES_USER=changeUser POSTGRES_PASSWORD=changePassword POSTGRES_DB=n8n POSTGRES_NON_ROOT_USER=changeUser POSTGRES_NON_ROOT_PASSWORD=changePassword
On va créer une instance de N8N avec Postgres avec docker-compose :
version: '3.8'
volumes: db_storage: n8n_storage:
services: postgres: image: postgres:11 restart: always environment: - POSTGRES_USER - POSTGRES_PASSWORD - POSTGRES_DB - POSTGRES_NON_ROOT_USER - POSTGRES_NON_ROOT_PASSWORD volumes: - db_storage:/var/lib/postgresql/data - ./init-data.sh:/docker-entrypoint-initdb.d/init-data.sh healthcheck: test: ['CMD-SHELL', 'pg_isready -h localhost -U ${POSTGRES_USER} -d ${POSTGRES_DB}'] interval: 5s timeout: 5s retries: 10
n8n: image: docker.n8n.io/n8nio/n8n restart: always environment: - DB_TYPE=postgresdb - DB_POSTGRESDB_HOST=postgres - DB_POSTGRESDB_PORT=5432 - DB_POSTGRESDB_DATABASE=${POSTGRES_DB} - DB_POSTGRESDB_USER=${POSTGRES_NON_ROOT_USER} - DB_POSTGRESDB_PASSWORD=${POSTGRES_NON_ROOT_PASSWORD} ports: - 5678:5678 links: - postgres volumes: - n8n_storage:/home/node/.n8n depends_on: postgres: condition: service_healthy
Le init-data.sh permet de crée les utilisateurs :
#!/bin/bash
set -e
if [ -n "${POSTGRES_NON_ROOT_USER:-}" ] && [ -n "${POSTGRES_NON_ROOT_PASSWORD:-}" ]; then psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL CREATE USER ${POSTGRES_NON_ROOT_USER} WITH PASSWORD '${POSTGRES_NON_ROOT_PASSWORD}'; GRANT ALL PRIVILEGES ON DATABASE ${POSTGRES_DB} TO ${POSTGRES_NON_ROOT_USER};EOSQLelse echo "SETUP INFO: No Environment variables given!"fi
N’oublier pas de changer les droits du fichier :
chmod 755 init-data.sh
Bon maintenant que l’installation de nos conteneurs docker est terminé, si on passé aux choses intéressantes ?
Un peu de vocabulaire :
Après que vous aillez crée votre compte et que vous vous soyez connectez. Voici l’interface d’accueil :
Interface d’accueil d’N8N
Dans cette exemple “basique” de Workflow je vous montre comment envoyer une notification Telegram quand une nouvelle page est ajouté à Notion.
D’abord les credentials :
Pour Notion : rendez-vous ici pour créer votre première intégration. En cliquant sur le ”+” :
Création d’une intégration dans Notion
Une fois l’intégration crée, pensez à copier l’integration secret nous en aurons besoin juste après.
Dans Notion les intégrations n’accède pas à toutes les BDD (et tant mieux 😊) il va falloir lui dire à qu’elle BDD nous souhaitons lui donner accès.
Prenons par exemple une liste des tâches simple. Vous pouvez en cliquant sur les options de la BDD ajouter une nouvelle connections vers votre integration :
Une fois ceci fait vous pouvez voir les droits que l’integration a sur votre BDD :
Ajouter le credential Notion dans N8N :
Allez dans credentials (menu à gauche) > add credentials :
Ajouter un credential dans N8N
Entrer votre secret que vous avez précédemment récupéré (vous pouvez renommer le credential pour ne pas vous y perdre quand vous en avez beaucoup) :
Une fois entrée, un test confirme la connexion.
On va tout de suite tester que notre BDD remonte bien :
Dans Workflows > add Workflow :
On va ensuite rajouter notre premier node : un trigger manually. Ceci va permettre d’executer le Workflow lors de l’appui du bouton en bas au centre.
Création du trigger “manually”
Cliquer ensuite sur le ”+” à coté du node “Manually” pour relier un nouveau node et chercher les nodes Notion :
Choisir “get many database pages” pour récupérer toutes les pages d’une BDD.
Dans “credential” choisir le credential que vous venez de créer :
Choix du credential dans le node
Choisir ensuite votre BDD Notion (seul les BDD que vous avez autorisé préalablement peuvent remonter). Le “Return All” permet de remonter tous les éléments d’une BDD (par défaut 50 éléments ) :
Choix de la BDD Notion dans le node Notion
Vous pouvez quitter l’édition du node (en cliquant en dehors de celui-ci).
Il ne vous reste plus qu’à executer :
Execution du Workflow
Si vous double cliquer sur notion vous pouvez voir dans l’édition du node :
Interface d’un node
Félicitation vous venez de remonter des données de Notion dans N8N ! 👏
Passons à la phase suivante -> Le bot Telegram.
La première étape est d’entamé la conversation avec le BotFather, c’est l’outil de Telegram pour créer les bots 🤠 (un bot pour crée des bot en somme).
Le BotFather
Commencé par lui demander de crée un nouveau bot avec la commande :
/newbot
création du bot
Une fois ceci fait, donner un nom à votre bot (attention celui-ci doit finir par bot à la fin). Vous obtenez alors une clé api :
Clé API pour pouvoir utiliser un bot Telegram
Copier cette clé en cliquant dessus et ajouter la aux credentials N8N :
Une fois ceci fait lancer une conversation avec votre nouveau bot :
Première échange avec notre chatbot
Ce /start que nous venons d’envoyer en débutant la conversation va nous permettre de récupérer l’id de cette conversation avec notre bot.
Pour récupérer l’id de la conversation avec notre bot, on peut utiliser N8N avec un Telegram Trigger connecté à notre credential précédemment rajouté. Il faut cliquer sur le bouton “Listen for Event” pour récupérer l’évènement du /start écris à notre bot. L’ID de la conversation sera dans la sortie
Vous allez pouvoir ensuite envoyer un message test avec un node Telegram send message comme ceci :
Envoi d’un message test dans Telegram
Si tout ce passe bien vous devriez recevoir ceci via Telegram :
Pour désactiver le “This message was sent automatically with n8n” regarder du côté des Additional Fields.
Revenons à notre but principal : envoyé une notification Telegram quand une tâche dans Notion est crée.
Pour cela on va faire un algorithme très simple avec N8N :
Algorithme de notre Workflow pour N8N
⁉️
Pourquoi décochée la notif Telegram dans Notion ? Tout simplement pour éviter de recevoir plusieurs fois la notification. Comme notre Workflow va s’executer plusieurs fois (exemple : toutes les 5 minutes) il faut empêcher le Workflow de renvoyer la même notification.
Dans Notion on va crée un nouveau champ “Notif Telegram” :
Création du nouveau champ Notif Telegram
Dans N8N on va rajouter un if juste après notre Node Notion qui permet de récupérer la BDD :
Ajout du if dans N8N
Puis dans notre “if” :
En conclusion de cette étape cela permet de dire “si la case est cochée dans Notion pour notre page, alors on continu vers le prochain node”.
Si “Notif Telegram” est cochée
💡
Pour l’exemple, cochée une case de la base Notion et cliquer sur “Execute Workflow”
On va ensuite relier nos différents N_odes_ comme ceci :
Notre Workflow qui avance
Dans le node Telegram on va faire quelques modification pour ajouter des indications 😎 :
Avec les expressions nous rajoutons des informations à notre notification
On peut exécuter pour tester :
Génial vous avez votre belle notification 👏 !!!
Il nous manque une chose pour que la notification de tâche ne s’exécute qu’une fois, pour cela rien de plus simple, on va rajouter un node pour modifier une propriété de la page :
modifier une page d’un database
Ensuite on va mettre le node de modification de notre page à la suite du “if” comme ceci :
Ensuite il suffit d’indiquer l’url de la page Notion à modifier puis de mettre notre propriété “Notif Telegram” en décochée :
Il ne vous reste plus qu’à remplacer le trigger Manually par un trigger “On a schedule” pour exécuter notre Workflow toutes les 5 minutes (par exemple, mais selon votre besoin).
Mise en place du Cron
Votre Workflow final est enfin celui-ci :
Le Workflow final
N8N est un outil puissant permettant d’automatiser des tâches et de transformer la donnée. Les workflow sont simple à mettre en place, mais demandes plus de base en programmation que ces concurrents (notamment pour l’utilisation des expressions). Dans les autres avantages que l’on pourra citer, la capacité d’être selfHosted et un coût mieux maîtriser que ces concurrents.
Je continuerai à faire des articles dédiés à des Workflow N8N dans les prochaines semaines pour vous montrer les possibilités de l’outil.
Commençons par le début : Ghost est un CMS dédié au blog. Il est open source, trés simple d’utilisation et dispose de plein de fonction sympa. C’est ce que j’utilise pour ce blog. Je vais reprendre une parti de la documentation sur le sujet très bien faite.
Crée un utilisateur dédié (ne pas utiliser l’utilisateur ghost):
# exemple ghostuseradduser ghostuser# ajouter au super userusermod -aG sudo ghostuser# Then log in as the new usersu - ghostuser
Installation Nginx :
sudo apt install nginx
Installation de Mysql :
sudo apt install mariadb-server
Connexion à Mysql :
sudo mysql
Changer le mot de passe root de mysql en vous connectant à mysql :
mysql -u root
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('NouveauMotDePasse');
Créer un utilisateur ghostuser et une BDD dédié au site, ici appellé ghost pour l’exemple. Ensuite lui donner les droits sur la BDD.
GRANT USAGE ON *.* TO 'ghostuser'@localhost IDENTIFIED BY 'mypassword';CREATE DATABASE ghost;GRANT ALL privileges ON `ghost`.* TO 'ghostuser'@localhost;
Installer NodeJS :
curl -sL <https://deb.nodesource.com/setup_14.x> | sudo -E bashsudo apt-get install -y nodejs
Installation de Ghost CLI (ghost CLI va permettre de simplifier l’installation) :
sudo npm install ghost-cli@latest -g
Création du dossier du site internet :
# creation du dossier pour le sitesudo mkdir -p /var/www/sitename
# on donne les doits a l'utilsateur ghostsudo chown ghostuser:ghostuser /var/www/sitename
# les permissionssudo chmod 775 /var/www/sitename
# on va dans le dossiercd /var/www/sitename
L’avantage est que ghost-cli simplifie bien le processus.
Lancer le processus de lancement automatisé de ghost (avec l’utilisateur ghost) :
ghost install
Se connecter à mariadb puis refaire une base de donnée :
CREATE DATABASE mondeuxiemesite;GRANT ALL privileges ON `mondeuxiemesite`.* TO 'ghostuser'@localhost;
Refaire une installation avec :
ghost install
Suivre les étapes, mais ne pas lancer tout de suite ghost, il faut modifier la conf nginx et modifier les ports :
sudo vim /etc/nginx/sites-available/mon-deuxième-site.fr.confsudo vim /etc/nginx/sites-available/la-migraine-et-moi.fr-ssl.conf
Création de l’utilisateur de backup :
GRANT USAGE ON *.* TO 'backup'@localhost IDENTIFIED BY 'mypassword';GRANT ALL privileges ON `backup`.* TO 'ghost'@localhost;FLUSH PRIVILEGES;
Création du fichier .cnf avec les logins de l’utilisateur :
vi ~/.my.cnf
[client]user=backuppassword="###"
Changement des droits sur le fichier :
chmod 600 ~/.my.cnf
#!/bin/bashnow=$(date +'%Y-%m-%d_%H-%M')echo "Making backup folder for $now"mkdir "/home/mon_utilisateur/Backups/ghost/$now"
echo "Saving ghost_prod Database Backup $now"mysqldump ghost | gzip > "/home/mon_utilisateur/Backups/ghost/$now/ghost_prod.sql.gz"
echo "Compressing content folder"tar -zcvf "/home/mon_utilisateur/Backups/ghost/$now/content.tar.gz" --absolute-names /var/www/mon_blog/content/ > /dev/null
# supprimer les backups au dela de 7 joursfind /home/mon_utilisateur/Backups/ghost -mtime +6 -exec rm -r "{}" \\;
Ajout du cronjob :
crontab -e
Activation tous les jours :
0 0 * * * /home/(USER)/Backups/backup.sh
Ensuite il suffit de récupérer le dossier de backup avec un rsync ou un scp.
La cli de ghost permet également d’autres chose comme :
ghost update # mettre à jour ghostghost restart # redemarer ghost