Hi. Ich habe die letzten Tage mal wieder an der App gebastelt.
Zum einen habe ich das UI etwas überarbeitet und neue Ladebalken hinzugefügt:
Die größere Neuheit ist jedoch die Möglichkeit, sich die nächstgelegenen Freifunk-Router anzeigen zu lassen:
Mit einem Klick auf einen Router wird Android angewiesen, eine Liste von auf dem Gerät befindlichen Apps zur Auswahl anzubieten, die in der Lage sind, Geokoordinaten zu verarbeiten.
Es gibt jedoch ein Problem: Das Sammeln der Postitionsdaten und Onlinestatus-Angaben. Momentan befinden sich etwas mehr als 200 Links zu API Files im API Directory. Diese alle in der App herunterzuladen, nach Links zu Karten und Positionsdaten zu durchsuchen, um dann wiederum die gefundenen Dateien mit den Routerdaten herunterzuladen, dauert zu lange, um sich mal eben schnell anzeigen zu lassen, welche Router in der Nähe sind. Daher nimmt die App momentan Routerdaten, die lokal in einer Datei auf dem Smartphone gespeichert sind.
Diese lokale Datei wurde mit einem selbstgeschriebenen Python-Script erstellt. Dieses lädt sich das API Directory herunter, um dann mit den darin enthaltenen Links die API Files der einzelnen Communities zu parsen. Dabei wird dann nach Links zu ffmaps und nodelist Einträgen gesucht und versucht, an die Positionsdaten der Router zu gelangen. Dies ist vor allem bei ffmaps nicht ganz einfach, da die API Files in der Regel den Link zu der Karte enthalten, die im Brower angezeigt werden soll, aber nicht den Link zur nodes.json Datei, die die Positionsdaten enhält. Diese lässt sich aber meistens im selben Verzeichnis unter nodes.json finden. So konnte ich schon mal Daten zu etwa 15.000 Router finden. Das Script gibts hier: GitHub - WIStudent/FreifunkNodeLocationCrawler: A script that crawls Freifunk node locations from different community maps.
Damit in der App nun immer halbwegs aktuelle Daten vorliegen, habe ich mir folgendes gedacht. Das Crawler-Script müsste auf einem Server alle paar Stunden ausgeführt und die daraus resultierende json Datei über eine feste URL zugänglich gemacht werden. Das Script schreibt bei jedem Erzeugen der json Datei auch einen Timestamp des Erstellungszeitpunktes hinein. Die App soll nun, wenn sie die nächstgelegenen Router bestimmt, prüfen, ob online eine neuere Datei verfügbar ist. Um den Traffic zu reduzieren, soll die App die letzte geladene Datei speichern. Bevor sie beim nächsten mal prüft, ob online eine neue Datei verfügbar ist, soll sie zunächst schauen, wie alt die lokale Datei ist. Wenn die Datei auf dem Server z. B. alle 3 Stunden neu erstellt wird, die lokale Datei in der App aber erst vor 2 Std. erstellt wurde, dann braucht die App den Server erst gar nicht zu belästigen.
Problem ist nur, dass ich keinen Webspace/Server habe. Ich könne nun das Script bei mir automatisch alle paar Stunden auf einem Raspberry Pi ausführen lassen und die Datei dann per FTP zu irgendeinem Anbieter von Gratis-Webspace hochladen, aber vielleicht weiß hier jemand auch eine elegantere Lösung.