The Pinisher, le raspberry vengeur de Twitter

En ce moment, je m’amuse avec l’API Twitter et mon Raspberry Pi. Je travaille donc sur des façons d’automatiser les interactions grâce aux API et à différents langages, pour l’instant j’ai pu tester python et javascript, le premier sans grand succès, avec le second par contre j’ai pu m’amuser, en nodejs, avec 2 projets qui marchent maintenant assez bien.

Aujourd’hui je vais vous présenter le premier. En fait c’est le second, vu qu’il n’aurait pas existé sans le premier mais il est terminé en premier donc… Vous avez mal à la tête ? On passe au vif du sujet !

La Génése

J’étais donc entrain de faire mes tests avec une fonction de recherche de mots clefs, le but étant de repartager automatiquement les tweets correspondant à mes critères. Le projet en question est disponible sur Github sous le nom Twitter-ContestJS-bot.

Et là, c’est le drame, non le script marche très bien, le problème ne vient pas du code, mais des humains, ou de moi, à vous de choisir.

Le script fait ce qu’on lui dit, s’il trouve les mots clefs dans les tweets et qu’ils n’ont pas été déjà retweetés alors il les retweet (c’est pas facile à écrire tweet), que ça soit un concours lancé par une entreprise ou un faux concours promettant une nuit de rêve avec une inconnue aux photos de pornstars.

C’est bête et méchant la programmation, si nous ne donnons pas les bons ordres, nous n’aurons pas les bons résultats.

raspberry twitter bot pinisher

A partir de ce moment j’ai fais une pause sur le projet, blasé de mes résultats, le résultat n’était clairement pas fiable, le nombre de retweet assez faible couplé au pourcentage de contenu X élevé, j’ai préféré dire pause.

Deux semaines plus tard, les congés aidant, j’y suis retourné, cette fois-ci en mettant en place un filtre. Tout allait bien, les premières heures… Je le lance sur le raspberry à 22h, ça marche bien, rien de bizarre, je vais donc me coucher.

 Le drame déclencheur

Le lendemain matin je fais un micro-bilan, une 60ene de retweet, décevant. Je regarde de plus prêt et je m’aperçois que j’ai beau avoir filtré certains mots clés qui étaient très redondants, tout n’était pas filtré, réaction à chaud avec un ami à qui j’avais parlé du problème :

Adam :
@compte_spam_porn_récurent: Retweet ce message si tu veux tenter de gagner 1 Dial et Histoire Chaude, 1 dédicace nue
****** ! ****** ** ***** !
Je la reporte sur Twitter et je la bloque pour plus la RT

C. :
Juste parce que le bot a pas su faire son taff xD

Adam :
J’étais entrain de penser à ça du genre « trop ****** à filtrer j’pars à la chasse »
mais ça m’donne une idée, imagine si on faisait l’inverse :
on cherche que le porno, et on report
« je vous présente le Pi-nisher »

C. :
xpdr

Bref, le Pinisher était une blague… pendant 15min. Il aurait aussi pu s’appeler « the angrycoder’s script » étant donné qu’il a vu le jour en quelques dizaines de minutes suite à mon agacement.

API Twitter

J’étais assez énervé pour aller chercher la liste détaillée des fonctions de l’API Twitter afin de voir si on pouvait automatiser le signalement des comptes, et là, bingo.

yeah

J’avais donc la fonction de l’API nécessaire pour signaler des comptes, et un script qui recherche des tweets via des mots clés que nous choisissons et retweet en cas de besoin, vous voyez où je veux en venir ?

Moins d’1h après j’avais quelque chose de fonctionnel. C’est fou comme notre productivité & nos fonctions cognitives peuvent être décuplées sous l’influence de certains sentiments…

punishing bot twitter punisher

Je préfère prévenir, le code risque de ne pas être beau, ni optimisé, mais il marche et reste avant tout une blague.

Une blague ? Le mec c’est quand même cassé la tête à faire un bot et créer un logo…

– Lecteur sceptique

 Regardons le code de plus prêt

// Punish it
console.log("Punishing", searchItem.id);
API.reportUser(searchItem.user.id,
function success(){
// Block it
blockedUsers.push(searchItem.user.id);
API.blockUser(searchItem.user.id);

On peut voir ici qu’une fois le tweet sélectionné, on exécute reportUser qui va signaler le compte comme spam puis en cas de succès du signalement, va bloquer la personne dans la foulée. Le tout avec un blacklistage afin de ne pas signaler le même compte en boucle. Néanmoins je ne suis pas sûr de l’effet de cette action sur la façon qu’a Twitter de gérer les reports. Il serait peut-être plus efficace de retirer cette fonction afin de spam de report les comptes sélectionnés…

// Report user
reportUser: function (userId, cb, errorHandler) {
request.post({url: 'https://api.twitter.com/1.1/users/report_spam.json?user_id=' + userId, oauth: oauth})
.then(function() {cb();})
.catch(function(err) {
if (errorHandler)
errorHandler(err);
else
console.error("An error occurred:", err.message);});}

Fonction report utilisant l’API

// Block user
blockUser: function(userId)
{request.post({url: 'https://api.twitter.com/1.1/blocks/create.json?user_id=' + userId, oauth: oauth})
.then(callbacks.default)
.catch(function(err)
{console.error(err.message);});}

Fonction block utilisant l’API

Conclusion

J’ai une chose à déplorer, le fait qu’on ne puisse pas voir les personnes reportées afin d’être sûr que cela a bien été fait. C’est aussi une des raisons pour laquelle j’ai choisi de bloquer les comptes au passage, afin de suivre l’évolution de la liste via les paramètres de notre compte Twitter.

blockeduser bot twitter pinisher

Si vous êtes intéressés, les sources du projet ainsi que les explications concernant son installation et son utilisation sont disponibles sur Github, le tout distribué sous licence MIT.

Envie de partager ?
TwitterFacebookGoogle+LinkedIn

Poster un Commentaire

avatar