Howto: Einstellungen, geblockte/followed Communities und mehr von einer Lemmy Instanz auf andere Instanz übertragen (z.B. feddit.de -> feddit.org)
An dieser Stelle reposte ich auch auf der neuen deutschen Main-Instanz zwei einfache Wege, um seinen User (Settings und abonnierte/geblockte Communities) von einer Lemmy Instanz auf eine andere umzuziehen, beispielsweise von feddit.de auf feddit.org, von meinem ursprünglichen Post unter feddit.de/c/main ( https://alexandrite.app/feddit.de/post/11325409)
Update: Ich habe für die erhöhte Userfreundlichkeit noch eine Web Applikation erstellt, welche den Prozess so einfach wie möglich gestalten soll. Zu finden hier:
Login and export settings from any Lemmy instance (e.g. feddit.de)
Optionally: Find local communities on the target instance that match followed communities
Optionally: Backup your settings to a file (can be imported on any Lemmy instance in your profile)
Login and import settings to any Lemmy instance (e.g. feddit.org)
Weg 1, falls man noch einen Browser mit aktiver Session auf feddit.de hat:
Lemmy bietet seit Version 0.19 eine Funktion an, um die user data zu ex- und importieren. Das geht normalerweise über einen Button in den Settings des Webinterfaces, das geht aktuell bei feddit.de nicht.
Aber der zugrundeliegende API-Aufruf funktioniert noch, solange man noch mit einem Browser auf feddit.de eingeloggt ist:
Man nehme einen (neuen) Account auf einer stabilen Instanz der Wahl, gehe auf /settings und lade irgendwas.json über den Import-Button hoch.
Voilà, man genieße die neue Instanz.
Das funktioniert mit jeder Instanz >=0.19, man muss lediglich das "feddit.de" in der URL ersetzen. Und wenn das Webinterface funktioniert, geht das auch über den Export- Button in den Settings.
Weg 2:
Für die Leute, die keine offene Browser Session haben, hier ein kleines, aber funktionales Bash Script, welches im Ausführungsverzeichnis eine myFedditUserData.json erstellt, welche bei anderen Instanzen importiert werden kann.
Anforderungen:
Linux/Mac OS X /Windows mit WSL
jq installiert (Unter Ubuntu/Debian/Mint z.B. per sudo apt install -y jq
Anleitung:
Folgendes Script unter einem beliebigen Namen mit .sh Endung abspeichern, z.B. getMyFedditUserData.sh
Script in beliebigen Textprogramm öffnen, Username/Mail und Passwort ausfüllen (optional Instanz ändern)
Terminal im Ordner des Scripts öffnen und chmod +x getMyFedditUserData.sh ausführen (Namen eventuell anpassen)
./getMyFedditUserData.sh im Terminal eingeben
Nun liegt im Ordner neben dem Script eine frische myFedditUserData.json
Anmerkung:
Das Script ist recht simpel, es wird ein JWT Bearer Token angefragt und als Header bei dem GET Aufruf von https://feddit.de/api/v3/user/export_settings mitgegeben. Wer kein Linux/Mac OS X zur Verfügung hat, kann den Ablauf mit anderen Mitteln nachstellen.
Das Script:
#!/bin/bash
# Basic login script for Lemmy API
# CHANGE THESE VALUES
my_instance="https://feddit.de" # e.g. https://feddit.nl
my_username="" # e.g. freamon
my_password="" # e.g. hunter2
########################################################
# Lemmy API version
API="api/v3"
########################################################
# Turn off history substitution (avoid errors with ! usage)
set +H
########################################################
# Login
login() {
end_point="user/login"
json_data="{\"username_or_email\":\"$my_username\",\"password\":\"$my_password\"}"
url="$my_instance/$API/$end_point"
curl -H "Content-Type: application/json" -d "$json_data" "$url"
}
# Get userdata as JSON
getUserData() {
end_point="user/export_settings"
url="$my_instance/$API/$end_point"
curl -H "Authorization: Bearer ${JWT}" "$url"
}
JWT=$(login | jq -r '.jwt')
printf 'JWT Token: %s\n' "$JWT"
getUserData | jq > myFedditUserData.json
Ich arbeite auch grade dran, das ganze als Webapp umzusetzen, die den Umzug direkt lokal über den Browser macht ohne weitere Scripte o.ä.
Bequemerweise setzt die Lemmy-API den CORS-Header automatisch auf die Domain von der der Request kommt und ich brauch somit nicht mal die ganzen Logins durch einen Drittserver zu leiten und rede dann nur direkt mit den betroffenen Instanzen. Erste Version wird vermutlich nur für den Umzug von feddit.de nach feddit.org werden, aber andere Instanzen zu ermöglichen und weitere Features sind angedacht, sobald das funktioniert.
Ist aufgenommen! Das ist ein sehr sinnvolles Feature, btw. Willst du das über einzelne /api/v3/community/follow Aufrufe umsetzen oder direkt im exportierten JSON? Führst du ne DB über bekannte Community IDs bzw names oder rufst du die ebenfalls dynamisch über /api/v3/community ab? Bei potenziell sehr vielen API-Anfragen können ja leider diverse Problemchen entstehen.
Das Update ist da und deployed 🥳- mein Tool bietet nun auch an auf der Zielinstanz nach Communities zu suchen, die denselben Namen haben wie bereits abonnierte Communities von anderen Instanzen (sofern nicht bereits abonniert) und kann die auf Wunsch mit aufnehmen: