Histoire d’un projet perso : un bot Twitter

Histoire de la naissance d’un bot fêtant la naissance des jeux

Adrien Guéret
6 min readJan 22, 2019

J’ai développé un bot Twitter fêtant les anniversaires des jeux Mario. L’occasion de partager un retour d’expérience sur un projet perso et non pro, pour une fois.

Le but de cet article n’est pas d’expliquer comment développer un bot Twitter (des tonnes de ressources existent déjà sur le Web), mais plutôt de partager la genèse d’un tel projet : comment l’idée est arrivée, quelles ont été les mésaventures avec mon propre code legacy, et comment j’ai réussi à lutter contre la démotivation.

L’un des tweets publiés par le bot.

Au commencement se trouvait un vieux site…

J’ai découvert le développement Web dès le lycée. Fasciné par les possibilités, j’ai poursuivi mes études dans ce domaine et, aujourd’hui, j’en ai fait mon métier.

Pour expérimenter et m’améliorer, j’ai créé en parallèle de mes études mon propre petit laboratoire sous la forme d’un site Internet : https://mariouniversalis.fr (il s’agit donc d’un vieux site, ne soyez pas trop sévères !).

Après de longues années d’abandon, c’est début 2019 que l’envie de refaire quelque chose avec ce site a commencé à germer : ne pas exploiter une base de données contenant 156 jeux Super Mario, c’est quand même dommage !

Mais comment dépoussiérer un vieux site perso dont le code a plusieurs années ?

Puis une API émergea…

La première volonté a été de ne pas toucher au code du site. Bien heureusement, je ne développe pas aujourd’hui comme je codais lors de mes études, et je dois avouer que je filerais bien quelques baffes à mon moi du passé devant l’étendue de saletés qu’il a laissées derrière lui.

Ne vous moquez pas, je suis sûr que c’est pareil pour vous.

Quoiqu’il en soit, j’ai préféré me lancer sur une API. Cela permettait en effet de travailler à nouveau sur le site sans avoir à subir mes brillantes idées d’architecture du passé : une API, c’était un tout nouveau projet !
Il me fallait juste interroger la base de données.

Mais tout comme le site, celle-ci date. Mon ancien moi a eu ici aussi des choix plus que discutables…

La bonne table en franglais avec de la duplication d’informations, miam !

Sans entrer dans les détails d’implémentation, j’ai donc dû faire une petite classe de mapping afin de transformer ces champs bancals en quelque chose de plus exploitable pour une API :

Après quelques heures (et quelques erreurs 500), la première version de la route des ressources des jeux a fait son apparition. Elle propose des filtres et une pagination ; rien de bien extraordinaire encore, mais elle est stable !

Et comme d’habitude quand je bosse sur un projet perso, la motivation s’est vite épuisée à partir de cet instant. Passé l’excitation de mettre en place un nouveau projet, il ne reste qu’à le peaufiner ce qui est, disons-le, nettement moins marrant…

Tellement de projets qui n’ont jamais vu le jour… (via CommitStrip)

Les nouvelles données affluèrent…

J’ai vite réalisé que la perte de motivation provenait de deux facteurs :

  1. je bossais sur une API sans avoir d’idée concrète pour l’exploiter ;
  2. je bossais sur une API basée sur une base de données incomplète.

C’est probablement ce second point qui me tracassait le plus : à quoi bon s’embêter à exposer des données si celles-ci étaient obsolètes ?

Cela faisait un peu moins de quatre ans que la base de données n’avait pas été mise à jour : le jeu le plus récent était Super Mario Maker, sorti en 2015 sur Wii U ! Il fallait donc se retrousser les manches et rattraper le retard…
Heureusement, j’ai reçu une aide insoupçonnée d’un camarade de toujours, que nous appellerons « Meuh » pour préserver son anonymat. Via une Google Sheets, nous nous sommes répartis les jeux à ajouter :

Entre nous, Meuh en a ajouté bien plus que moi, merci à lui !

En un temps record, grâce à son aide, une soixantaine de titres ont été enregistrés : au lieu de 156 jeux, la base de données de Mario Universalis en contient désormais 215 !

La question des données obsolètes étant réglée, il me fallait, pour rester motivé, une raison de créer cette API : à quoi allait-elle bien pouvoir me servir ?

Et le bot Twitter naquit.

Une vidéo que j’avais visionnée il y a quelques temps m’est alors revenue à l’esprit : on y voyait Micode expliquant comment créer un bot Twitter calculant les retards cumulés des trains SNCF.

J’ai trouvé le concept sympa, puis je me suis demandé comment exploiter la seule et unique route de mon API pour un bot Twitter. La réflexion n’a pas duré bien longtemps car la seule information vraiment intéressante concerne les dates de sortie des jeux.

Alors pourquoi ne pas faire un bot fêtant ces dates de sortie ?

Comme toujours quand j’ai un concept que je trouve super original, je me suis vite rendu compte que quelqu’un l’avait fait avant moi.
Gameiversary est en effet un compte Twitter qui fête les dates de sortie des jeux vidéo. C’est donc exactement mon idée… mais 5 ans plus tôt.

Je ne me suis pas laissé abattre en me convainquant que mon bot à moi serait français et qu’il ne concernerait que les sorties européennes des jeux Mario. Si ce n’est pas un élément différenciant, ça !

C’est ainsi que, en parallèle de mon premier nouveau projet de l’année (l’API), j’ai commencé un second projet (le bot Twitter).
Tout en NodeJS, il a été très rapide à coder : il fait simplement appel à mon API toute neuve pour ensuite envoyer à Twitter les infos des jeux reçus.

Un petit extrait du code, tout en Promises et async/await.

Puis un terrible doute m’envahit : c’est bien joli de coder avec Node 9 en local, mais quelle était la version utilisée sur le serveur ?
Lors de mes nombreuses expériences sur le site, j’avais en effet mis en place des scripts Node pour manipuler les WebSockets… et non seulement ces scripts datent d’il y a plusieurs années, mais ils tournent toujours aujourd’hui !

Il faut savoir que Meuh n’est pas excellent uniquement pour m’aider à enregistrer des jeux, c’est également l’administrateur système de Mario Universalis. Il m’a alors appris que notre version de Node était la 0.10.29. Passer d’un coup de la version 0.10.29 à la 10.15.0… gloups !

Meuh a quand même effectué la migration et, aussi surprenant que ça puisse paraître, tous les vieux scripts sont restés fonctionnels. Ouf.
Dans la foulée, il a configuré le CRON lançant le script du bot Twitter… et voilà, un joli bot fêtant les anniversaires de jeux Mario !

Une de mes bonnes résolutions pour 2019 était de terminer un projet perso. Dès le 11 janvier, cet objectif était déjà coché !

Ce projet de bot Twitter n’est pas extraordinairement compliqué, mais c’était très amusant à mettre en place. C’était également une bonne occasion de se replonger dans de vieux projets, et de se moquer un peu de moi-même quant à la qualité du code que j’écrivais à l’époque… Un peu d’auto-dérision n’a jamais fait de mal à personne !

Mon prochain défi est de compléter l’API et, pourquoi pas, de la publier afin que d’autres personnes puissent l’exploiter. Qui sait quel genre d’application pourrait être réalisé avec de telles données sur les jeux Mario ?

En espérant que ce petit retour d’expérience sans prétention vous a plu !

--

--

Adrien Guéret

Front-End developer, working at OpenClassrooms. Also Nintendo enthusiast :)