Schlagwort-Archive: Activity Streams

Tweets befreien: Solid Pod als persönliches Twitter-Archiv nutzen

Bei Diensten wie Twitter, vertraue ich meine Inhalte und Daten einem zentralen Anbieter an. Das kann zum Problem werden, da ich von diesem Anbieter abhängig werde und die Kontrolle verliere, ob und wie lange meine Daten für mich und andere verfügbar sind. Ich möchte jedoch Datensouveränität, also meine Daten langfristig für eigene Zwecke nutzen können. Ich habe deshalb alle meine Tweets in einen Solid Pod exportiert.

Dank der DSGVO sind Twitter und Co. inzwischen verpflichtet, persönliche Daten auf Anfrage maschinenlesbar heraus zu geben. Bei Twitter findest du die Option in den Account Einstellungen unter „Deine Twitter Daten“:

Twitter Archiv anfordern

Sobald Twitter dir das Archiv bereit gestellt hat, kannst du dessen kompletten Inhalt auf einen Solid Pod hochladen. Neben strukturierten JSON-Daten enthält es auch eine hübsche HTML Variante, die du unter der entsprechenden Pod-URL abrufen kannst:

HTML Twitter-Archiv im Solid Pod

Nun hast du ein persönliches Online-Archiv all deiner Twitter-Aktivitäten, das dir niemand mehr wegnehmen kann. Die Zugriffsrechte des Ordners solltest du auf jeden Fall beschränken, da das Archiv auch private Daten, wie zum Beispiel Direktnachrichten enthält.

Die HTML-Seite ist ganz nett, die Stärke von Solid liegt aber in der Verlinkung von Daten, um diese in anderen Kontexten nutzbar zu machen. Ich möchte, dass andere auf die Tweets verweisen können, um mit ihnen zu interagieren. Ich habe daher die öffentlichen Tweets auch als Linked Data in meinem Pod verfügbar gemacht.

Im Original-Archiv liegen alle Tweets maschinenlesbar in der Datei data/tweet.js vor. Mit einem kleinen NodeJS-Skript habe ich diese zu Linked Data konvertiert. Zunächst iteriert das Skript durch die Liste der Tweets und legt für jeden Tweet eine Ressource in einem rdflib Store an:

const me = sym('https://angelo.veltens.org/profile/card#me');
tweets.forEach(({id, full_text, created_at}) => {
    const date = new Date(created_at);
    const path = createPath(date, id);
    const doc = sym(`https://store.example/${path}`)
    const it = sym(`https://store.example/${path}#it`);

    store.add(it, RDF('type'), AS('Note'), doc);
    store.add(it, AS('content'), full_text, doc);
    store.add(it, AS('attributedTo'), me, doc);
    store.add(it, AS('published'), date, doc);
    store.add(it, AS('url'), sym(`https://twitter.com/i/web/status/${id}/`), doc);

    targetFiles.push({ doc, path })
});

Ich habe mich für das Activity-Streams-Vokabular entschieden, da dieses bereits erfolgreich im Fediverse (z.B. Mastodon) verwendet wird und ich möglichst kompatibel werden möchte.
Nachdem alle tweets zum Typ as:Note konvertiert wurden exportiere ich jede Ressource in eine eigene Turtle (.ttl) Datei. Dadurch können bei Bedarf feingranulare Zugriffsrechte gesetzt werden:

targetFiles.forEach(({doc, path}) => {
    const data = serialize(doc, store, null, 'text/turtle')
    const file = `./data/result/${path}$.ttl`
    writeFile(file, data);
})

Das war auch schon alles Wesentliche. Das ganze Skript inklusive der hier nicht gezeigten Hilfsmethoden habe ich als Snippet bei Gitlab hinterlegt.

Nachdem das Ergebnis auf einen Solid Pod geladen wurde, wird jeder Tweet durch eine URI identifiziert und kann abgerufen und verlinkt werden. Der unten abgebildete Tweet zum Beispiel hat die URI https://angelo.veltens.org/public/tweets/2019/08/1161337802652626946#it.

Der Solid Data Browser ist in der Lage, sowohl eine HTML Ansicht des Tweets zu rendern, als auch die zugrunde liegenden Rohdaten anzuzeigen:

Nun können die „Tweets“ im Solid Ökosystem ihr volles Potential entfalten und unabhängig von der Plattform Twitter bestehen.

Vielleicht hast du ja Lust, eine Solid Microblogging-App zu bauen?

Dezentrale Soziale Netzwerke – Ein grober Überblick

Ich habe mir die Tage mal ein paar Varianten von dezentralen sozialen Netzwerken angeschaut, auf die ich hier kurz eingehen möchte. Habe mich mit keinem davon tiefergehend befasst und es folgt auch keine Evaluation oder sowas. Ist vielmehr ein grober Überblick für mich selbst und wen auch immer es noch interessiert, was es im weiten Web in diese Richtung schon gibt:

Noserub

Einer der ersten mir bekannten Ansätze für dezentrale soziale Netzwerke. Gabs vor Jahren mal einen Beitrag im Elektrischen Reporter zu. Scheint aber auch leider nicht mehr aktiv voran getrieben zu werden. Letzte sichtbare Aktivitäten sind aus 2009.

One Social Web

Die Entwicklung wurde wohl erstmal eingestellt, weil man sich auf die Spezifikation konzentrieren möchte. Diese ist immerhin Stand Juli 2011. Basiert technologisch auf XMPP, vCard und Activity Streams.

Buddycloud

Macht einen vielverprechenden Eindruck, auch wenn leider noch keine Demo online ist. Dafür scheint die Entwicklung gut voran zu gehen. Setzt technologisch ebenfalls auf XMPP, aber man antwortete mir erfreulich zügig via Twitter, dass man FOAF und andere Semantic Web Standards / Technologien zumindest im Hinterkopf hat und diese in späteren Versionen zu erwarten sind. Ich bin gespannt!

The v0.1 release won’t see any semantic web technology but expect FOAF and other features to be included starting with v0.2

Lorea

So ganz klar wurde mir das Konzept auf der grausigen Website leider nicht. Gibt zwar zahlreiche Server die scheinbar ein Login via OpenID und sogar WebID unterstützen, aber leider gelang mir bei keinem ein Login auf diese Weisen. Fehlermeldung bei WebID-Login:

Couldnt login with the certificate:No Client Certificate Supplied

Fehlermeldung bei OpenID:

OpenID authentication failed: is not a valid OpenID URL.)

Diaspora

Der Vollständigkeit halber erwähne ich noch Diaspora, vermutlich das bekannsteste dezentrale Netzwerk zurzeit. Das ist auch schon recht gut voran geschritten und prinzipiell praktisch nutzbar wenn auch noch im Alpha-Status. Leider entwickelt es sich für meinen Geschmack zu sehr in Richtung „dezentrales Facebook“. Ein verteiltes Datensilo quasi, statt ein großes zentrales. Ich habe den Entwicklern vorgeschlagen FOAF und WebID zu unterstützen, habe darauf aber leider noch keine Rückmeldung.

Wer weitere Ansätze für dezentrale soziale Netzwerke kennt, möge Sie in den Kommentaren posten! Wie man mit Hilfe von Linked Data das Web zum Social Network machen kann, werde ich demnächst erläutern.