Allgemein

It’s all about the numbers – runalyze2video

Demletzt hatte ich es ja schon angeteasert: Aktuell bastel ich immer mal wieder an einem kleinen Softwareprojekt herum. Dabei geht es um ein Python-Tool, mit dem man sich kleine Statistikvideos für die Instagram-Story und ähnliches erzeugen lassen kann. Dabei werden Daten von runalyze.com verwendet. Und bevor jetzt irgendein Bedenkenträger den Finger hebt – da Runalyze noch keinen Lesezugriff für die API hat, bleibt der JSON-Endpunkt als einzige Option und das ist auch mit einem der Betreiber so abgesprochen. Okay, es gibt noch eine andere Option, das wäre ein Parsen des Quelltextes und so hatte ich es zuerst auch gebaut, aber dann kam vom Betreiber der Hinweis auf den JSON-Endpunkt.

Was passiert da so?

Das Tool kann zunächst in drei verschiedenen Modi laufen. Es kann die letzte Kalenderwoche, der letzte Kalendermonat oder ein benutzerdefinierter Datumsbereich verarbeitet werden. Anschließend werden die Daten von Runalyze heruntergeladen, sofern der letzte Download nicht weniger als 23 Stunden zurückliegt. Dieser lange Abstand soll zu hohe Last bei Runalyze verhindern, wenngleich nach Aussage des Entwicklers allein das Laden des Dashboards mehr Druck bringt. Aber wenn man Gast ist, benimmt man sich schließlich.

Die Daten werden dann in eine Datenbank geschrieben. Sind dort schon Daten vorhanden, werden die zunächst gesichert, bevor die eigentliche Datentabelle überschrieben wird. Damit ist der ganze Krempel erstmal lokal vorhanden und kann mit weiteren Läufen des Tools verarbeitet werden.

Im nächsten Schritt werden die Daten für den vorgegebenen Zeitraum aus der Datenbank geholt und in ein pandas Dataframe geschrieben. Bei diesem Schritt werden einige der Daten berechnet, so bspw. die Pace und das Dataframe mit entsprechenden Spalten ergänzt. Das Dataframe ist dann später Grundlage für die Erstellung des Videos, da es, anders als die Datenbank, nur genau die Daten enthält, die im Video verwendet werden sollen.

Als Nächstes wird ein Balkendiagramm erzeugt. Dabei stellt die jeweilige Distanz die Balkenlänge dar und die Dauer, sowie die Pace, werden auf dem Balken angezeigt. Das Diagramm stellt später die untere Bildhälfte im Video dar. Ist das Diagramm fertig, geht es an die Erzeugung des Videos. Dafür wird zunächst ein Intro gebaut, für das das Video einen Titel bekommen kann. Titel und Datumsbereich kommen dann in dieses Intro. Das ist aktuell noch etwas starr, aber ich habe einige Ideen, wie man das noch deutlich besser machen kann.

Nach dem Intro folgt der nächste Videoabschnitt, bei dem nach und nach die wesentlichen Daten (Datum, Distanz, Dauer, Pace) der einzelnen Aktivitäten angezeigt und am Ende als Summe dargestellt werden. Ist das erledigt, werden Intro und Aktivitäten zusammengestöpselt, noch ein Outro angehängt und das fertige Video purzelt ins Zielverzeichnis.

Nutzung

Runalyze2video lässt sich natürlich jederzeit manuell starten, aber auch ein automagischer Lauf ist möglich. Ich selbst nutze bspw. einen Raspberry Pi und auf dem kann so ein Tool ganz entspannt automatisiert werden. Mit dem entsprechenden Eintrag in /etc/crontab kann es zu festgelegten Zeiten starten und wenn das Zielverzeichnis entsprechend festgelegt ist, kann von dort aus entweder manuell oder eben auch automatisch weitergearbeitet werden. Ein Beispieleintrag für /etc/crontab könnte so aussehen:

0 1 1 * * /home/user/runalyze2video/python.py

Und weil so ein cron-Eintrag für viele immer ein Buch mit sieben Siegeln ist, hier kurz eine Erklärung, was das genau bedeutet bzw. tut.

Minute: 0 – Die Minute, in der der Befehl ausgeführt wird. In diesem Fall 59 Minuten nach der 23. Stunde.
Stunde: 1 – Die Stunde, in der der Befehl ausgeführt wird. In diesem Fall 1 Uhr.
Tag: 1 – Der Tag des Monats, an dem der Befehl ausgeführt wird. In diesem Fall 1 für den ersten Tag des Monats.
Monat: * – Der Monat, in dem der Befehl ausgeführt wird. In diesem Fall * für jeden Monat.
Wochentag: * – Der Wochentag, an dem der Befehl ausgeführt wird. In diesem Fall * für jeden Wochentag.
Befehl: /home/user/runalyze2video/python.py – Der Pfad zum auszuführenden Python-Skript.

Ich habe versucht, nach Möglichkeit alles in Variablen zu packen, damit man sich das Programm und damit das daraus resultierende Video so weit es geht an die persönlichen Vorstellungen/Bedürfnisse anpassen kann.

Mitarbeit

Gemeinsam programmieren macht mehr Spaß! Ja und es bringt den Vorteil mit, dass auf diese Weise auch Know-How gebündelt wird. Wenn also jemand dieses Projekt spannend findet und ein wenig bei der Entwicklung helfen will, dann nur zu: https://github.com/Schrottie/runalyze2video

Aktuelle Fehler, die mit Priorität zu behandeln sind, wäre bspw. ein Problem mit der Datenbank, wenn sie initial erzeugt wurde. Außerdem gibt es schon so manche Idee, wie das Video noch deutlich besser und flüssiger werden kann. Aber auch so manch Optimierung in Sachen Automatisierung, weitere Daten oder Multisportfähigkeit wäre noch zu bauen. Von Vorteil ist Erfahrung mit – logisch – Python und speziell mit Dingen wie pandas, matplotlib und opencv.

Kommentar verfassen