Dropbox-Benachrichtigungen in Podio nach Ende des RSS-Feeds

, Python


Dropbox hat angekündigt, zum 14. Dezember den RSS-Feed für Ereignisse zu deaktivieren. Bislang haben wir damit für Datei-Uploads in die Dropbox Benachrichtigungen in Podio erzeugt — Rechnungen einscannen, einfach in einen Dropbox-Ordner schieben, und der Empfänger merkt das in seinem Podio: sehr praktisch. Im Folgenden wird ein alternativer Weg über Automatisierungs-Tools wie Zapier diskutiert, aber dann ein ganz anderer über ein lokales Python-Skript vorgestellt.

Dropbox-Ereignisse

In Podio sind zwei Dropbox-Themen relevant:

In Podio kann man einen RSS-Feed durch eine App auslesen lassen; es wird pro RSS-Beitrag ein Podio-Eintrag erzeugt. Nach dem EOL am 14.12. wird dies mit der Dropbox nicht mehr funktionieren. Laut Dropbox möge man in Zukunft bitte stattdessen auf einem der drei folgenden Wege zu Informationen über neue Dateien in der Dropbox kommen (wenn man sie nicht zufällig mit seinen Desktop-Benachrichtigungen über den Bildschirm huschen sieht):

Zapier & Co.

Es gibt mittlerweile einige kostenpflichtige Dienste, die einem die Schnittstellenprogrammierung abnehmen und die Verknüpfung zweier Cloud-Apps mit einigen Klicks ermöglichen (wobei es bisweilen ganz so glatt dann doch nicht läuft). Der größte Anbieter, der auch Podio “kann”, ist Zapier, aber es gibt auch ein paar andere mit ähnlichem Angebot. Allen gemein ist, daß sie pro Ereignis “feuern”, d.h. mit jeder hochgeladenen Datei wird auch auf Podio ein Ereignis ausgelöst, z.B. das Anlegen eines neuen Eintrags in einer App oder einer Aufgabe.

Das ähnelt der nun bald obsoleten Methoden mit dem RSS-Feed — und auch da schon hat es genervt, für 20 hochgeladene Dateien nicht eine, sondern 20 Benachrichtigungen zu bekommen. Und wenn man es schon neu macht, dann doch auch an dieser Stelle gleich besser, so unsere Anforderung.

Man kann hergehen und mit GlobiFlow aufwendige Filter schreiben, die prüfen, ob man am selben Tag schon einmal einen Eintrag oder eine Aufgabe auf Podio wegen neuer Dateien in demselben Dropbox-Briefkasten hatte und dann diese Doubletten nicht anlegen oder gleich löschen. Der Aufwand dafür erscheint aber eher größer als der für einen ganz anderen Weg, der genau das automatisiert, was man als Projektmanager selbst machen würde, wenn es keine Automatisierung gäbe. Nämlich erstens in den (oder die) Dropbox-Ordner im Datei-Manager/Finder auf dem eigenen Rechner hineinsehen, ob was Neues drin ist, und falls ja, zweitens die daraus folgende Aufgabe(n) zu formulieren und in den Backlog oder jemandes Aufgabenliste legen.

Leser, die sich für Geschäftsprozesse interessieren, aber nicht selbst programmieren, müssen hier nicht mehr weiterlesen — außer, die Neugierde siegt!

Dropbox – Lokales Python-Skript – Email

Das folgende Skript mit dem Namen DropboxNotif.py tut dieses:

#! /Users/meinUsername/anaconda3/bin/python
import os
import smtplib
import re
server = smtplib.SMTP('smtp.meinProvider.de', 587)
server.starttls()
server.login("mein@benutzername.de", "meinEmail-Passwort")
lokaler_db_pfad = '/Users/meinUsername/Dropbox/'
ordner = {
'Briefkasten1' : lokaler_db_pfad + 'Ordnername1',
'Briefkasten2' : lokaler_db_pfad + 'Ordnername2',
'Briefkasten3' : lokaler_db_pfad + 'Ordnername3'
# ggf. weitere oder weniger Dropbox-Ordner...
}
def pruefen_ob_neue(pfad):
if os.listdir(pfad) == ['.DS_Store', '.dropbox']:
return False
elif os.listdir(pfad) == ['.DS_Store', 'Icon\r', '.dropbox']:
return False
else:
return True
def message_string(ordner_key, ordner_value):
subject_str = 'Subject: Dropbox ' + ordner_key + ': neue Dateien' + '\n'
body_str = '\n'.join(os.listdir(ordner_value)) + '\n' # Dateiliste
body_str = re.sub(r'[^\x00-\x7F]+',' ', body_str) # Non-ASCII-Zeichen weg
message_str = 'From: Fritz Feger <mail@fritzfeger.de>\n' + \
'To: Podio <meineApp.App-ID@meinWorkspace.meineOrganisation.podio.com>\n' + \
subject_str + \
'\n' + \
body_str
return message_str
# falls neue Dateien, Message erzeugen und Email verschicken
for k, v in ordner.items():
if pruefen_ob_neue(ordner.get(k)) == True:
message = message_string(k, v)
server.sendmail('mein@benutzername.de', 'meineApp.App-ID@meinWorkspace.meineOrganisation.podio.com', message)
else:
pass
server.quit()

Angelegte Podio-Einträge mit GlobiFlow vervollständigen

Eine Mail hat nicht viele Felder, und wenn Podio eine empfängt, kann man sich lediglich dafür entscheiden, welches Textfeld vom Betreff und welches Textfeld vom Textkörpfer der Mail ausgefüllt werden sollen. Weitere wichtige Felder kann dann GlobiFlow ausfüllen:

Podio-Screenshot

Der Flow wird getriggert durch ein neu angelegtes Item, aber nicht durch jedes, sondern nur durch welche mit genau dem Betreff, den wir oben im Python-Script festgelegt haben — in diesem Fall “Dropbox FF: neue Dateien”. Weil wir ja wissen, zu welchem Briefkasten diese Mail gehört, fällt es leicht, Details wie in unserem Fall eine Kostenstelle oder ein verantwortliches Team-Mitglied zuzuweisen. Hier haben wir auch ein Wiedervorlage-Datumsfeld, das auf den Folgetag eingestellt wird.

Tägliches automatisches Ausführen

Das täglich (oder häufiger oder seltener) auszuführende Bash-Skript ist unter OSX ziemlich kurz, unter Windows und Linux sieht es anders aus:

#!/bin/bash
/Users/meinUsername/anaconda3/bin/python DropboxNotif.py

Auf allen Plattformen läßt sich ein solches Skript mit einem cronjob steuern. Man kann es sich auch etwas bequemer machen, auf dem Mac etwa mit der kleinen App Launch Control (selten häßliche Benutzeroberfläche, aber funktioniert):

Podio-Screenshot

Schlagwörter: Dropbox, GlobiFlow, Podio, Python, Zapier