Laissez-moi vous présenter mon script Twitter-Monitoring réalisé avec le langage Python 3.4.

Déjà, avant de commencer, je tiens à expliquer l'utilité de ce script et à qui il est principalement destiné. Il existe des outils de Monitoring très puissants, on ne peut pas réinventer la roue, certes. Twitter n'est pas une plateforme adaptée - à la base - pour faire ce genre de choses. Mais après tout, pourquoi pas ? Cela peut paraître inutile aux yeux de beaucoup, et je le conçois vraiment. À la base, je voulais seulement faire quelque chose d'original à défaut d'avoir de grandes compétences en programmation. Ce script intéressera donc les curieux et certainement les accros à twitter qui profiteront de la plateforme pour faire des choses sympathiques avec leur serveur. Comme je le poste sur mondedie, je pars du principe, et je partirai sur ce principe (dans les majs futures), que vous avez suivi l'essentiel des tutoriels ici, c'est-à-dire l'installation de ruTorrent, de Prelude/Ossec, et plein d'autres. À ce jour le script ne nécessite que Ossec.
La programmation n'étant pas mon domaine de prédilection, vous utilisez ce script sous votre propre responsabilité. En théorie il ne fait rien de bien méchant mais je préfère avertir tout de même. Tout est bon ? On y va !
Dans un premier temps il va vous falloir créer un compte twitter spécialement réservé à votre serveur. Je vous suggère d'éviter de l'utiliser avec un compte principal, d'autant plus si vous ne savez pas que le script a la tâche de supprimer tous les tweets du compte serveur après un intervalle donné (pour éviter l'accumulation de tweets inutiles). Cette étape ne nécessite pas que je vous fasse un schéma, donc passons à la suite : la création d'une app Twitter réservée au script. Pour ce faire, rendez-vous ici :
https://apps.twitter.com
Cliquez sur le bouton
Create New App, complétez les champs avec un nom et une description explicites, le website peut être bidon. Maintenant, cette app est dorénavant listée, toujours dans
https://apps.twitter.com. Cliquez-dessus pour accéder à ses paramètres. Allez tout d'abord dans l'onglet Permissions et cochez
Read, Write and Access direct messages si ce n'est pas déjà le cas (n'oubliez pas de mettre à jour avec le bouton prévu à cet effet en bas). Ensuite, allez dans l'onglet
Keys and Access Tokens. S'ils ne sont pas générés, générez-les. Vous devriez avoir ceci.
Ne fermez pas encore cette page, elle nous aidera à configurer le script (obvious

). Surtout,
ne partagez pas ces informations.
Maintenant, il va falloir switcher sur le serveur, avec SSH pour pouvoir l'administrer. Connectez-vous en
root, et tapez les commandes suivantes pour installer les paquets nécessaires au fonctionnement du script :
aptitude update
aptitude install python3 python3-pip
pip3 install speedtest-cli
pip3 install psutil
pip3 install twython
pip3 install apscheduler
Je pense que ces commandes sont assez explicites ! Maintenant, il suffit d'installer le script.

Placez-vous dans un répertoire (n'importe lequel) dans lequel sera installé le script.
Il est disponible sur Github pour des raisons de maintenabilité, et comme je commit dès que je peux les dernières modifications. En faisant cette commande vous obtiendrez la dernière version disponible :
wget https://raw.githubusercontent.com/Wonderfall/Twitter-Monitoring/master/twitterbot.py
Par ailleurs le repo est disponible ici (pour voir les dernières modifications et les anciennes versions) :
https://github.com/Wonderfall/Twitter-Monitoring
Bon, si le code peut ne pas vous paraître clair, la partie à laquelle vous allez devoir toucher est celle-ci :
#### Twitter Credentials & accounts
Si ce n'est pas déjà le cas, il faut ouvrir le script pour y effectuer les modifications :
nano twitterbot.py # ou vi, vim, voire emacs, ce que vous voulez...
Grâce à l'app que nous avons créée, vous allez pouvoir remplir :
-
API_KEY : Consumer Key (API Key)
-
API_SECRET : Consumer Secret (API Secret)
-
ACCESS_TOKEN : Access Token
-
ACCESS_TOKEN_SECRET : Access Token Secret
-
BOT : nom twitter du compte réservé au bot (pas besoin de mettre le @)
-
MASTER : nom twitter de votre compte qui commandera le bot (pas besoin de mettre le @)
Le script va automatiquement créer (ou recréer) un fichier twitterbot.log (dans le même répertoire). Le log est important parce que Twitter peut se révéler capricieux par moments (en effet évitez de spammer avec). Ce log contient les erreurs qui ont provoqué la fin du programme, mais tous les tweets "reçus" par le bot sont également présents.
Comme vous pouvez également le constater (si ce n'est pas déjà fait), le script a trois tâches différées et qui se répètent (cron-like) :
-
Supprimer tous les tweets : pour éviter de les accumuler et d'attirer l'attention.
-
Supprimer le log : si vous le laissez longtemps, inutile de tout enregistrer.
-
Notifier les alertes Ossec entre 10 et 16
-
Notifier la disponibilité de mises à jour du système
Si vous êtes suffisamment habile, vous pouvez modifier la variable
hours attribuée à chaque tâche pour définir quand celle-ci doit s'exécuter.
Le script propose également à votre bot de pouvoir VOUS répondre à des commandes précises. Sachez que pour que le bot prenne en compte votre commande, il faut faire mention de lui dans votre tweet, c'est à dire :
@nom_du_bot commande
C'est tout simplement pour éviter d'inclure un mot qu'il pourrait interpréter dans un tweet qui n'est pas destiné à lui, et aussi pour éviter que vos commandes soient exposées sur votre fil principal... Je tiens à insister que personne d'autre que vous ne pourra commander le bot. Les commandes dont il est question sont écrites dans le script, elles ne correspondent pas à des commandes réelles (ici extérieures) mais à des commandes définies par des fonctions. Autre chose importante à savoir, tweeter prohibant le fait de tweeter des messages identiques, il faut varier ses commandes en faisant par exemple une douce phrase pour votre serveur, qui contiendra toujours le nom de la commande. Le bot découpe le tweet en une liste de mots, détecte le mot qui correspond à la commande, et lance la fonction qui lui est associée.
Voici la liste des commandes à qui est associé une ou plusieurs fonctions :
-
toast : permet de tester si le bot fonctionne et/ou si le serveur est en marche.
-
uptime : le serveur vous répondra en donnant son uptime.
-
stats : le serveur vous donnera un pourcentage de l'utilisation CPU & RAM.
-
speedtest : execute speedtest-cli en mode minimaliste et tweet le résultat.
-
checksys : force la recherche d'alertes Ossec et de mises à jour et répondra de toute façon.
C'est une liste bien maigre mais bien heureusement non-exhaustive.

À la base le script était plus complet mais je l'ai adapté à une situation dont tout le monde sur mondedie.fr pourrait bénéficier. Voilà à quoi peuvent ressembler les réponses du bot :
Vous l'avez sûrement remarqué, à la fin de chaque tweet il y a un nombre aléatoire. Pourquoi ? Pour que vous me posiez la question.

Non en fait, twitter est assez strict et ne tolère pas qu'on reposte des tweets identiques à une intervalle très courte, or cela peut arriver avec le bot. D'où cet ajout pour contourner la limitation.
Maintenant vous avez peut-être envie de laisser tourner le script en fond. Je vous recommande de faire ceci :
nohup python3 twitterbot.py &
Pour arrêter le bot je vous conseille d'installer le paquet htop (F3 + 'twitterbot.py' puis F9 puis ENTER pour kill le bot).
Voilà, je pense que nous avons fait le tour ! Je disais tout à l'heure que twitter était capricieux, n'hésitez pas à consulter le .log ! Ça doit ressembler à ceci s'il n'y a pas d'erreur :
At 2015-07-08 22:41:11.408690 : tweet from MASTER to BOT received.
At 2015-07-08 22:41:11.408839 : executing <function give_systats at 0x64359e327f28>
At 2015-07-08 22:41:13.637396 : BOT answered.
...
Merci de me rapporter vos erreurs et surtout
vos idées !
Sur ce topic : http://mondedie.fr/d/6900 !