GBach - Check della propria casella GMail via Bash
L'ho chiamato GBaCh, che sta per GMail Bash Checker.
Cosa fa
Come ho spiegato nell'altro post, non tutti sanno che GMail offre un feed atom della propria casella di posta.È sufficiente recarsi col proprio browser all'indirizzo https://mail.google.com/mail/feed/atom:
Nelle righe evidenziate vediamo chiaramente l'oggetto delle email che ci sono arrivate: gli oggetti sono racchiusi all'interno del tag title, così come l'intestazione della mailbox, ma sappiamo che è la prima riga e perciò non è un problema.
Gmail - Inbox for INDIRIZZO@gmail.com
New messages in your Gmail Inbox
2
2014-05-18T20:36:19Z
Seconda email di prova
Prova. -- “If you have an apple and I have an apple and we exchange these apples then you and I will
2014-05-18T20:36:16Z
2014-05-18T20:36:16Z
tag:gmail.google.com,2004:1468473411071896214
me
INDIRIZZO@gmail.com
Email di prova
Prova. -- “If you have an apple and I have an apple and we exchange these apples then you and I will
2014-05-18T20:35:37Z
2014-05-18T20:35:37Z
tag:gmail.google.com,2004:1468473369708751755
me
INDIRIZZO@gmail.com
Quello che lo script fa è quindi isolare queste righe e poi stampare i campi oggetto riga per riga.
Come lo fa
Innanzitutto sono previste due modalità di utilizzo: interattiva e non-interattiva. Nel codice sono presenti le variabili $user e $password; se non sono settate, lo script lavora in modalità interattiva, cioè chiede le credenziali di google, altrimenti va da solo (importante se lo si usa con Conky).Ora analizziamo uno alla volta i frammenti principali di codice.
Donwload e filtraggio del feed
mail=$(curl -u $user:$password --silent "https://mail.google.com/mail/feed/atom" | sed -n '/<title>/p' | sed s/\<title\>//g| sed s/\"\;/\"/g);Questa riga di codice semplicemente scarica il feed, isola le righe che iniziano con "<title>", rimuove i tag <title> ed infine converte gli " in ". Occhio, stiamo eliminando solo i tag <title> di apertura, il motivo per cui quelli di chiusura li teniamo lo vediamo tra pochissimo.
Dunque, in output abbiamo una riga fatta così:
intestazione mailbox </title> oggetto #1 </title> oggetto #2 </title>Possiamo vederla come separata in campi, delimitati da </title> (ecco perché li abbiamo tenuti!). Ci viene quindi in aiuto il nostro fido Awk.
Conteggio e stampa dei campi oggetto
# fields number = n_email + 1Nel primo blocco contiamo quante email abbiamo, mentre nel secondo, iteriamo (dal secondo campo) e stampiamo il contenuto di ogni campo in una riga diversa.
if [[ $mail != "" ]]
then
n_email=$(echo $mail | awk -F '</title>' '{print NF}');
n_email=$(echo "$n_email - 2" | bc)
fi
echo -e "($n_email)";
# printing the titles of the emails one per line
if [[ $n_email > 0 ]]
then
echo $mail | awk 'BEGIN { RS = "" ; FS = "</title>" } { for (i = 2; i <= NF-1; i++) print "-",$i }'
fi
Conky!
Può essere comodo avere l'output dello script a schermo. Conky è il nostro fidato amico con cui possiamo anche schedulare l'esecuzione dello script:${texeci 60 sh ~/gbach.sh}Ipotizzando che il nostro script si trovi nella home.