Suivre ses mails gmail dans un terminal : ou comment rendre sa pause intéressante
Au détours d’une lecture ce matin, un one-liner pour afficher le résumé
des mails non lu d’un compte gmail, le tout dans une console.
Le lien en question, et oui c’est du google cache, car la page n’était pas
disponible autrement.
http://www.google.fr/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=0CA0QIDAA&url=http%3A%2F%2Fwebcache.googleusercontent.com%2Fsearch%3Fq%3Dcache%3AT90RVa8DwvAJ%3Awww.pc-freak.net%2Fblog%2Fhow-to-quickly-check-unread-gmail-emails-on-gnu-linux-one-liner-script%2F%2B%26cd%3D1%26hl%3Dfr%26ct%3Dclnk%26gl%3Dfr%26client%3Dfirefox-a&ei=dNPFT_XXD-K-0QX9zY3YBQ&usg=AFQjCNEAspkWKI5HODOa8RaNy5LTPokUvQ&sig2=LfeMq7c3o5meFHTrwY3PJQ
Donc le monsieur, propose tout simplement d’utiliser le flux atom des
mails, pour avoir une vue des nouveaux mails. Rigolo, et un peu
franchement inutile, je me dis qu’il est temps d’utiliser ma pause
intelligemment, hop on test.
Résultât des courses, ça marche pas…. Vexant !
Je veux mon one-liner, mais je le veux plus simple, plus efficace. Alors
on reprend le sujet et c’est parti.
Objectif du jour : avoir dans un terminal, la liste des mails non lu d’un compte gmail. Le tout rafraîchi régulièrement.
Contrainte : réduire le one-liner à un nombre ultra réduit de commande, donc 2.
La première pour récupérer le flux, la seconde pour le formater.
La récupération peux se faire via curl en se connectant à l’adresse :
https://mail.google.com/mail/feed/atom :
Si vous êtes dans une entreprise, il y a forte chance que vous soyez obligé de passer par un proxy. Dans ce cas il faut ajouter la partie authentification sur le proxy :
Le contenu de notre résumé du mail, est dans les balises summary
L’adresse de l’expéditeur dans les balises email et l’objet du mail dans title
Donc on va filtrer notre flux et supprimer les balises, avec un petit awk:
Notre one-liner ressemble donc à :
Ok on a notre flux. Reste plus qu’a rafraîchir notre affichage périodiquement.
2 possibilités : cron ou watch, en commande directe ou dans un script.
On est joueur, non ? De toute façon ça sert à rien, donc autant en profiter allez hop, on va donc utiliser watch et lui passer directement notre script, donc la commande à lancer (et oui on vient de dépasser le one-liner de 2 commande pour passer à trois) :
Petite traduction : on rafraîchi toutes les 60 secondes, et on supprime l’en-tête de la commande watch. Pour que la commande watch fonctionne avec notre awk il a fallu :
1 – passer la commande entre double quote
2 – protéger par un anti-slach, les anti-slash et les doubles quotes, ainsi que les $.
C’est bien et pas assez. En faite, je préfère avoir l’objet du mail et l’expéditeur. Donc une petite modification, et notre one-liner ressemble à :
Une autre traduction rapide, celle du awk : on filtre notre flux pour ne récupérer que les balises email et title. Si notre ligne de traitement contient email, alors on affiche « Par : » suivis de l’adresse mail extraite. Le cas échéant on affiche notre objet.
Le seul truc qui est dommage est que google a positionné dans son flux xml, l’email après l’objet ou le résumé, m’obligeant à afficher l’adresse de l’expéditeur après le sujet/résumé.
Donc si on veux l’affichage inverse, le one-liner passe à 3 commandes – enfin 4 – (version derrière un proxy) :
Et voila, la pause est fini, retour au travail