Gmail API gmail_inbox_feed

Gmail API: Anzahl neuer Mails mit Shell

Seit längerer Zeit hab ich schon die Idee gehabt, mithilfe des Raspberry Pi und einer LED, neue E-Mails (aus Googlemail) anzeigen zu lassen. Zwischendurch habe ich dies auch schon bei anderen Projekten gesehen, jedoch noch nie wirklich mich damit auseinandergesetzt. Vorgestern sollte es dann so weit sein und ich suchte zunächst nach einer Gmail API, die mir die Anzahl neuer E-Mails ausließt.

Die Gmail API

Fündig wurde ich bei Google Developers mit der gmail_inbox_feed API. Zur Verwendung wird diese URL vorgegeben:

https://mail.google.com/mail/feed/atom

Bist du bei Gmail angemeldet und rufst im Browser die URL auf, sollte sich ein solches XML-Schema zeigen:

Gmail API - Keine E-Mail
Gmail API – Keine E-Mail
Gmail API - Eine neue E-Mail
Gmail API – Eine neue E-Mail

Das erste Bild zeigt das Schema, wenn keine neue E-Mail in deinem Posteingang liegt, das Zweite, wenn mindestens eine neue E-Mail zum Abruf bereit liegt. Bei mehreren neuen E-Mails wiederholt sich der entry-Tag / das entry-Verzeichnis je neuer E-Mail.

Zugriff auf die API

Für mein Ziel, die Anzahl neuer E-Mails auszulesen, genügt der fullcount-Tag dieser Gmail API, da dort die Anzahl bereits ausgegeben wird. Um diese Zahl nun via Shell auslesen zu können, habe ich diesen cURL-Befehl benutzt.

curl -u maxmustermann:passwort -s "https://mail.google.com/mail/feed/atom" | sed -n "s/.*<fullcount>(.*)</fullcount>.*/1/p"

Wird dieser Befehl in der Unix-Shell (z. B. auf deinem Raspberry Pi) ausgeführt, erhält man z.B. „3“ (3 neue E-Mails, maxmustermann und passwort müssen natürlich ersetzt werden)

Zur Erklärung des Befehls:

  • -u maxmustermann:passwort
    Der Parameter -u muss zusammen mit der E-Mail/Benutzername (es reicht der Teil vor dem @) und dem Passwort gesetzt werden. Das ist nötig, um sich bei der Gmail API zu authentifizieren.
  • -s
    Verhindert die Ausgabe von zusätzlichen Informationen.
  • „https://mail.google.com/mail/feed/atom“
    URL der API.
  • |
    Der Pipe Operator/die Umleitung ist dazu da, die Ausgabe des vorherigen Befehls (links des |) als Eingabe für den nächsten Befehl (rechts des |) zu übergeben.
  • sed
    Mit dem Befehl sed kann ein String nach einem bestimmten Muster durchsucht und durch einen neuen ersetzt werden. Kurz: Suchen und Ersetzen.
  • -n
    Verhindert das automatische Ausgeben des Ergebnisses.
  • „s/.*<fullcount>(.*)</fullcount>.*/1/p“
    Suchmuster. Es wird nach dem Inhalt, der zwischen <fullcount> und </fullcount> steht, gesucht und mittels 1/p ausgegeben.

Auswertung des Ergebnisses

Da wir nun die Anzahl neuer E-Mails mittels des Befehls auslesen können, muss das Ergebniss nur noch regelmäßig ausgewertet werden und bei mindestens einer neuen E-Mail die LED einschalten.

Mit einem kleinen Shell-Script lässt sich das leicht realisieren.

#!bin/sh

#Variable definieren
mail_count=0

while true
do
	#Einlesen der Anzahl neuer E-Mails in die Variable mail_count
	mail_count=$(curl -u maxmustermann:passwort -s "https://mail.google.com/mail/feed/atom" | sed -n "s/.*<fullcount>(.*)</fullcount>.*/1/p")

	#Ueberpruefe ob Variable nicht leer ist
	if [ -n $mail_count ]
	then
		#Ueberpruefe ob mail_count groeßer als 0
		if [ $mail_count -gt 0 ]
		then
			#Mindestens eine neue E-Mail
			#LED Einschalten
		else
			#Keine neuen E-Mails
			#LED Ausschalten
		fi
	fi

	#Intervall zum erneuten Pruefen neuer E-Mails (in Sekunden)
	sleep 5
done

Der Code muss nun nur noch in einer .sh-Datei gespeichert und gestartet werden (wie vorhin, „maxmustermann“ durch die E-Mail und „passwort“ durch das Passwort von Googlemail ersetzt).

Du kannst natürlich auch auf andere Werte der Gmail API zugreifen, diese Auslesen und in beliebiger Weiße ausgeben. Z. B. die ganzen E-Mails auslesen und in der Shell / Konsole anzeigen lassen.

Ein Gedanke zu „Gmail API: Anzahl neuer Mails mit Shell“

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert