Raspberry Pi : un compteur d'abonné vocal pour les réseaux sociaux

Raspberry Pi : un compteur d'abonné vocal pour les réseaux sociaux

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.

Installer NodeJS : un jeu d’enfant
Il y a quelque temps, nous vous proposions de créer un bot pour Twitter [https://www.yubigeek.com/api-streaming-twitter-bot-node-js/] avec la technologie NodeJS. Aujourd’hui, nous vous proposons de découvrir en détail cette technologie émergente au fur et à mesure des articles. Attention une bonne …

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

PM2 : un gestionnaire de processus de production pour les applications NodeJS
Vous cherchez à laisser tourner vos applications NodeJS en processus sur votre machine de production ? PM2 est la solution à ce besoin, en effet, PM2 permet de laisser tourner des tâches/instances NodeJS sur les machines Linux/Windows/Mac en processus. Installer NodeJS : un jeu d’enfantIl y a quel…

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 < counterTwitter ) { // Si le nombre d'abonné est inférieur à la variable counterTwitter, alors vous avez perdu un abonné                     var text = 'Vous avez perdu un 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"                 }             }             counterTwitter = result; // On met à jour la variable counterTwitter pour la prochaine fois         } else {             console.error('Twitter:', error); // Oups, une erreur !         }     }); };

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

YubiGeek/Raspi-Social-Monitor-Vocal
Contribute to YubiGeek/Raspi-Social-Monitor-Vocal development by creating an account on GitHub.
Maxence Rose

Écrit par Maxence Rose

Hyperactif du Web, fondateur de YubiGeek, passionné de technologie, de sciences, et fasciné par Google, j'écris ce que bon me semble et je teste pour vous les derniers services du Web.
Vous vous êtes abonné avec succès YubiGeek
Génial ! Ensuite, passez à la caisse complète pour obtenir un accès complet à tous les contenus premium.
Nous saluons votre retour ! Vous vous êtes connecté avec succès.
Unable to sign you in. Please try again.
Succès ! Votre compte est entièrement activé, vous avez désormais accès à tout le contenu.
Succès ! Vos informations de facturation sont mises à jour.
Échec de la mise à jour des informations de facturation.