Script bash per sapere il numero di email non lette su GMail
Allora, io direi che è meglio se vediamo prima tutto il codice, così lo analizziamo.
#! /bin/bashInnanzitutto, vengono richiesti il nome utente e la password mediante il comando read. Il parametro -s della read sta per silent, cioè non mostra ciò che si scrive durante la digitazione.
echo -e "\nnome utente:";
read nome
echo -e "\npassword:";
read -s pwd
mail=$(curl -u $nome:$pwd --silent "https://mail.google.com/mail/feed/atom" | sed -n '/<fullcount>/p' | tr "<fullcount>,</fullcount>" " ");
echo -e "\n---------------------------------\nEmail non lette: $mail\n---------------------------------\n";
exit 0;
Inizia ora la parte interessante, che si concentra nella riga 9 del codice appena mostrato, che vediamo passo passo.
mail=$(curl -u $nome:$pwd --silent "https://mail.google.com/mail/feed/atom"Lo scopo è far sì che la variabile mail contenga il numero di email non lette. Per prelevare il feed atom della casella di posta sfruttiamo curl e visto che è richiesta una autenticazione, usiamo il parametro -u, cui seguono ovviamente nome utente e password; con --silent non viene mostrato niente a schermo.
Quel che otteniamo grazie a curl è qualcosa del genere:
<?xml version="1.0" encoding="UTF-8"?>La riga 9 contiene il numero di email non lette. Dobbiamo isolare lei e poi isolare il numeretto che contiene. Qui entra in scena sed.
<feed version="0.3" xmlns="http://purl.org/atom/ns#">
<title>Gmail - Inbox for andovais@gmail.com</title>
<tagline>New messages in your Gmail Inbox</tagline>
<fullcount>0</fullcount>
<link rel="alternate" href="http://mail.google.com/mail" type="text/html" />
<modified>2012-01-14T23:40:54Z</modified>
</feed>
sed -n '/<fullcount>/p'Grazie alla pipe diamo il feed in pasto al nostro amico sed e gli diciamo di stampare la riga contenente il pattern "<fullcount>", col parametro -n gli diciamo di stampare solo quella. Otteniamo qualcosa del tipo:
<fullcount>0</fullcount>Sempre grazie ad una pipe, dirigiamo l'output al suo ultimo lido: tr.
tr "<fullcount>,</fullcount>" " "Con tr convertiamo i tag xml in spazi vuoti, lasciando solo soletto il numero che stava lì in mezzo.
Adesso quindi la variabile $mail contiene il numero di email non lette (nel mio caso zero), ne stampiamo a video il contenuto et voilà :D
Spero di essere stato abbastanza chiaro e di non aver scritto boiate, soprattutto su sed, che praticamente non conosco. Sicuramente esiste una soluzione migliore, ma questa funziona e ciò mi basta :)
p.s. L'immagine del post utilizza un icona di DsynFLO Creations, che potete trovare qui.