Benutzer der "alten" Geocaching App der Geocaching-Macher Groundspeak erhalten aktuell eine Meldung, dass ihre Lieblingsapp nur noch bis 23.3.2017 laeuft und danach nicht mehr funktionieren wird. Es gibt diverse alternative Apps, aber neben dieser Qual der Wahl werden eingefleischte Benutzer vor eine weitere Herausforderung gestellt: wie die gespeicherten Listen exportieren?
Die alte Groundspeak App bietet in der Leiste am unteren Bildschirmrand hinter der Option "Gesp." die Moeglichkeit, Caches in Listen zu organisieren. Im gezeigten Beispiel wurden Listen fuer geloeste und ungeloeste Mystery Caches, ausgewaehlte Lost places, diverse Staedtecaches und so weiter angelegt. Die Listen enthalten nicht nur die Caches sondern -- als Option beim Speichern in der Liste -- auch saemtliche zu den Caches gehoerigen Bilder sowie fuer die offline Nutzung sehr wertvolle Karten, so dass nur mit Hilfe der Listen bereits alles auf dem Geraet vorliegt. So kann zum Beispiel von zu Hause aus der Urlaub mit entsprechenden Caches geplant werden, die Karten mit in den Listen abgelegt werden, und im Urlaub muss dann kein teures Datenvolumen benutzt werden.
Ein anderes Anwendungsbeispiel der Listen ist, geloeste Mystery Caches in eine eigene Liste abzulegen, um diese gezielt ansteuern zu koennen.
Die Listen stellen also ueblicherweise eine wertvolle Zusammenstellung dar, die beim Wechsel zu einer anderen App erhalten bleiben sollen. Der Nachteil: Groundspeak hat zum Zeitpunkt der Erstellung der "alten" App anscheinend nie an die nun drohende Abschaltung gedacht, und entsprechend keine Moeglichkeit zum Export der Listen bereitgestellt. Entsprechend gibt es nun keine einfache Moeglichkeit, die Listen zu exportieren.
Im Folgenden wird gezeigt wie dies dennoch mit etwas IT Know-How moeglich ist. Im Fokus dabei ist lediglich die Apple iOS Version der App, als Systemumgebung wird hier Mac OS X benutzt. Benutzer von Microsoft Windows und Android Smartphones sollten die Informationen mit entsprechend anderen Programmen entsprechend uebertragen koennen.
Das Vorgehen im Weiteren ist, zuerst das letzte iPhone Backup heranzuziehen, und dort dann die Daten der Groundspeak Geocaching App zu lokalisieren. In diesen ist eine SQLite Datenbank Datei enthalten, der die Liste der Caches entlockt werden kann. Dies wird nun im Detail beschrieben.
Effektiv werden wir die Daten aus dem iPhone Backup extrahiert. Dies wird von iTunes abgelegt, und das Auslesen geschieht mit einer eigenen Software. Aus den vielen verfuegbaren Programmen dafuer wurde hier der "iBackup Viewer" in Version 3.93 ausgewaehlt. In diesem koennen saemtliche Dateien des iPhone-Backups wie im Datei-Browser gelistet werden.
Beim oeffnen des iBackup Viewers ist zuerst das neueste Backup anzuwaehlen. Beim ausklappen werden dann in der linken Leiste die verschiedenen Daten gezeigt. Neben der SMS-Liste, Terminen und Fotos sind hier primaer die Anwendungsdaten im Ordner "Applications" entscheidend. Ausgewaehlt kann man dann die Liste der installierten Apps durchscrollen, bis man bei der "Geocaching" App von Groundspeak ist. Im Menue hinter dem Zahnrad am oberen Bildschirmrand kann man nun mittels "Save All Files..." alle Dateien der App in einem Ordner der Wahl speichern. Angelegt werden dabei zwei Ordner, "Documents" und "Library".
Die gesuchte Datei liegt im "Documents" Ordner und hat die Endung ".db". Einfach gefunden kann sie im Mac Finder werden, wenn nach Art der Dateien sortiert wird. Der Name der gesuchten Datei ist dabei leider etwas kryptisch, jedoch wird es nur eine einzige .db-Datei geben. In unserem Beispiel ist der Name "c7021ea2-f88a-4cea-a4f8-f8038d2ede1d.db".
Soweit so gut, aber was hat es mit dieser Datei auf sich? Um diese Frage zu beantworten und um der Datei ihre Geheimnisse zu entlocken werden wir diese nun mit den Werkzeugen die mit Mac OS X kommen analysieren. Nach dem Start des Terminals ist zuerst die .db-Datei zu finden. Der file(1) Befehl zeigt, dass es sich um eine SQLite 3.x Datenbank handelt, also um eine vollstaendige SQL Datenbank innerhalb der Datei. Mittels des Mitgelieferten Programmes "sqlite3" kann die Datenbank geoeffnet und analysiert werden.
Freunde grafischer Benutzeroberflaechen seien an dieser Stelle darauf hingewiesen, dass auch der Firefox Webbrowser intern SQLite Datenbanken fuer die Eigenverwaltung benutzt, aehnlich wie die Groundspeak App. Das kann man sich zunutze machen: Es gibt ein "SQLite Manager" Plugin fuer den Firefox, das ein Grafisches User Interface bietet, um die Datenbank zu analysieren. Damit ist auf relativ einfache Art Struktur und Inhalt der einzelnen Datenbank-Tabellen herauszufinden.
Beim erkunden der Tabellen finden sich relativ schnell die beiden relevanten, "groupsV3" und "geocacheToGroupV3". Erstere listet alle Listen (mit diversen Daten) auf, letztere verbindet den GC-Code mit der Liste. Mit ein paar SQL Grundkenntnissen ist der Inhalt der beiden Tabellen schnell ausgelesen, und ebenso einfach ist die Verbindung zwischen den beiden Tabellen hergestellt. Eventuelle Probleme mit Umlaute koennen mit Hilfe des Wildcard-operators "%" umgangen werden.
Diese Erkenntnisse koennen nun kombiniert werden, um den Export zu automatisieren. Zum einen kann sqlite3 im Batch-Modus aufgerufen werden, um die Datenbank-Abfrage zu automatisieren. Zum anderen kann die Ausgabe direkt in eine Datei geschrieben werden, die dann mit beliebigen Werkzeugen ausgelesen und weiterverarbeitet werden kann. Im Beispiel werden die GC-Codes aller in der Liste "Geloeste Mysterien" enthaltenen Caches in die Datei "geloeste-mysteries.txt" gespeichert:
% sqlite3 -batch -cmd 'select cacheCode from groupsV3,geocacheToGroupV3 where geocacheToGroupV3.groupID = groupsV3.id \ and groupsV3.name like "Gel%";' iPhone-Backup/Documents/*-*.db </dev/null >list-GeloesteMysterien.txt % head list-GeloesteMysterien.txt GC13ZJQ GC1AAZD GC4CTD0 GC34273 GC4N12N GC3MJM4 GC5213D GC1M55J GC15ZJW GC1T51H
In der Tat beginnt jetzt der wirklich spannende Teil: Die Liste(n) der GC-Codes koennen wie beschrieben jeweils in eigene Text-Dateien exportiert werden. Aber was nun?
Groundspeak bietet auf www.geocaching.com auch die Verwaltung eigener Listen an, die zumindest in der "neuen" Geocaching App von Groundspeak auch problemlos importiert werden koennen. Problem hierbei ist, dass zu den Listen ueber die Webseite immer nur einzelne Geocaches hinzugefuegt werden koennen, ein "Batch-Import" unserer exportierten GC-Code-Liste ist aktuell nicht vorhanden. Ggf. kann dies auch ohne API-Zugang gescriptet werden, was jedoch mit den Risiken eines gesperrten Accounts einher geht und daher suboptimal ist.
Bei zu automatisierenden Aufgaben bietet die "Project-GC" Webseite oft Hilfe, etwa zum Massen-Discovern von Travel Bugs. Der Vorliegende Anwendungsfall, mehrere GC-Codes einer Liste hinzuzufuegen wird jedoch aktuell nicht angeboten (zumindest soweit dies aus der Sicht eines nicht-zahlenden Mitglieds zu sehen ist). Vielleicht besteht hier ja in den naechsten Wochen erhoehter Bedarf, der an Project-GC herangetragen wird.
Stand heute bleibt am Ende leider nur Handarbeit: Manuelles Eintippen der GC-Codes in die App der Wahl bzw. die Webseite. Dies ist unbefriedigend und bietet Raum fuer weitere Forschungen. Sachdienliche Hinweise werden gerne angenommen und hier verlinkt!
Keinen echten Import der GC-Liste, aber einen moeglichen Umweg bietet die App "looking4cache" an: Bei der Suche nach einem Cache mittels GC-Code kann nicht nur ein einzelner Cache gesucht werden, sondern mehrere. Diese sind dann durch Komma zu trennen, und koennen sodann in eine der programmeigenen Listen importiert werden. Leider existiert eine Obergrenze von maximal 50 Caches die gesucht werden koennen, so dass lange Listen von Caches in Paketen zu max. 50 Caches gesucht und abgelegt werden muessen, und dann zu einer einzigen Liste zusammengelegt werden muessen. Letzteres funktioniert in l4c mittels Drag und Drop sehr gut, so dass dieser Weg einen gangbaren Weg darstellt.
Mit etwas Unix Kenntnissen koennen die GC-Codes aus der erstellten Text-Datei zum einen in Pakete von (zur Sicherheit) 45 Caches gepackt werden, zudem kann aus der Liste mit einem GC-Code pro Zeile auch gleich eine lange Zeile von mittels Komma getrennten Codes erstellt werden:
promise% cat list-GeloesteMysterien.txt | head -45 | sed 's|$|, |' | tr -d '\012' ; echo "" GC13ZJQ, GC1AAZD, GC4CTD0, GC34273, GC4N12N, GC3MJM4, GC5213D, GC1M55J, GC15ZJW, GC1T51H, GC3D4M7, ... (gekuerzt) promise% cat list-GeloesteMysterien.txt | tail +45 | sed 's|$|, |' | tr -d '\012' ; echo "" GC5MX9C, GC2P2JG, GC5HBMG, GC44GQC, GC2JBG8, GC6TF63, GC1G4GP, GC4MPCE, GC34GW3, GC1MKEE, GC63MNW, ... (gekuerzt)
Erklaerung dieses Kauderwelschs gefaellig? Bittesehr: in der ersten Befehlsreihe werden die ersten 45 Eintraege ("head -45") genommen, dann mittels sed(1) das Zeilenende ("$") um ein Komma mit nachfolgendem Leerzeichen ersetzt (sed: "s|alt|neu|" - ersetze alt durch neu) und dann noch der Zeilentrenner (Newline, Oktalcode \012) mittels tr(1) entfernt. Damit bei der Ausgabe am Ende ein Zeilenvorschub kommt dazu noch ein extra echo "".
Die zweite Befehlsreihe ist aehnlich, nur dass hier die ersten 45 Eintraege uebersprungen werden ("tail +45"). Im vorliegenden Fall ist die verbleibende Liste kuerzer als 45-50 Eintraege. Sollte dies der Fall sein koennte man mit einem weiteren "|head -45" die Verkettung wie im ersten Beispiel gezeigt fortfuehren: "cat ... | tail +45 | head -45 | ...". Man beachte die Einfachheit und Eleganz der Unix-Befehle, von denen jeder genau seiner einen Aufgabe nachkommt. Alternative Loesungen sind an dieser Stelle sicherlich zu Hauf moeglich und seien dem geneigten Leser als Aufgabe ueberlassen.
Die oben gezeigten durch Komma getrennten Listen muessen dann vom Rechner auf das iPhone uebertragen werden. Dies kann z.B. durch Cut&Paste und EMail oder mit Webseiten wie pastebin.com geschehen und wird hier nicht weiter gezeigt.
In l4c erfolgt dann die Suche wie gezeigt durch Kommas getrennt. Die Suchergebnisse koennen in eine eigene Liste abgelegt werden, eine fuer jede der Teillisten. In unserem Beispiel zwei Stueck. Am Ende werden diese Listen dann durch Verschieben dann zusammengefuehrt. Voila, sind die Cache-Listen aus der "Classic" Geocaching App in looking4cache importiert!
Stand heute bleibt am Ende leider nur Handarbeit: Manuelles Eintippen der GC-Codes in die App der Wahl bzw. die Geocaching Webseite oder halb-automatisch in looking4cache. Dies ist unbefriedigend und bietet Raum fuer weitere Forschungen. Sachdienliche Hinweise werden gerne angenommen und hier verlinkt!
Vielen Dank an Thomas Reinfelder fuer den entscheidenden Hinweis zum Import in looking4cache.