Mastodon, Teil 1: Toots abrufen
Aufgabe

Diese Aufgabe wurde an der FAU Erlangen-Nürnberg entwickelt (Institute of Information Systems, Prof. Dr. Martin Matzner) und wird gemäß Creative-Commons-Lizenz CC BY-NC-SA 4.0 bereitgestellt. Es handelt sich um eine angepasste Version der Aufgabe Mastodon OOP.
So kommen die Toots ins Programm
- API: Ihr Programm ruft keine Webseite ab, sondern fragt Mastodon über eine API: eine Schnittstelle, die auf festgelegte Anfragen Daten statt fertiger Seiten liefert.
- Zugriffstoken: Mit einem Zugriffstoken weist sich Ihr Programm bei Mastodon aus und handelt in Ihrem Namen. Das Token ist geheim wie ein Passwort.
- Mastodon.py: Die Python-Bibliothek Mastodon.py übernimmt die Kommunikation mit der API. Mit
mastodon.timeline_hashtag("python", limit=10)erhalten Sie eine Liste der höchstens 10 neuesten Toots mit dem Hashtag#python. - Status-dict: Jeder Toot in dieser Liste ist ein Dictionary (Status-dict) mit vielen Schlüsseln. Für die Klasse
Tootbrauchen Sie fünf davon:
Parameter von Toot | Schlüssel im Status-dict | Inhalt |
|---|---|---|
content | content | der Text des Toots – im Status-dict als HTML, im Toot als reiner Text |
account | account | das Konto, das den Toot veröffentlicht hat |
hashtags | tags | die Hashtags des Toots |
pubdate | created_at | die Veröffentlichungszeit, ein datetime mit Zeitzone |
media | media_attachments | Liste der Medienanhänge (Bilder, Videos, …); jeder Anhang ist ein Dictionary, unter anderem mit type und url |
Beispiel – ein Status-dict, stark gekürzt:
{
"content": '<p>Heute lerne ich <a class="mention hashtag">#<span>Python</span></a>!</p>',
"account": {"acct": "alice", ...},
"tags": [{"name": "python", ...}],
"created_at": datetime(2026, 1, 10, 12, 0, tzinfo=tzutc()),
"media_attachments": [],
...
}Daraus wird ein Toot mit content = "Heute lerne ich #Python!", account = "alice", hashtags = ["python"], pubdate = die Zeit aus created_at und media = [].
Mehr zu Mastodon und zu APIs steht am Ende der Seite unter „Zum Weiterlesen“.
Vorbereitung
Aufgabenmaterial
Aufgabenmaterial herunterladen
Öffnen Sie VS CodeVisual Studio Code, der kostenlose Code-Editor von Microsoft, in dem Sie im Kurs programmieren. Glossar → entsprechend Ihrem Setup, klicken Sie auf Ihr Terminalfenster und führen Sie cd aus. Die EingabeaufforderungDas Zeichen am Anfang der Zeile im Terminal, etwa $ oder me/ $. Es zeigt, dass das Terminal auf Ihren nächsten Befehl wartet. Steht davor ein Ordnername wie me/, befinden Sie sich gerade in diesem Ordner. Glossar → Ihres Terminalfensters sollte ungefähr wie folgt aussehen:
$Laden Sie das Aufgabenmaterial herunter, entpacken Sie es, löschen Sie die ZIP-Datei und wechseln Sie in den neuen Ordner:
wget https://dev.inf.zone/download/exercises/11/mastodon_oop.zip
unzip mastodon_oop.zip
rm mastodon_oop.zip
cd mastodon_oopWenn Sie jetzt ls ausführen, sollten Sie die Datei mastodon_oop.py sehen. Falls nicht, wiederholen Sie die Schritte und prüfen Sie, wo ein Fehler aufgetreten sein könnte.
Installieren Sie dann mit pip, dem Paketmanager von Python, die drei Bibliotheken, die mastodon_oop.py importiert – Mastodon.py, Beautiful Soup und pytz:
pip install Mastodon.py beautifulsoup4 pytzSehen Sie sich mastodon_oop.py an, bevor Sie loslegen: Das Gerüst enthält alle Klassen und Funktionen beider Teile samt TODO-Kommentaren. Fertig ist nur die Klasse Trigger; alles andere enthält vorerst nur pass (siehe The pass statement). Die Parameterlisten im Gerüst sind leer – ergänzen Sie die Parameter, wenn Sie eine Funktion oder Methode schreiben.
Zugriffstoken anlegen
- Erstellen Sie ein Konto auf mastodon.social und melden Sie sich an.
- Klicken Sie auf die drei Punkte rechts neben Ihrem Benutzernamen, dann auf
Preferences, dann links in der Navigationsleiste aufDevelopment. - Wählen Sie oben rechts
New application. Geben Sie unterApplication nameeinen passenden Namen ein, wählen Sie unterScopesnurreadund lassen Sie den Rest unverändert. Klicken Sie ganz unten aufSubmit. - In der Liste, die nun erscheint, klicken Sie auf den Namen Ihrer Anwendung (erste Spalte). Dort stehen
Client key,Client secretundAccess token. - Tragen Sie die drei Werte oben in
mastodon_oop.pybeiclient_id,client_secretundaccess_tokenein.api_base_urlbleibt unverändert. Geben Sie die Datei mit Ihren Werten nicht weiter.
Spezifikation
Schritt 1: Die Klasse Toot
__init__nimmt die fünf Parametercontent,account,hashtags,pubdateundmediaentgegen (Bedeutung siehe Tabelle oben) und speichert sie in Instanzvariablen mit Unterstrich (etwaself._content).- Machen Sie jede der fünf mit dem Dekorator
@propertylesbar. Andere Klassen – etwa die Trigger in Teil 2 – greifen dann mittoot.content,toot.accountusw. darauf zu. __str__gibt einen lesbaren String mit den wichtigsten Attributen des Toots zurück, damit Sie Toots mitprintausgeben können (Beispiel unter „Testen“).
Schritt 2: Text aus HTML isolieren
Schreiben Sie eine Funktion get_text_content(toot). Sie bekommt ein Status-dict und gibt den Text aus dessen content ohne HTML-Tags als String zurück. Verwenden Sie dafür die Bibliothek Beautiful Soup.
Aus dem content des Beispiels oben wird so Heute lerne ich #Python!.
Schritt 3: Toots laden
Schreiben Sie eine Funktion load(hashtag), die Toots mit dem Hashtag hashtag von Mastodon lädt:
- Legen Sie eine leere Liste für die Toots an.
- Rufen Sie
timeline_hashtagauf und begrenzen Sie die Antwort mitlimit=10auf höchstens 10 Toots. - Erzeugen Sie aus jedem Status-dict ein
Toot-Objekt (Zuordnung der Schlüssel siehe Tabelle oben) und fügen Sie es der Liste hinzu. Den Inhalt speichern Sie als reinen Text, also mitget_text_content, nicht als HTML. - Geben Sie die Liste zurück.
Hilfestellung
Klicken Sie auf die folgenden Tipps, um einige Ratschläge zu erhalten. Versuchen Sie aber zunächst, selbst so weit wie möglich zu kommen.
Text mit Beautiful Soup isolieren
- Erzeugen Sie zuerst ein Beautiful-Soup-Objekt aus dem HTML-Inhalt und dem Parser
"html.parser"; wie das geht, zeigt der Quick Start der Dokumentation. - Die Methode
get_textdieses Objekts gibt den Textinhalt des HTML-Baums zurück.
Die Daten von Mastodon verarbeiten
toot_data = mastodon.timeline_hashtag(hashtag, limit=10) gibt eine Liste von Status-dicts zurück. Über diese Liste können Sie mit einer for-Schleife iterieren:
for data in toot_data:
# TODO: create toot-objects from data- Lassen Sie sich
dataeinmal mitprintausgeben, um die Struktur zu sehen. - Übergeben Sie den Hashtag ohne
#, also"python"statt"#python"; sonst meldet Mastodon.py einen Fehler. data["account"]und die Einträge indata["tags"]sind selbst Dictionaries. Füraccountgenügt der Kontoname unter"acct", fürhashtagseine Liste der Namen unter"name".
Testen
Rufen Sie im Abschnitt if __name__ == '__main__': die Funktion load mit einem Hashtag Ihrer Wahl auf und geben Sie die geladenen Toots mit print aus. Führen Sie das Programm aus:
python mastodon_oop.pyJeder Toot sollte ohne HTML-Tags erscheinen, etwa so (das genaue Format bestimmt Ihre __str__-Methode):
Toot von @bob
Veröffentlicht am: 2026-01-10 14:00:00+00:00
Inhalt: Mein Python-Setup, siehe Foto.
Hashtags: python
Medien: https://example.org/foto.jpgDann geht es weiter mit Teil 2: Toots filtern.
Korrektheit
Führen Sie in Ihrem Terminal den folgenden Befehl aus, um die Korrektheit Ihrer Arbeit zu überprüfen:
check50 -l inf-zone/exercises/2026/mastodon/loadAbgeben
Geben Sie im Ordner mastodon_oop ab:
inf upload mastodon/loadDanach sehen Sie, welche Tests Ihr Programm besteht und ob die Übung für die Bonuspunkte zählt. Wie Sie inf installieren und sich anmelden, steht unter Abgeben mit inf.
Zum Weiterlesen: Mastodon und APIs
Für die Lösung der Aufgabe nicht nötig.
Eine API (Application Programming Interface) legt fest, wie Programme miteinander kommunizieren: welche Anfragen es gibt und in welchem Format die Daten zurückkommen. Die Anfragen gehen an Endpunkte, also festgelegte URLs, die jeweils für eine Aktion stehen, etwa „die neuesten Toots zu einem Hashtag“. Ein Schlüssel oder Token weist aus, wer anfragt und was er darf. Soziale Netzwerke wie Mastodon bieten solche APIs an, damit Programme Beiträge abrufen oder veröffentlichen können. Mastodon.py ist ein sogenannter Wrapper: eine Bibliothek, die die Anfragen an die API in gewöhnliche Python-Funktionen verpackt.
Mastodon ist eine Social-Media-Plattform, die Eugen Rochko 2016 als Alternative zu zentralisierten Netzwerken gestartet hat. Die Software ist Open Source: Der Quellcode ist frei verfügbar und darf genutzt, verändert und weitergegeben werden. Statt eines zentralen Servers gibt es viele unabhängig betriebene Server, sogenannte Instanzen, die zusammen ein Netzwerk bilden (föderiertes Modell). Jede Instanz hat eigene Regeln und Moderation; man wählt eine nach Interessen oder Vorlieben und kann trotzdem Konten auf anderen Instanzen folgen.
Diese Seite als Markdown: ansehen herunterladen