David Madore's WebLog: Où je décide de jouer avec Twitter

Index of all entries / Index de toutes les entréesXML (RSS 1.0) • Recent comments / Commentaires récents

↓Entry #2536 [older| permalink|newer] / ↓Entrée #2536 [précédente| permalien|suivante] ↓

(samedi)

Où je décide de jouer avec Twitter

Il n'est pas complètement à exclure que la concision acérée dans l'expression de mes idées, jointe à la chasse impitoyable aux circonlocutions inutiles, ne dénombrent pas parmi les qualités pour lesquelles je suis le plus renommé.[#] Sans doute ne fais-je pas partie de ceux qui, à l'instar du président américain, savent rendre toute la sobre richesse de leur pensée dans l'implacable carcan des 280 caractères : nous autres esprits plus médiocres devons répandre notre logorrhée dans les cercles décidément moins reconnus des blogs personnels.

Malgré ça, je me suis déjà souvent dit que je devrais me créer un compte Twitter, ne serait-ce que parce qu'en lecture, c'est une source d'information indubitablement utile, et que tant qu'à faire je pourrais m'en servir à la fois pour annoncer les entrées que je publie dans ce blog, et aussi pour poster des choses trop courtes pour que j'ose en faire une nouvelle entrée (il ne faudrait pas saboter ma réputation de verbomane).

Je n'aime pas trop le fait que Twitter soit une plate-forme propriétaire[#2], mais en fait, j'utilise beaucoup MathOverflow (une instance de StackExchange), qui n'est pas spécialement moins propriétaire que Twitter. Et à la réflexion, je me suis dit que ce que je considérais le plus important, c'était que mes données ne restent pas prisonnières de la plate-forme.

C'est-à-dire que je tiens à pouvoir garder une copie de tout ce que j'y fais de sorte que toute cette information soit encore disponible si la plate-forme disparaît un jour. S'agissant de StackExchange, j'utilise déjà leur API pour garder une copie personnelle de tout ce que je poste sur MathOverflow (ainsi que toutes les questions auxquelles je réponds, toutes les réponses à mes questions, et d'autres choses de ce genre). J'avais commencé avec Reddit (dont j'essaie actuellement de me tenir éloigné parce que c'est décidément trop chronophage). Dès lors, il n'y a pas spécialement de raison de ne pas me créer un compte Twitter selon la même logique, puisqu'il y a une API qui permet a minima de récupérer toutes les informations disponibles par leur interface Web ou application Android. (Ce n'était pas évident quand on lit la page vers laquelle je viens de lier, qui a l'air de concerner uniquement des usages corporate, qu'on puisse ouvrir un compte API gratuitement et s'en servir pour faire de l'archivage, mais apparemment c'est le cas puisque j'ai réussi. En revanche, s'agissant de Facebook, je n'ai pas vraiment l'impression qu'une telle API existe : leurs interfaces semblent vraiment orientées vers les gens qui veulent faire de la pub, développer des jeux Facebook, ce genre de choses, et pas archiver leurs propres données[#3].)[#4][#5]

Bon, ce n'est pas tout qu'une API existe, il faut encore arriver à s'en servir. Heureusement, s'agissant de celle de Twitter, il y a une bibliothèque Perl, le langage que je préfère quand il s'agit d'écrire ce genre de scripts. La difficulté, ensuite, c'est de comprendre comment l'API fonctionne, parce qu'il y a toujours plein de choses qui ne sont pas, ou qui sont très mal, documentées : ce n'est dit nulle part, par exemple, que le texte d'un tweet est renvoyé sous forme HTML-échappée (un ‘&’ est retourné comme &, par exemple, ce qui est bizarre parce que, fondamentalement, un tweet n'est pas du HTML, donc il n'y a aucune raison de l'échapper de la sorte) ; et c'est encore moins dit si la position des hashtags, URL et compagnie renvoyée par l'API est comptée en caractères avant ou après échappement (ou d'ailleurs si ces caractères sont vraiment des caractères Unicode ou des unités de codage UTF-16 comme en Java ; expérimentalement, ce sont bien des caractères Unicode, et ils sont comptés après échappement HTML[#6]). Il faut aussi se dépatouiller de la demi-douzaine de façons différentes dont on peut « retweeter » sur ce machin, qui sont mal expliquées et certaines, je crois le deviner, obsolètes[#7].

Je crois avoir vaincu ces petites difficultés techniques et produit un programme qui archive tout ce que je tweeterai, que je mettrai en ligne sur cette page (qui ne sera pas mise à jour en temps réel, puisqu'elle est surtout destinée à être une archive, mais probablement assez souvent quand même). Je vais certainement découvrir de nouvelles subtilités de l'API, mais j'imagine que je saurai m'en sortir.

Voilà, j'ai réussi à dire en beaucoup plus que 280 caractères, et avec sept notes en bas de page, ce qui tenait finalement en 36 caractères :

Bref, j'ai ouvert un compte Twitter.

[#] Pourtant, quand j'étais lycéen, je me tirais plutôt bien de l'épreuve de résumé du bac français. (Je mettais d'ailleurs un point d'honneur à rendre toujours le nombre exact de mots demandés, sans jamais exploiter la marge de ±10% permise.) C'est peut-être parce qu'il est plus facile de sabrer dans la pensée d'autrui que dans la sienne propre. ☺

[#2] Il y a bien des alternatives comme Mastodon, qui ont parfois des idées intéressantes, mais il y a le problème de l'effet de Matthieu — sous la forme que ce qui fait l'intérêt d'un réseau social, c'est le contenu qui est déjà dessus, donc les utilisateurs attirent les autres utilisateurs, d'où le fait que le succès appartienne à celui qui a eu le hasard de réussir (en premier). Je ne sais pas comment on peut lutter contre ça. (Par ailleurs, Mastodon a d'autres problèmes, comme le fait qu'ils n'ont pas pu/su/voulu créer un namespace unique pour les noms d'utilisateurs et qu'on se retrouve donc avec des noms à rallonge aussi ridicules que si tout le monde se nommait par son adresse mail.)

[#3] Alors vous allez me dire, il y a quand même moyen de récupérer toutes les informations qu'on a sur Facebook (le RGPD doit plus ou moins l'imposer). Mais s'il n'y a pas un mécanisme pour le faire de façon incrémentale (je n'ai pas envie, tous les jours, de récupérer tout ce que j'ai fait sur la plate-forme depuis que j'ai commencé à m'en servir !), et éventuellement filtrée, ce n'est pas très utile. Bref, il faut une API.

[#4] À ce sujet, je reconnais parfaitement la validité de la critique suivante : j'ai mis en place un système de commentaires sur ce blog, et je n'ai pas créé d'API pour interagir avec. Je le sais, et ça m'embête. Pour ma défense : (1) il n'y a aucun mécanisme d'authentification, pas de notion de compte ou quoi que ce soit de ce genre, donc je ne peux pas proposer à quelqu'un de récupérer toutes ses données, je n'ai moi-même pas trace de quel commentaire appartient vraiment à qui, (2) comme le HTML que je sers est très propre et que les URL sont assez évidentes, il serait simple à scripter, donc si quelqu'un trouve vraiment mon interface insupportable, il peut faire ça, et (3) j'ai depuis Une Éternité® de réécrire ce système de commentaire, qui est un vieux script Perl bien moisi qui ne permet même pas de faire du HTML basique et ne permet les liens qu'avec une syntaxe chiante que personne n'a envie de respecter, je n'ai jamais trouvé le temps pour changer tout ça, mais si un jour je le fais, une API minimale pour lire les commentaires sera incluse.

[#5] Ce n'est pas qu'une question d'archivage (au sens : garder pour l'Éternité), d'ailleurs : c'est aussi une question de recherche. J'aime bien pouvoir retrouver ce que j'ai déjà écrit sur tel ou tel sujet, et pour ça, la commande egrep est extrêmement précieuse… à condition d'avoir les données sous une forme grepable.

[#6] C'est un chouïa illogique, comme façon de faire, mais je suppose que ça simplifie le boulot des gens qui veulent produire du HTML facilement à partir d'un Tweet, qui sont probablement les plus importants consommateurs de l'API.

[#7] Est-ce qu'on peut faire un native retweet par l'interface Web ? J'ai essayé d'en faire un sans modifier le message, et il a quand même enregistré un tweet commençant en interne par RT.

↑Entry #2536 [older| permalink|newer] / ↑Entrée #2536 [précédente| permalien|suivante] ↑

Recent entries / Entrées récentesIndex of all entries / Index de toutes les entrées