Willem Prins

Über Geschichte, Technologie und das L(andl)eben

Facebook-Postdaten als persönliche musikalische Zeitmaschine – Teil 2 (2013-2019)

Dies ist der zweite und letzte Teil meiner Reise durch meinen eigenen Facebook-Verlauf, um eine Wiedergabeliste mit Musik zusammenzustellen, die ich in meiner Timeline geteilt habe. Teil 1 finden Sie hier.

Ich fand heraus, dass die Einträge im HTML-Archiv meiner Facebook-Aktivitäten nicht chronologisch sortiert waren

Wenn Sie Ihre Facebook-Daten herunterladen, können Sie diese auf Ihrem Computer oder einem anderen Gerät speichern oder Meta die Erlaubnis erteilen, eine Zip-Datei auf Ihr Google Drive oder Dropbox hochzuladen. Ich fand das sehr praktisch, denn so konnte ich die Daten einfach herunterladen, wann immer sie fertig waren, ohne ein Browserfenster geöffnet halten zu müssen. Nach der Auswahl des Ziels wählt man das Format für den Download, wobei die Optionen HTML und JSON sind. Da ich hauptsächlich daran interessiert war, mein Archiv zu durchsuchen und nichts programmatisch damit zu tun, wählte ich HTML.

Nach dem Entpacken des Archivs erhalten Sie eine große Ordnerstruktur, die verschiedene Arten von Daten enthält. Bei HTML-Downloads enthält der Stammordner eine hilfreiche Datei start_here.html, die als Einstiegspunkt in das Archiv dient.
Der interessanteste Ordner mit der Bezeichnung your_facebook_activity ist auch der größte: In meinem Fall enthält er 235 MB an HTML- und hochgeladenen Mediendateien.

Als ich die HTML-Datei, die alle “Beiträge, Check-Ins, Fotos und Videos” enthält, durchblätterte, stellte ich fest, dass die Einträge nicht chronologisch sortiert waren. Anstatt Beiträge aus dem Jahr 2013 zu finden, stolperte ich über weitere Beiträge und Status-Updates aus dem Jahr 2011, von denen ich dachte, dass ich sie bereits in meinem vorherigen Beitrag behandelt hatte!

Ich habe eine Lösung gefunden, auf die altmodische Art.

Jetzt erinnerte ich mich an Wes Bos’ JavaScript-Kurs für Anfänger, dass es wirklich einfach ist, diese Art von Problemen in HTML-Dokumenten zu beheben, indem man JavaScript in der Konsole verwendet. Da alle Beiträge das gleiche Markup mit einer Datumszeichenkette in einem untergeordneten Element verwenden, dachte ich mir, dass es ziemlich einfach sein würde, die Einträge nach dieser Zeichenkette zu sortieren. Aber mein JavaScript ist eingerostet, also war mein erster Gedanke, Google zu benutzen, um nachzuschauen, wie man in einer Vergleichsfunktion in einen Nachkommen hinabsteigt.

Dabei stieß ich auf einen Thread auf Stack Overflow, in dem die akzeptierte Antwort noch keine Möglichkeit enthielt, ein Datum aus dem untergeordneten Knoten eines Elements zu extrahieren und auf der Grundlage dieser Werte zu vergleichen und zu sortieren. Ich hatte also die Wahl: mich in die Materie einarbeiten und mich mit der Art und Weise vertraut machen, wie JavaScript Werte aus dem DOM holt, oder… AI fragen.

Claude bitten, eine scheinbar zufällig geordnete Liste von Beiträgen und Aktualisierungen zu korrigieren

Als ich mich daran erinnerte, dass es in der Tat 2025 ist, wurde mir klar, dass ich das Problem auch mit einem KI-Agenten lösen könnte. Dies war auch die perfekte Gelegenheit, um die kostenlose GitHub Copilot-Erweiterung in Visual Studio Code auszuprobieren, die ich kürzlich aktiviert hatte. Zu meiner Überraschung lieferte die erste Eingabeaufforderung, die ich an Claude Sonnet 3.5 weitergab, ein Ergebnis, das zur Lösung meines Problems ausreichte:

Können Sie mir helfen, ein JS-Skript zu erstellen, das ich in der Browserkonsole ausführen kann, um Elemente in einem Html-Dokument nach einer Datumszeichenfolge innerhalb eines Nachfolgeknotens jedes Elements zu sortieren.

Der vorgeschlagene Code machte es sehr einfach, die Funktion gegen die Klassen, die ich im Archiv-Markup gefunden hatte, auszuführen.

Sehen Sie sich den Code an
function sortElementsByDate(parentSelector, dateSelector) { // Abrufen des übergeordneten Elements const parent = document.querySelector(parentSelector); if (!parent) return; // Abrufen aller zu sortierenden Elemente const items = Array.from(parent.children); // Sortieren der Elemente anhand der Datumszeichenfolge items.sort((a, b) => { const dateA = new Date(a.querySelector(dateSelector)?.textContent || ''); const dateB = new Date(b.querySelector(dateSelector)?.textContent || ''); return dateB - dateA; // Absteigende Reihenfolge (neuestes zuerst) }); // Elemente in sortierter Reihenfolge neu anfügen items.forEach(item => parent.appendChild(item)); } // Beispielverwendung: // sortElementsByDate('.container', '.date-field');

Für diejenigen, die sich dafür interessieren, wie dieser Austausch zwischen mir und Claude aussah: hier ist ein Screenshot aus Visual Studio:

Screenshot of the Visual Studio Code interface for Copilot, showing Willem's original prompt about sorting DOM items and below it, a highlighted code fragment suggested by Claude Sonnet 3.5.
Die Lösung meines Problems, von Claude in wenigen Sekunden generiert.

Rückblickend auf eine unerwartet reibungslose und erfolgreiche Interaktion mit Claude

Ich war ein wenig schockiert, wie gut das funktioniert hat! Aus einer “KI wird uns die Arbeit wegnehmen”-Perspektive fand ich es beruhigend zu wissen, dass meine eigene Entwicklungserfahrung hier eine Rolle spielte:

  • Zunächst einmal konnte ich meine eigene Entwicklungserfahrung nutzen, um meine Anfrage so spezifisch wie möglich zu formulieren. Ich bin mir nicht sicher, was passiert wäre, wenn ich nicht in der Lage gewesen wäre, DOM-bezogene Konzepte wie “descendant” und “node” zu verwenden, um sicherzustellen, dass Claude verstehen würde, wonach ich gesucht habe.
  • Zweitens hätte ich auch nicht gewusst, dass ich Javascript-Befehle in der Konsole ausführen kann, wenn ich keine Erfahrung damit hätte.
  • Schließlich erforderte das Wissen, welche Klassennamen zu den Selektoren hinzuzufügen sind, auch einige Kenntnisse über die Navigation in der HTML-Struktur.

Trotzdem, eine einzige Eingabeaufforderung zur Lösung eines Problems… was für eine Zeit, in der man lebt!

Die Durchsicht des zweiten Teils meines Postarchivs ergab weniger Songs für die Wiedergabeliste als im ersten Teil, obwohl die Zeitspanne länger war. In den ersten vier Jahren habe ich 28 musikbezogene Beiträge mit Links zu Songs, Alben und Konzerten erstellt. Seit 2013 habe ich nur noch 16 geteilt. Das ist allerdings keine Überraschung, denn 2016, im Jahr der US-Wahlen und des Cambridge-Analytica-Skandals, war ich deutlich weniger aktiv. Meine Facebook-Aktivität ist 2018 auf fast null gesunken.

Videos, die ich nicht auf Spotify finden konnte oder – in den meisten Fällen – einfach zu schön waren, um sie nicht zu teilen

Zwischen 2013 und 2019 habe ich die meisten Songs auf Facebook in Form von YouTube-Links geteilt. Bei einigen von ihnen konnte ich die Aufnahme nicht auf Spotify finden. Und da die Videos manchmal wichtig sind, teile ich hier alle Links, in aufsteigender chronologischer Reihenfolge:

Der einzige Track, der mir entgangen ist

Weitere Informationen über das Problem der abgelaufenen Links zu YouTube-Videos und anderen Quellen finden Sie in Teil 1. Interessanterweise werden die Metadaten, die verwendet werden, um eine Vorschau eines Videos in deine Timeline einzubetten , manchmal von Facebook gespeichert. Sie werden jedoch aus dem Aktivitätsarchiv entfernt.

Das bedeutet, dass es sich bei diesem YouTube-Link, der ohne Kontext gepostet wurde, um ein weiteres von mir geteiltes Musikvideo handeln kann oder auch nicht.

Epilog: Zwischen den Liedern, Spuren meiner eigenen Reaktionen auf prominente Persönlichkeiten der jüngeren Geschichte (und der Gegenwart)

Dieses Facebook-Post-Archiv ermöglichte mir nicht nur eine Zeitreise durch meinen Musikgeschmack, sondern ich entdeckte auch, dass auch ich dazu beigetragen habe, politische und kommerzielle Agenden voranzutreiben, die gerade durch erfolgreiche Social-Media-Kampagnen gediehen sind.

Über Facebook habe ich Inhalte von Menschen geteilt, die einige Jahre später berühmt und berüchtigt werden sollten: Ich habe mich gefreut, positiv und optimistisch über die Absichten von Elon Musk zu schreiben, als ich 2016 ein Video von ihm teilte, in dem er die Tesla Power Wall enthüllte. Ein Jahr zuvor teilte ich einen Beitrag von Boris Johnson über die Zerstörung des kulturellen Erbes in Syrien durch ISIS im Jahr 2015. Das habe ich wohl getan, weil ich mochte, wie er seine Wut über diese Art der Zerstörung formulierte und die Bedeutung dieser antiken Stätten hervorhob. Dabei habe ich den letzten Absatz seines Beitrags völlig übersehen, in dem er dies mit seiner politischen Agenda einer strengen Einwanderungspolitik in der EU in Verbindung bringt.

Wenn es um komplexe politische Themen geht, war ich – und bin es immer noch – naiv gegenüber dem, was ich lese. Da ich mir dessen schmerzlich bewusst bin, habe ich immer gezögert, mich in den sozialen Medien politisch zu äußern. Aber ich bin froh, dass ich gelegentlich aus meiner ironischen, musikbegeisterten Komfortzone herausgetreten bin, so dass ich Jahre später zurückblicken kann, wie sich die Weltereignisse auf mich ausgewirkt haben.

Fediverse reactions

One response

  1. […] I have just published part 2 of this post. In it, I describe how I found out that my archive was not chronologically ordered at all, and how […]

Leave a Reply

Your email address will not be published. Required fields are marked *