Poor Man Push III – Python fügt alles zusammen

Die push Nachrichten verschickt der arme Mann mit einem kleinen Programm auf seinem Rechner. Als Betreiber eines kleinen Blogs freut er sich über eine dreistellige Zahl von Lesern, die mit einer push Nachricht auf neue Blogbeiträge hingewiesen werden wollen. Mit einem kleinen Pythonskript kann er push Nachrichten verschicken, die seine Leser informieren, dass ein neuer Bericht erschienen ist. Er kann sicher sein, dass keine weiteren Daten seiner Leser abgegriffen werden, wie ich das schon beschrieben habe.

An dieser Stelle beschreibe ich dieses Python Skript und wie aus dem letzten Teil sich das Ganze wieder zusammenfügt. Bisher hatte ich nur Front- und Backend getrennt betrachtet. Wenn alles zusammenkommt, hakt es an manchen Stellen noch ein wenig. Das war bisher bei jedem Projekt so.

Virtualenv

Python ist auf dem Mac vorinstalliert. Das ist auf der einen Seite ganz praktisch, weil damit viele Skripte einfach laufen. Auf der anderen Seite heißt das aber auch, dass diese Skripte eine bestimmte Version von Python erwarten. Wenn ich hier nun etwas Neues hinein installiere, kann es sein, dass diese Skripte hinterher nicht mehr funktionieren.

Was tun?

Zunächst virtualenv installieren. Das ist ein Python Skript, das die installierte Python Version in ein Unterverzeichnis kopiert. In diesem Verzeichnis kann ich dann auf der Kommandozeile (bash) den Befehl “source bin/activate” eingeben. Das setzt meine Umgebung so, dass Python aus der Kopie verwendet wird. So habe ich ein lokales Python, das ich verändern kann, wie ich will. Das ursprüngliche installierte Python für alle anderen Programme und Systeme bleibt erhalten.

Beim Mac OS sollte man das so machen. Es kann immer sein, dass eine Software nur mit der original Python Variante arbeiten kann.

Pywebpush

Es gibt einige Bibliotheken, mit denen push Nachrichten geschickt werden können. Die mehr oder weniger offizielle Dokumentation des Verfahrens empfiehlt explizit deren Verwendung.

Für Python habe ich pywebpush gefunden. Es läuft unter der MIT Lizenz und funktioniert einfach. Die Probeanwendung reicht für den Anfang aus. Damit hatte ich ein Programm zum Senden der einen Nachricht nach einem Browser.

Das war dann der Teil für den Rumpf der Schleife über alle Subscriptions, die die REST Ressource bei einer GET Abfrage zurückliefert. Da ich häufig den An- und Abmeldevorgang ausprobiert hatte, waren in der Ressource viele abgemeldeten Subscriptions. Die DELETE Abfrage löschte diese Subscripitons aus der Ressource, wenn das webpush den Statuscodes 401 zurückgab. Am Ende meines ersten Tests waren in der MariaDB auf dem gemieteten Host zeigte nur noch zwei Einträge in der Tabelle mit den Subscriptions: Mein Smartphone und mein Mac.

Ab da fiel mir auf, dass eine Push Nachricht nur angezeigt wird. Aber der Click, der dann eine Webseite öffnet, war noch nicht funktioniert. Schnell erweiterte ich die Push Nachricht von reinem Text zu einem JSON Objekt mit zwei Eigenschaften: Einer URL als Ziel für den Browser und einer Textnachricht zum Anzeigen. Das galt es dann auch in den service worker der Webseite einzubauen.

So ist es immer, wenn ein Produkt zusammengebaut wird. Zum Schluss sieht man, was alles noch so fehlt. Bei einem guten Design können diese Dinge schnell eingebaut werden.

Eine weitere Erweiterung wäre noch ein Typ der Nachricht. In der ersten Version weist eine push Nachricht nur auf einen neuen Artikel hin. Später könnte aber auch gefragt werden, ob dies oder das beschrieben werden soll. Dann sollten die Leser auch bestimmen können, welche Nachrichten sie genau bekommen wollen.

All das kann noch wachsen!

Resumee

Auf Github habe ich in einem Repository alle Quellen soweit zusammen gestellt, dass auch andere diesen Ansatz verwenden können.

Schreibe einen Kommentar

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