Eure Daten in sozialen Netzwerken? Verabschiedet euch davon!

      ca. 7 Minuten Lesezeit  

Ach herrje, wer hätte erwartet, dass das so ausartet. Ich hab mal versucht, meine Daten aus den sozialen Netzwerken zu exportieren, auf denen ich so angemeldet bin.

Warum eigentlich? Was will ich damit?

Eigentlich ist das nur eine Spielerei, aber ich bin kein Freund der Vernichtung von Daten. Ich schreib ja in’s Internet, weil ich auch in 10 Jahren noch will, dass die Leute den Scheiß lesen können. Genau wie diesen flapsigen Post hier.

Also hab ich mich die letzten Tage mal hingesetzt und mthie.social zusammengeschraubt. Eine Seite, auf der ich die geposteten Beiträge von den ganzen Portalen aggregiere und anzeige. Ganz ohne das Tracking der Portale, was ja für einige Leute auch sehr spannend sein könnte.

Allerdings wollte ich diesen Beitrag dazu nutzen, mal aufzulisten, warum das eigentlich alles so schlimm ist.

Beziehen der Daten über die APIs

Wenn man nicht schon vor 12 Jahren angefangen hat, seine Posts, Fotos, Kommentare, whatever, regelmäßig zu holen, was durch gefühlte 100 API-Änderungen in der Zeit auch sehr nervig gewesen wäre, kommt man schon gar nicht mehr an alle seine Informationen, es sei denn, man hat SEHR viel Zeit. Denn oft scheitert man einfach mal an den API-Limits. Gerade Twitter ist da sehr anstrengend.

Daten-Export-Downloads

Bei fast allen Portalen gibt es Daten-Export-Funktionen, die ich einfach mal genutzt habe, um diese Daten dann in Markdown zu verwandeln. Das Bereitstellen der Daten hat bei fast allen Portalen knapp gleich lang gedauert.

Facebook

Es macht mich traurig. Sehr traurig. Und glücklich. Auf der einen Seite ist es äußerst traurig zu sehen, was Facebook alles für Daten bereitstellt, u.a. das Face-Recognition-Profil und wieviele Samples es dafür hat. Mit den Rohdaten konnte ich allerdings jetzt nicht so viel anfangen.

Die Liste der Posts (also genau das, was ich haben wollte) war eher so lala. Keine ID-Referenzierung auf die Original-Posts, sodass man nicht die Möglichkeit hat, die fehlenden Informationen über den Post über die API zu holen. Äußerst nervig.

Zusätzlich dazu sind die Informationen der Posts auch schwere Grütze. Hier mal der Ausschnitt meines Links zu meinem vorherigen Blog-Post:

{
  "timestamp": 1566323148,
  "attachments": [
    {
      "data": [
        {
          "external_context": {
            "url": "https://www.mthie.com/lokale-kleinh%C3%A4ndler-f%C3%B6rdern-vielleicht-nicht.html"
          }
        }
      ]
    }
  ],
  "data": [
    {
      "post": "Lokale Kleinh\u00c3\u00a4ndler f\u00c3\u00b6rdern? Vielleicht nicht!\n\nhttps://www.mthie.com/lokale-kleinh%C3%A4ndler-f%C3%B6rdern-vielleicht-nicht.html"
    },
    {
      "update_timestamp": 1566323148
    }
  ],
  "title": "Martin Thielecke"
},

Was genau soll man denn damit anfangen? Der title ist ja mal totale Grütze und zum Link gibt es NULL Informationen. Die API widerum liefert alle Infos dazu, also auch ein Vorschaubild und vielleicht mal etwas Beschreibung. Da gibt es noch viel Verbesserungspotential.

Was mich glücklich am Export macht? Damals™, als die mobilen Betriebssysteme noch nicht so genau nachfragen konnten, welche Rechte man jetzt einzeln freigeben möchte, hat man einfach auf Okay gedrückt. Dementsprechend war mein gesamtes altes Adressbuch von 2009 bei Facebook. Dadurch hab ich endlich mal wieder ein paar alte Rufnummern wiedergefunden, die mir abhanden gekommen waren. Aua.

Was Facebook allerdings über mich denkt, welche Werbung mich interessieren könnte, ist soweit vorbei an der Realität. Ich mache mir weiterhin keine Sorgen über detaillierte Profile.

Twitter

Es war eines der ersten sozialen Netzwerke, auf denen ich mich angemeldet hatte (April 2007) und dementsprechend haben die die meisten Posts von mir in der Datenbank.

Ich hatte explizit das JSON-Paket angefordert, damt ich die Daten sinnvoll auswerten und importieren kann. Es steht sogar in der README: This archive consists of machine-readable JSON files containing information associated with your account.
Und was ist da wirklich drin? JavaScript-Variablen, die JS-Objekte beinhalten. Nix von wegen JSON. Also muss man den Quark erstmal auseinanderfummeln. Moah!

Glücklicherweise hat Twitter im Gegensatz zu Facebook ein paar mehr Infos zu den Tweets mitgeliefert.

{
  "retweeted" : false,
  "source" : "<a href=\"https://about.twitter.com/products/tweetdeck\" rel=\"nofollow\">TweetDeck</a>",
  "entities" : {
    "hashtags" : [ ],
    "symbols" : [ ],
    "user_mentions" : [ ],
    "urls" : [ {
      "url" : "https://t.co/Y4UUO98ZxP",
      "expanded_url" : "https://www.mthie.com/lokale-kleinh%C3%A4ndler-f%C3%B6rdern-vielleicht-nicht.html",
      "display_url" : "mthie.com/lokale-kleinh%…",
      "indices" : [ "48", "71" ]
    } ]
  },
  "display_text_range" : [ "0", "71" ],
  "favorite_count" : "1",
  "id_str" : "1163869680668487681",
  "truncated" : false,
  "retweet_count" : "1",
  "id" : "1163869680668487681",
  "possibly_sensitive" : false,
  "created_at" : "Tue Aug 20 17:45:30 +0000 2019",
  "favorited" : false,
  "full_text" : "Lokale Kleinhändler fördern? Vielleicht nicht!\n\nhttps://t.co/Y4UUO98ZxP",
  "lang" : "de"
},

Joah, kann man mit leben. Auch hier wären noch ein paar nette Vorschauinfos ganz cool gewesen, aber da wir ja hier die ID haben, kann man das über die API abrufen. Was ich bei Twitter zum Schießen finde: Wenn sie die ID sowieso als string liefern, warum gibt es das id_str-Feld zusätzlich?

Instagram

Ach herrje, welcher bekiffte Teenie hat den DEN Export geschrieben? Die Kommentare sind Listen von strings, z.B. ["2015-03-30T17:02:46", "Lass mal die Filter weg.", "guusvw91"],
Was genau will uns der Export damit sagen? Ist das ein Kommentar von Guus oder von mir an Guus? Danke für den Timestamp und den Text, aber diese Informationen sind komplett wertlos und kontextfrei.

Exakt der gleiche Quatsch passiert bei den Likes: ["2017-11-04T06:44:26", "genussgier"], - was ist das? Habe ich einen Post von genussgier geliked oder der Account von mir? Wir werden es aus dem Export heraus wohl nie erfahren.

Zum Glück hat Instagram es zumindest beim media.json nicht komplett vergeigt. Hier wurden die Fotos in einem separaten Ordner gleich mitgeliefert und im JSON auch darauf verlinkt. Außerdem stehen alle Informationen des Posts im Export drin. Auch hier fehlt zwar die ID (vielleicht für Backlinks ganz cool), aber was soll man im Nachhinein bei Instagram damit? Die API unterstützt sowieso kein Abruf einzelner Posts und ihrer Informationen. Man darf maximal die letzten 20 Posts abrufen und das war’s dann auch schon:

{
  "caption": "It's only a drive-by photo, sorry.\n\n#deloreantimemachine #delorean #newyorkcity #newyork #newyorkcitylife",
  "taken_at": "2018-11-28T18:08:30",
  "location": "Manhattan, New York",
  "path": "photos/201811/a87d96e67a668fb89831e3c2c61b197d.jpg"
},

Gut, dass ich die App deinstalliert habe.

Google+

Google ist mit seinen Takeout-Bemühungen ja schon recht früh in das System eingestiegen, dass User ihre Daten auch mal exportieren können. Sie liefern auch mit Abstand die größten Takeouts, selbst wenn man nur sowas “Einfaches” wie die Google+-Posts exportiert. Hier hatte ich kurz vor der Abschaltung für Privatuser einen Takeout anlegen lassen. Allerdings war ich sehr blind und habe HTML-Archive exportiert. Mit denen konnte man rein gar nix anfangen. Ein ganz grausames Durcheinander.

Heute habe ich also nochmal einen neuen Export gemacht mit JSON-Exports. Das Format ist halbwegs einfach und übersichtlich, für jeden Post eine separate JSON-Datei. Damit brechen dann auch die Parser nicht unter Unmengen an Daten zusammen. Darin verlinkt auch schön die Bilder, die man im Archiv gleich dazubekommt. EIGENTLICH. Denn circa 50% der Bilder wurden einfach mal gar nicht mit ausgeliefert. Im Post noch vorhanden, auch die URL zum Bild (nicht das Originalbild, was sonst im Takeout drin ist) ist gültig. Warum sie es also nicht mitgeliefert haben, bleibt ein Rätsel.

Aber eigentlich war ich nach dem HTML-Schock dann doch erleichtert, dass der Export ganz brauchbar war. Glücklicherweise besteht bei dieser Plattform jetzt keine Notwendigkeit mehr, neu geschriebene Posts per API holen zu müssen. Bye bye Google+.

LinkedIn

Hier muss ich zugeben: Verdammt, ich hab noch nie wirklich was auf LinkedIn gepostet. Der Export war also am Ende recht sinnfrei. Na egal, wird das Profil halt einfach nur verlinkt.

Die restlichen Informationen gibt es im CSV-Format, was halt einfach ein bescheidenes Format für Datenexporte ist, vor allem wenn man wie LinkedIn dann teilweise in die CSV nur reinschreibt, dass man die hochgeladenen Videos unter der angegebenen URL alle runterladen kann. Danke für nix.

Github

Auch wenn es jetzt für manche Menschen komisch klingt, aber github ist das soziale Netzwerk für Entwickler. Aber was genau will man da wirklich exportieren? Die Repositories hat ja eh jeder schon da und von denen kann/will/darf man u.U. gar nicht alles veröffentlichen.

Mehr bekommt man am Ende aber aus dem Export nicht raus. Es gibt aber auch nicht wirklich mehr, außer vielleicht Stars auf andere Repos. Hmm, egal.


Was mich an der ganzen Geschichte etwas fasziniert hat, mit welchen unterschiedlichen Methoden die Entwickler die Exporte gebaut haben, also dass Twitter und Facebook alles in eine grosse Datei werfen, während Google im Zweifel lieber 100.000 Dateien zurückgibt. Da merkt man direkt, welcher der Anbieter sowas parallel verarbeiten lässt.