Cela fait quelques temps que je « bidouille » mon Raspberry Pi, et j’y ai enfin trouvé une utilité : un compteur d’abonné vocal pour les réseaux sociaux. Je vous propose donc un petit tutoriel pour sa mise en place avec NodeJS.
Dans ce tutoriel, nous verrons comment mettre en place ce compteur d’abonné vocal pour Facebook, Twitter, et Instagram. Si vous êtes vous-même développeur, il vous sera facile de modifier le code et d’ajouter un « provider » (fournisseur, ou réseau social).
Compteur d’abonné vocal pour les réseaux sociaux
Prémices de notre projet NodeJS
Pour développer notre projet, nous aurons besoin d’installer des dépendances, pour cela, il suffit d’utiliser la commande suivante : npm install
Liste des dépendances à installer :
- fb : la dépendance utilisée pour l’API Facebook
- instagram-node : la dépendance utilisée pour l’API Instagram
- twitter : la dépendance utilisée pour l’API Twitter
- google-tts-api : un « text-to-speech » pour faire parler votre compteur vocal
- node-schedule : un planificateur de tâches pour exécuter les actions
- play-sound : une dépendance nécessaire à l’exécution des fichiers audios
- q : une librairie de promesse
Installez donc ces dépendances avec la commande suivante : npm install fb google-tts-api instagram-node twitter node-schedule play-sound q –save
Une fois installées, nous pourrons les inclure dans notre projet.
Créez un dossier dans votre répertoire de développement habituel. Puis créez votre premier fichier NodeJS que nous appellerons par exemple index.js
Ajoutez-y ces premières lignes :
var player = require('play-sound')(opts = {});var googleTTS = require('google-tts-api');var schedule = require('node-schedule');
Compteur d’abonné pour Twitter
Créez un autre dossier « providers/ » dans le répertoire de votre projet et ajoutez votre premier fichier : twitter.js
var Twitter = require('twitter'); // On inclut la librairie Twitter var Q = require('q'); // On inclut la librairie q (promesse) var config = require('../config'); // On inclut le fichier config.json // Connexion à Twitter var client = new Twitter({ consumer_key: config.twitter.consumer_key, // consumer_key consumer_secret: config.twitter.consumer_secret, // consumer_secret access_token_key: config.twitter.access_token_key, // access_token_key access_token_secret: config.twitter.access_token_secret // access_token_secret }); // Export du code avec la méthode get() exports.get = function(callback) { // Création d'une promesse var deferred = Q.defer(); // On récupère les credentials du compte Twitter client.get('account/verify_credentials', {}, function (error, data, response) { if(!error && data && data.followers_count) { // Résolution de la promesse, on retourne le nombre d'abonné Twitter deferred.resolve(data.followers_count); } else { // Erreur sur la promesse deferred.reject(error); } }); deferred.promise.nodeify(callback); return deferred.promise; };
On ajoute la ligne suivante dans notre fichier index.js :
var twitter = require('./providers/twitter');
On créé à présent une fonction qui va récupérer le nombre d’abonné, et vérifier s’il est positif ou négatif par rapport au précédant :
var counterTwitter = 0; // On déclare la variable counterTwitter à zéro var getCounterTwitter = function (spoke) { // Nouvelle fonction getCounterTwitter avec spoke (boolean) en paramètre twitter.get(function (error, result) { // On récupère la promesse faite par notre "provider" précédemment if(!error && result) { if(spoke) { // Si la variable "spoke" est égale à true (boolean) if(result > counterTwitter) { // Si le nombre d'abonné est supérieur à la variable counterTwitter, alors vous avez gagné un nouvel abonné var text = 'Vous avez gagné un nouvel abonné sur Twitter! ' + result + ' au total.'; console.log(text); speak(text); // On exécute la fonction speak() et on lui passe en paramètre la variable "text" } else if(result
On doit à présent faire parler le résultat ! Pour cela nous allons utiliser une librairie de Google, le « text-to-speech » afin de transformer du texte en fichier audio, avec la même méthode utilisée pour Google Traduction.
var speak = function (text) { // Nouvelle fonction speak avec text (string) en paramètre googleTTS(text, 'fr', 1) // On utilise googleTTS, qui prend en paramètre la variable text passée dans la fonction, puis la langue parlée, puis la vitesse de parole .then(function (url) { // La promesse nous retourne une fonction avec url comme argument // On veut faire parler ce fichier audio dans NodeJS }) .catch(function (err) { console.error(err.stack); // Oups, une erreur ! }); };
Pour exécuter ce fichier audio récupéré, il suffit d’utiliser la librairie « play-sound » :
player.play('fichier-audio.mp3', function (err, stdout, stderr) { // On lui passe en paramètre le fichier audio // });
Dans notre cas, le code sera celui-ci :
var speak = function (text) { googleTTS(text, 'fr', 1) .then(function (url) { player.play(url, function (err, stdout, stderr) { console.log('Le fichier audio généré par Google a été exécuté !'); }); }) .catch(function (err) { console.error(err.stack); }); };
On planifie désormais la vérification du nombre d’abonné toutes les minutes :
schedule.scheduleJob('* * * * *', function(){ getCounterTwitter(true); });
Puis on ajoute cette ligne au code afin de vérifier le nombre d’abonné au démarrage du script NodeJS :
getCounterTwitter(false);
Création du fichier config.json
{ "twitter": { "consumer_key": ", "consumer_secret": ", "access_token_key": ", "access_token_secret": " } }
Pour voir le projet en entier (avec Twitter, Facebook, et Instagram), vous pouvez vous rendre sur le Github du projet…