Der kleine Elefant hat schon länger einen eigenen Blog und alle x Zeit versuche ich, dem seine ganzen Selfies nach und nach auch in seinen Blog zu schubsen. Aktuell hängt das ordentlich hinterher und ich habe überlegt, wie ich mir viel Arbeit sparen könnte.

Ich muss dazu jeden wichtigen Toot aus der Timeline heraussuchen, den Text kopieren, die zugehörigen Fotos von der lokalen Festplatte heraussuchen, passend benennen und dann einen Blogpost in Hugo erstellen.

Deshalb habe ich nach Tools gesucht, die diese Arbeit vereinfachen und z. B. eine lokale Version der Timeline zur Verfügung stellen, damit ich diese Arbeit auch ohne Netzwerkzugang machen kann.

Zwei Methoden für Erstellung eines Archivs von Mastodon

Es gibt zwei verschiedene Methoden:

  1. In Mastodon anmelden und in den Einstellungen das eigene Archiv anfordern und dieses herunterladen. Dort sind alle Status (Mehrzahl 🥳) enthalten und auch alle hochgeladenen Medien. Händisch möchte ich aus diesem Archiv nichts heraussuchen müssen, da es aus json-Dateien und einer Verzeichnisstruktur für die Mediendateien besteht. Hierfür gibt es jedoch verschiedene Tools, die ein solches Archiv präsentieren und erkundbar darstellen.
  2. Ein Tool, wie das hier vorgestellte, lädt mit entsprechenden Berechtigungen selbst Boots, Toots und alles andere (Fotos, …) direkt vom Mastodon-Server herunter und erstellt lokal ein eigenes Archiv.

Das Tool mastodon-archive

Es gibt mehrere solcher Werkzeuge, mit gefällt mastodon-archive. Es ist in Python geschrieben, lässt sich via pip/pipx installieren, fordert Berechtigungen zum Account an, die man auf Mastodon bestätigen muss und lädt dann alle Toots herunter.

Mit diesen heruntergeladenen Daten kann man schließlich verschiedene Dinge anstellen, z. B. nach einem String in den Toots suchen.

Sie Suchfunktion unterstützt auch Reguläre Ausdrücke, siehe hier.

Installation

Für mich ganz einfach mit pipx install mastodon-archive.

Siehe auch hier

Archiv für einen Mastodon-Account erstellen

Am besten ein neues Verzeichnis erstellen und dorthin wechseln:

mkdir archiv
cd archiv

Dann werden alle Status (Mehrzahl) usw. heruntergeladen, wobei ich kein Interesse an Favoriten und Bookmarks habe:

> mastodon-archive archive --no-favourites --no-bookmarks ploggifanti@plushies.social
Registering app
This app needs access to your Mastodon account.
Visit the following URL and authorize the app:
https://plushies.social/oauth/authorize?client_id=…&response_type=[]&[]
Then paste the access token here:
abcdefgh…
Get user info
Get all statuses (this may take a while)
Get favourites (this may take a while)
Get bookmarks (this may take a while)
Skipping mentions
Skipping followers
Skipping following
Saving 182 statuses, 354 favourites, 5 bookmarks, 0 mentions, 0 followers, and 0 following

Dann lädt man zusätzlich alle Bilder und Videos herunter:

> mastodon-archive media ploggifanti@plushies.social
168 urls in your backup (83 are previews)
Downloading |#############################   | 160/168

Das wars schon. Alles weitere geht jetzt auch ohne Netzwerkanbindung.

Zu einem späteren Zeitpunkt kann man beides erneut ausführen, damit neuere Daten heruntergeladen und zum lokalen Archiv hinzugefügt werden.

Lokales Archiv als HTML-Datei exportieren

Hiermit wird im aktuellen Verzeichnis eine HTML-Datei erstellt, die alle Status (Mehrzahl) enthält.

> mastodon-archive html ploggifanti@plushies.social
Loading existing archive: plushies.social.user.ploggifanti.json
Writing plushies.social.user.ploggifanti.statuses.0.html

Anpassungen des Codes für eigene Anforderungen

Ich habe den Python-Code für die Erstellung des HTML-Archivs etwas angepasst. Zum einen brauche ich daran keine Boosts anderer Toots und zum anderen habe ich einen Fehler beim Anzeigen von Bildern behoben; per Voreinstellung werden diese nur teilweise dargestellt.

Dazu habe ich die Datei html.py wie folgt angepasst:

  • Boosts nicht exportieren:
    • Nach Zeile 241 if status["reblog"] is not None: ein return eingefügt, damit der Code für Boosts nicht ausgeführt wird.
  • Fix für Darstellung von Bildern:
    • Zeile 118 height: 110px; auskommentiert.
    • Zeile 138 transform: translateY(-50%%); auskommentiert.

So sieht die erstellte HTML-Datei für den Account vom kleinen Elefanten aus:

Nach einem String suchen

> mastodon-archive text ploggifanti@plushies.social wald
Kagube @ploggifanti 2023-07-13T19:09:00.188000+00:00
🔗 https://plushies.social/@ploggifanti/110708348694463740
🐘Heut hab ich mir ein
[#DemKleinenElefantenSeinTäglichesSelfie](https://plushies.social/tags/DemKleinenElefantenSeinT%C3%A4glichesSelfie)
auf ner Landstraße mit Sonnenuntergangsstimmung und Wald und Linien und so
gewünscht.

🐘Nebenbei guckn, ob nicht jmd mitm Auto kommt. 🤪🖻 plushies.social.user.ploggifanti/plushiessocial/media_attachments/files/110/708/348/622/325/544/original/3f9e6457b052ea0e.webp

Kagube @ploggifanti 2023-08-01T15:18:55.330000+00:00
🔗 https://plushies.social/@ploggifanti/110815027876908056
🐘Wir waren heute 40km mit dem Fahrrad unterwegs und haben schöne Momente für
euch eingepackt.  
...  
🐘Hier warn wir im Wald🎁🌳  
🐘Hier auf der [#Pausenbank](https://plushies.social/tags/Pausenbank) sonnen 🎁💺  
🐘Hier die schöne Landschaft 🏞🎁  
🐘Und hier im Garten 🎁🏡  
🐘Das ist ganz besonders toll. Auf der Wiese sitzen und dem Wind zuhören, was
der so alles zu erzählen hat. ☁🎁  
🐘Und dann auch noch der Moment mit
[#Blümchenbaden](https://plushies.social/tags/Bl%C3%BCmchenbaden) vom
[#DemKleinenElefantenSeinTäglichesSelfie](https://plushies.social/tags/DemKleinenElefantenSeinT%C3%A4glichesSelfie)
🎁💐
🐘Viel Spaß damit und bis wieder gesund.

🐘🤗  
🚴🤗

Status (Mehrzahl) löschen

Mit dem Tool kann man auch Status löschen, siehe hier.

So löscht man z. B. alle Status, die älter als zwei Wochen sind, sofern man noch --confirm angibt:

mastodon-archive expire --older-than 2 ploggifanti@plushies.social
Loading existing archive: plushies.social.user.ploggifanti.json
This is a dry run and nothing will be expired.
Instead, we'll just list what would have happened.
Use --confirmed to actually do it.
Delete: 2023-07-19 "🐘Ich hab den 🚴 ganz dolle angefeuert, damit wir no..."
Delete: 2023-06-09 "🐘Du, 🚴, wann sind wir da?   🚴Wir sind doch gar nic..."
Delete: 2023-07-21 "🐘Der 🚴 und der 🐘: 🤪   🐘Immer sind wir draußen und ..."
Delete: 2023-07-02 "@Okona   🐘Dafür sind wir gestern extra nach #Tübin..."
Hinweis
Wenn ich das richtig verstehe, bleiben Toots im lokalen Archiv auch dann erhalten, wenn man sie mit diesem Tool online löschen lässt. Das finde ich gut. So kann ich das lokale Archiv immer mal wieder aktualisieren und trotzdem online alles nach x Zeit löschen lassen.

Report

Es gibt auch die Möglichkeit, ein paar Infos zum Account auszugeben, siehe hier.

> mastodon-archive report --all ploggifanti@plushies.social
Considering the entire archive
Statuses:               182
Boosts:                  15
Media:                   74

Top 10 hashtags:
#demkleinenelefantenseintaglichesselfie(48) #gpn21(5) #pausenbank(4)
#criticalmass(3) #kasrue(3) #karlsruhe(2) #fahrradfreitag(2)
#tubingen(2) #tubix(2) #kde(2)

Favourites:             354
Boosts:                   0
Media:                   82

Top 10 hashtags:
#turnverein(11) #demkleinenelefantenseintaglichesselfie(5)
#baumklettern(5) #turnvereinys(3) #barland(3) #schlafschlaf(3)
#eichhornchen(3) #fahrradfreitag(2) #kidicalmass(2) #bamberg(2)

Noch mehr vereinfachen?

Das generierte HTML-Archiv hilft mir schon sehr beim Erstellen der Blogbeiträge für den kleinen Elefanten.

Es müsste doch aber auch möglich sein aus diesem Archiv auch direkt Blogbeiträgt für Hugo zu generieren. Mal sehen, wie faul ich bin und ob mir die lokale HTML-Datei schon ausreicht oder ich versuchen werde, das auch noch zu automatisieren, sodass ich am Ende ein Kommando ausführen kann und anhand der Mastodon-Timeline automatisch der Content für Hugo erstellt wird.