Howto: Einstellungen, geblockte/followed Communities und mehr von einer Lemmy Instanz auf andere Instanz übertragen (z.B. feddit.de -> feddit.org)
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:
https://stablenarwhal.github.io/Lemmy-Userdata-Migration/
Features:
- Export user data from any Lemmy instance (>=v0.19)
- Download user data as a text file
- Modify user data in the browser, e.g. to add or remove followed instances
- Transfer user data to the target account on the target instance
Update 2: @elvith@feddit.org hat auch eine Web Applikation mit ähnlicher Funktionalität entwickelt. Zu finden hier:
https://elvith-de.github.io/lemmy-migration/
Features:
- 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 gehe auf https://feddit.de/api/v3/user/export_settings und speichert die zurückgegebene Datei als irgendwas.json
- 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
@elvith@feddit.org hat mein Script auch in PowerShell nachgebaut, welches unter Windows ohne WSL auskommt: https://gist.github.com/elvith-de/89107061661e001df659d7a7d413092b
# CHANGE THESE VALUES $my_instance="https://feddit.de" # e.g. https://feddit.nl $target_file = "C:\Temp\export.json" ######################################################## #Ask user for username and password $credentials = Get-Credential -Message "Logindata for $my_instance" -Title "Login" $my_username= $credentials.UserName $my_password= $credentials.GetNetworkCredential().Password # Lemmy API version $API="api/v3" # Login function Get-AuthToken() { $end_point="user/login" $json_data= @{ "username_or_email" = $my_username; "password" = $my_password } | ConvertTo-Json $url="$my_instance/$API/$end_point" (Invoke-RestMethod -Headers @{"Content-Type" = "application/json"} -Body $json_data -Method Post -Uri $url).JWT } # Get userdata as JSON function Get-UserData() { $end_point="user/export_settings" $url="$my_instance/$API/$end_point" Invoke-RestMethod -Headers @{"Authorization"="Bearer $($JWT)"} -Method Get -Uri $url } $JWT= Get-AuthToken Write-Host "Got JWT Token: $JWT" Write-Host "Exporting data to $target_file" Get-UserData | ConvertTo-Json | Out-File -FilePath $target_file