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

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 : github.com/yubigeek/Raspi-Social-Monitor-Vocal

Raspberry Pi : un compteur d’abonné vocal pour les réseaux sociaux
Voter pour cet article
3 commentaires
Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Inscrivez vous à notre newsletter

Soyez informé des derniers articles sur YubiGeek. Saisissez votre adresse email et validez le formulaire. Un email de confirmation vous sera communiqué.

Vous devriez également aimer

Kalliope : un assistant vocal pour votre Raspberry Pi (installation)

Aujourd’hui, je vous propose de découvrir Kalliope, un assistant vocal développé par Nicolas…

Installer un serveur Web avec Nginx & PHP 7.0 sur un Raspberry Pi

Il y a quelques temps, on vous présentait le Raspberry Pi, le nano-ordinateur…

Raspberry Pi : comment concevoir un bot qui dicte la météo chaque jour ?

Cette semaine a été remplie d’article pour votre Raspberry Pi, aujourd’hui on…

Raspberry Pi : un compteur d’abonné visuel pour les réseaux sociaux

Je fais suite au tutoriel sur la création d’un compteur d’abonné vocal…