Lose Blätter - Software

How-To: Mastodon-Filter zu neuen Node umziehen

Da Mastodon-Filter nicht im regulären Archiv-Download enthalten sind und Mastodon keinen Import-Button für Filter besitzt, ist der Weg über die API (Schnittstelle) mit einem kleinen Python-Skript die beste Lösung.

Voraussetzungen: Du benötigst Python auf deinem Rechner und die installierte Bibliothek requests (Installation im Terminal via pip install requests). Ferner wird noch curl benötigt.

Schritt 1: Filter aus Mastodon exportieren

  1. Gehe in Mastodon auf alter Instanz auf Einstellungen > Entwicklung > Neue Anwendung.
  2. Vergib einen Namen, setze bei den Scopes (Berechtigungen) nur den Haken bei read:filters und speichere.
  3. Kopiere den generierten Zugriffstoken.
  4. Öffne dein Terminal und führe folgenden Befehl aus (ersetze TOKEN und URL):
    curl -H "Authorization: Bearer DEIN_TOKEN" https://deine-alte-mastodon-instanz.tld/api/v2/filters > meine_filter.json

Ergebnis: Du hast nun eine Datei meine_filter.json.


Schritt 2: Token auf neuer Instanz für den Import erstellen

  1. Gehe auf deiner neuen Instanz auf Einstellungen > Entwicklung > Neue Anwendung.
  2. Vergib auch hier einen Namen, setze bei den Scopes (Berechtigungen) den Haken bei read:filters sowie write:filtersund speichere.
  3. Kopiere und speichere den generierten Zugriffstoken. Den brauchen wir für das Python Script.

Schritt 3: Das Python-Skript für den Import erstellen

Leider ist das Format von Export und Import der Filterdaten bei Mastodon nicht identisch. Daher muss die importierte Datei über ein Python-Script vorbereitet werden. Dieses Script übernimmt auch den Import zur neuen Instanz. Am besten im gleichen Ordner erstellen wo auch die exportierten Daten der Quellinstanz liegen.

import json
import requests

# === DEINE KONFIGURATION ===
MASTODON_URL = "https://deine-gts-instanz.tld"  # Ohne / am Ende!
ACCESS_TOKEN = "Dein-generierter-Access-Token-hier-rein"
EXPORT_FILE = "meine_filter.json"
# ===========================

headers = {
    "Authorization": f"Bearer {ACCESS_TOKEN}",
    "Content-Type": "application/json"
}

def import_filters():
    with open(EXPORT_FILE, "r", encoding="utf-8") as f:
        mastodon_filters = json.load(f)

    for filter_data in mastodon_filters:
        title = filter_data.get('title', 'Unbenannter Filter')
        print(f"Importiere: '{title}'...")

        payload = {
            "title": title,
            "context": filter_data.get("context", ["home", "notifications", "public", "thread"]),
            "filter_action": filter_data.get("filter_action", "hide"),
            "keywords_attributes": [
                {"keyword": kw.get("keyword"), "whole_word": kw.get("whole_word", True)}
                for kw in filter_data.get("keywords", [])
            ]
        }

        response = requests.post(f"{MASTODON_URL}/api/v2/filters", headers=headers, json=payload)

        if response.status_code in [200, 201]:
            print(" -> Erfolgreich angelegt!")
        else:
            print(f" -> FEHLER ({response.status_code}): {response.text}")

if __name__ == "__main__":
    import_filters()

Trage die URL der neuen Mastodon-Instanz und das Token der neuen Instanz in der Datei oben ein. Führe das Skript aus (python import_filters.py). Die Filter werden nun live in auf der neuen Mastodon Instanz übertragen.

🚨 Typische Fehler und Lösungen