Migration von Yahoo! Groups

Viele Yahoo-Gruppen sind von der Entscheidung von Yahoo betroffen, hochgeladene Inhalte zu entfernen, und suchen nach alternativen Anbietern. Die naheliegende Wahl ist groups.io, das eine vollständige Funktionsäquivalenz bietet und alle Gruppeninhalte automatisch migriert. Allerdings (1) kostet die Migration im ersten Jahr 220 USD (danach ist sie kostenlos, sofern die Speicheranforderungen unter 1 GB liegen) und (2) wird weiterhin das gleiche E-Mail-zentrierte Format von Yahoo Groups verwendet. In einem anderen Thema (Yahoo Groups to Discourse migration?) wird ein Migrations-Skript erwähnt, aber soweit ich sehen kann (zwar noch nicht im Detail), migriert dieses nur Nachrichten.

Da der Grund für den Umzug der Gruppen in der Yahoo-Änderung der Verlust der Speicheroptionen für Dateien und Fotos ist, ergeben sich zwei Fragen:

  • Gibt es eine automatisierte Möglichkeit, hochgeladene Inhalte von einer Yahoo-Gruppe in eine Discourse-Instanz zu übertragen?
  • Welche Optionen gibt es in Discourse, um diesen Inhalt für andere Benutzer verfügbar/sichtbar zu machen? Die einzige Lösung, die ich sehe, besteht darin, dass von einem Benutzer hochgeladene Inhalte in ein oder mehrere Themen dieses Benutzers eingefügt werden, wahrscheinlich in verschiedenen Kategorien. Für Fotos wäre das relativ einfach; für andere in die Gruppe hochgeladene Dokumente (meist PDFs, einige .doc- und .xls-Dateien) scheint dies einige Konfigurationsänderungen zu erfordern, aber nichts allzu Ernstes. Gibt es jedoch eine andere Option?

Interessant… Ich wusste nicht, dass Yahoo Groups hochgeladene Inhalte entfernen wird. Ich habe eine alte Yahoo-Gruppe, die ich noch für meine Nachbarschaft verwalte, und es schwebte mir schon länger im Hinterkopf, sie auf eine Discourse-Instanz zu migrieren. Vielleicht ist es jetzt soweit.

Der einfachste Weg zur Migration wäre meiner Meinung nach, die Teilnehmerliste als CSV zu exportieren und diese dann zu verwenden, um die Benutzerbasis in Discourse anzulegen – das sollte ziemlich unkompliziert sein.

Was den Inhalt betrifft: Hast du eine vollständige Historie der an die Liste gesendeten Nachrichten in deinem E-Mail-Postfach? Falls ja, könntest du eine Anwendung wie Thunderbird verwenden, um alle Nachrichten herunterzuladen und als MBOX zu speichern. Sobald du das hast, gibt es Skripte für den Import. Ich denke, diese Anleitung wird dir helfen: Migrate a mailing list to Discourse (mbox, Listserv, Google Groups, etc)

Ich bin mir nicht sicher, was du mit „hochgeladenen Inhalten

Ich nicht, obwohl ich kein Administrator für eine der Listen bin, mit denen ich mich befasse. Das Migrieren der Nachrichten scheint jedoch durch discourse/script/import_scripts/yahoogroup.rb at main · discourse/discourse · GitHub und GitHub - jonbartlett/yahoo-groups-export: Export Yahoo Groups forum to file or database · GitHub adressiert zu werden. Ein Gruppenadministrator könnte die Gruppennachrichten zusammen mit den E-Mail-Adressen exportieren (was ein normaler Benutzer nicht kann). Obwohl es nicht ganz auf Knopfdruck einfach aussieht, scheinen die Nachrichten in diesem Moment das geringste Problem zu sein.

Yahoo Groups boten (bieten) Speicherplatz für Fotos (100 GB) und andere Dateien (2 GB) für die Gruppe an. Die Gruppen, in denen ich bin, nutzen dies für Bilder von Gruppenmitgliedern und für Dinge, die für die Gruppe von Interesse sind, sowie für verschiedene andere Dateien. Alles, was in einer Yahoo-Gruppe privat zwischen Mitgliedern ausgetauscht wird, wäre wahrscheinlich als E-Mail gesendet worden; Yahoo hätte davon keine Aufzeichnung. Ich würde nicht denken, dass die Migration davon überhaupt möglich wäre, geschweige denn eine Priorität. Aber in vielen Gruppen wird dort eine Menge Information gespeichert, die sie bei einer Migration erhalten möchten.

Könnte sein. Wieder gibt es eine (und nur eine, soweit ich weiß) Seite, die als Komplettlösung erscheint, aber das alte Format von Yahoo-Gruppen mit nur geringfügigen Änderungen beibehält. Ich denke, wenn eine Gruppe ohnehin migrieren muss, wäre es schön, zu etwas Modernerem zu migrieren. Discourse funktioniert immer noch sehr gut mit E-Mail (was viele andere Forenpakete nicht tun), was bedeutet, dass die altmodischen Leute wie ich, die es gewohnt sind, E-Mails zu erhalten und per E-Mail zu antworten, das weiterhin so tun können. Und ein paar Dollar zu sparen, wäre auch nicht schlecht.

Also, weitere Entwicklungen. Dieses Tool:

scheint beim massenhaften Herunterladen des Inhalts einer Gruppe ziemlich gut zu funktionieren – es lädt alle Nachrichten, Dateien, Anhänge usw. herunter. Die Nachrichten werden jeweils in zwei .json-Dateien heruntergeladen, eine „raw

Bitte migrieren Sie zu Discourse.

Wir brauchen mehr unabhängige Websites und weniger Menschen, die sich auf die großen Monopolplattformen verlassen.

Nur zur Info: Ich habe meine lokale Community vor Jahren von einer Yahoo-Gruppe zu Discourse migriert, und wir haben es nie bereut. Die persönlichen Elemente, die Sie Ihrer gemeinsamen Kommunikationsressource hinzufügen können, sind allein schon den Aufwand wert, aber die zusätzlichen Funktionen sind das Sahnehäubchen.

Leider kann ich Ihnen keine nützlichen Erfahrungen aus einer Migration bieten, da wir einfach von vorne begonnen haben – abgesehen von der E-Mail-Liste. Warum lassen Sie nicht einfach die alte Yahoo-Gruppenseite online und verlinken sie? Wie viele Anhänge müssen Sie wirklich behalten? Konzentrieren Sie sich auf die wichtigsten?

Viel Erfolg, Sie schaffen das!

Das liegt nicht direkt in meiner Entscheidung, aber ich neige in diese Richtung. Für die Gruppe, die mir am meisten am Herzen liegt, erwarte ich, dass die Dateien und Fotos kein großes Problem darstellen – ich habe sie alle heruntergeladen, und da es nur wenige sind, sollte das manuelle Übertragen in Themen keine große Herausforderung sein.

Ja, denn wir sehen gerade eines der Risiken davon.

Weil in sechs Wochen alle Daten dort verschwinden werden.

Ich kann zwar einen Importer schreiben, um diese JSON-Dateien einzulesen, aber ich kann nicht mit 200 $ konkurrieren. Normalerweise berechne ich das Zehnfache dafür, einen Importer zu schreiben und ein mittelgroßes Forum (ein paar hunderttausend Beiträge) zu importieren.

Es klingt also so, als wäre es besser, wenn ich Folgendes verwende:

gefolgt von:

…sobald ich sie verstanden habe.

(größere Änderungen unten – zweiter Versuch)

Ich arbeite am Prozess zum Importieren von Nachrichten und folge dabei den Anweisungen unter Migrate from another forum to Discourse. Wie ich es verstehe, sollte der Ablauf so aussehen:

  • Entwicklungsumgebung einrichten gemäß Install Discourse on Ubuntu or Debian for Development
  • MongoDB auf diesem System installieren
  • Auf diesem System, als derselbe nicht privilegierte Benutzer, der Discourse ausführt, das yahoo-group-export-Skript mit git clone klonen
  • Als derselbe Benutzer: gem install mechanize; gem install mongo. Dann .config.yaml bearbeiten, um die Yahoo-Anmeldedaten und den Gruppennamen einzutragen, und ruby bin/yg-export.rb ausführen.
  • Eine Tasse (oder zwei) Ihres Lieblingsgetränks genießen.
  • Sobald yg-export abgeschlossen ist, im Discourse-Verzeichnis script/import_scripts/yahoogroup.rb prüfen. Bearbeiten Sie die Datei, damit sie auf den korrekten MONGODB_HOST (localhost) zeigt.
  • Im discourse-Verzeichnis bundle exec ruby script/import_scripts/yahoogroup.rb ausführen
  • Prüfen, ob der Import korrekt durchgeführt wurde
  • Sicherungskopie erstellen und auf einen Live-Server wiederherstellen

Die Schritte 2–4 wurden abgeleitet. Sieht das aber nach den richtigen Schritten aus? Da ich das glaubte, habe ich damit begonnen. Der Ablauf verlief bis Schritt 4 problemlos – yg-export.rb lief etwa eine Stunde, meldete für alles ERFOLG und speicherte ca. 38.000 Nachrichten. Die Datenbank syncro ist vorhanden und enthält ca. 85 MB Daten. Zu diesem Zeitpunkt habe ich einen Snapshot der VM erstellt.

Ich habe jedoch Probleme mit dem Import-Skript. Wenn ich bundle exec ruby script/import_scripts/yahoogroup.rb ausführe, erhalte ich folgende Meldung:

dan@ubuntu:~/discourse$ bundle exec ruby script/import_scripts/yahoogroup.rb
Traceback (most recent call last):
script/import_scripts/yahoogroup.rb: Bootsnap::LoadPathCache::FallbackScan
        7: from script/import_scripts/yahoogroup.rb:4:in `<main>'
        6: from /home/dan/.rbenv/versions/2.6.2/lib/ruby/gems/2.6.0/gems/zeitwerk-2.1.10/lib/zeitwerk/kernel.rb:23:in `require'
        5: from /home/dan/.rbenv/versions/2.6.2/lib/ruby/gems/2.6.0/gems/bootsnap-1.4.4/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:26:in `require'
        4: from /home/dan/.rbenv/versions/2.6.2/lib/ruby/gems/2.6.0/gems/bootsnap-1.4.4/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:40:in `rescue in require'
        3: from /home/dan/.rbenv/versions/2.6.2/lib/ruby/gems/2.6.0/gems/bootsnap-1.4.4/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:21:in `require_with_bootsnap_lfi'
        2: from /home/dan/.rbenv/versions/2.6.2/lib/ruby/gems/2.6.0/gems/bootsnap-1.4.4/lib/bootsnap/load_path_cache/loaded_features_index.rb:89:in `register'
        1: from /home/dan/.rbenv/versions/2.6.2/lib/ruby/gems/2.6.0/gems/bootsnap-1.4.4/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `block in require_with_bootsnap_lfi'
/home/dan/.rbenv/versions/2.6.2/lib/ruby/gems/2.6.0/gems/bootsnap-1.4.4/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `require': cannot load such file -- mongo (LoadError)

Seltsam, ich dachte, ich hätte das mongo-Gem bereits installiert. Na gut, ich installiere es noch einmal:

dan@ubuntu:~/discourse$ gem install mongo
Successfully installed mongo-2.10.2
Parsing documentation for mongo-2.10.2
Done installing documentation for mongo after 4 seconds
1 gem installed

Das Import-Skript erneut ausführen, dasselbe Ergebnis. Macht es einen Unterschied, wenn ich es auf Systemebene installiere?

dan@ubuntu:~/discourse$ sudo apt install ruby-mongo
[sudo] password for dan: 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
ruby-mongo is already the newest version (2.5.1-1).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

Je seltsamer, je besser…

Du musst die Gems zur Gemfile-Datei hinzufügen und bundle install ausführen, andernfalls findet der Befehl bundle exec ruby script/import_scripts/yahoogroup.rb die Gems nicht.

Das war das fehlende Puzzleteil. Jetzt läuft der Import munter weiter. Danke!

Edit: OK, der Import-Prozess lief 75 Minuten, und die Beiträge sind jetzt da. Exzellent. Es wurden auch Benutzer erstellt, was ich mir zuvor gefragt habe. Allerdings sehe ich ein paar Probleme mit den Benutzern:

  • Es scheint, als wären alle Yahoo-Benutzernamen korrekt importiert worden (ich erkenne viele davon von meiner Mitgliedschaft in der Liste), aber sie wurden den falschen Nachrichten zugeordnet. Das geschah durchgängig – alle Nachrichten, die ich gepostet habe, scheinen nun von demselben anderen Benutzer verfasst worden zu sein. Dennoch ist dies ein erheblicher Fehler, den manuell zu bereinigen eine große Mühe wäre.
  • Alle importierten Benutzer sind für die nächsten 200 Jahre gesperrt.

Ich vermute, dass beide Probleme auf das Fehlen gültiger E-Mail-Adressen in den von Yahoo heruntergeladenen Daten zurückzuführen sind. Das liegt daran, dass ich kein Gruppenadministrator bin – dies wird ausdrücklich als Ursache für das letztere Problem genannt, aber ich weiß nicht, ob es auch das erstere verursacht. Gedanken dazu?

Wenn das das Problem ist, habe ich etwas, dem ich nachgehen kann, aber es wirft auch ein potenzielles Problem auf: Ich weiß, dass es zwei lebende Moderatoren für die Gruppe gibt, aber der Besitzer ist innerhalb des letzten Jahres verstorben. Hoffentlich hat jemand Zugang zu diesen Informationen…

Hallo,

Dafür gibt es ein neues Plugin.

Ich habe alle Yahoo!-Nachrichten aus einer Entwicklungsversion als Kategorie mit diesem Skript exportiert und importiert.
https://meta.discourse.org/t/topic-and-category-export-import/38930/38

Dabei trat das Problem mit doppelten oder falschen Benutzern auf.
Mit diesem Plugin: Merge Users Plugin
kannst du die Yahoo-Benutzer einfach mit deinen Discourse-Benutzern zusammenführen.

Und jetzt haben wir nur noch das Problem mit den Anhängen von Yahoo.

Das erledigt nicht ganz das, was ich brauche – die einzigen Benutzer auf dieser Instanz, neben dem Admin-Benutzer, sind die von Yahoo importierten Benutzer. Das Problem ist, dass der falsche Benutzername an die falschen Beiträge gebunden ist – meine Beiträge sind (konsequent, soweit ich das beurteilen kann) mit dem Benutzernamen einer anderen Person verknüpft, und die Beiträge einer anderen Person sind mit meinem verknüpft.

Mir wurde nun Moderatorzugriff auf diese Gruppe gewährt, was ausreicht, um Nachrichten mit den tatsächlichen E-Mail-Adressen herunterzuladen. Ich werde die Instanz neu aufsetzen (VMs sind dafür großartig), den Import erneut durchführen und sehen, ob dies das Problem behebt.

Hey, okay, das ist nicht dasselbe wie das, was ich herausgefunden habe. In meiner Community waren keine der importierten Beiträge mit einem der bestehenden Community-Mitglieder verknüpft.
Wenn ich die Kategorie wie im verlinkten Thema beschrieben importiert habe, hatte ich nur doppelte Benutzer (oder neue Benutzer) in der Benutzerliste.

Der Importer hat die Beiträge dem falschen Benutzer zugewiesen, aber er hat es auf die richtige Weise getan. Ich meine: Wenn die Beiträge, die ich selbst in Yahoo! geschrieben habe, auf „Hans

Wir befinden uns möglicherweise in unterschiedlichen Situationen – in meinem Fall gibt es keine „bestehende Community“. Vielmehr wird alles aus der Y-Gruppe importiert.

OK, ich habe den Download der Gruppennachrichten inklusive vollständiger E-Mail-Adressen. Nach einigen Problemen mit der Entwicklungsumgebung konnte ich wieder an der Import-Funktion arbeiten. Dabei stelle ich weiterhin einige Probleme fest:

  • Das Problem, dass falsche Benutzernamen mit falschen Beiträgen verknüpft sind, besteht weiterhin.
  • Möglicherweise als (oder „eine

Das klingt sehr nach meinem ersten mbox-Import. Bei mir hat es ein paar Monate gedauert.

Ja, du kannst wahrscheinlich einiges mit ein paar Ersetzungen reparieren.

Wenn du am Ende einer Kategorien-URL .json hinzufügst, findest du eine Kategorien-ID. Das ist eine ganze Zahl.

Du musst herausfinden, welche Kennung der Benutzerersteller verwendet und was von der Post-Funktion zur Suche nach Benutzern genutzt wird. Oder vielleicht passen sie einfach nicht zusammen.

Bei der Durchsicht von yahoogroup.rb zeigt sich eindeutig, dass das From-Feld in der Nachricht eine reine E-Mail-Adresse erwartet. Da die meisten Benutzer ihre E-Mail-Clients so konfigurieren, dass sie auch einen Namen senden (z.
B.

Fred Flintstone <fred@flintstone.com>

), ist dies Problem Nr. 1. Eine kurze Google-Suche legt nahe, dass dies mit dem Mail-Gem behoben werden kann, was die entsprechende Zeile im Import-Skript so ändern würde:

        email: Mail::ToField.new(user_info["ygData"]["from"]), # erforderlich

…was nur die E-Mail-Adresse extrahieren würde. Wie oben erwähnt, werden die spitzen Klammern jedoch stattdessen als HTML-Entitäten gespeichert, was diese Methode zum Scheitern bringt. Weitere Google-Suchen verraten mir, dass es ein HTMLEntities-Gem gibt, das dies erledigen würde, was mich zu diesem Versuch veranlasst:

        email: Mail::ToField.new(HTMLEntities.new.decode(user_info["ygData"]["from"])), # erforderlich

Dies schlägt jedoch fehl, da die Methode downcase fehlt.

Edit: Ich habe versucht, dies zu umgehen, indem ich einen anderen Weg gewählt habe; ich habe viele Vorschläge für Nokogiri gesehen. Aber so nützlich es auch ist, die gefundenen Vorschläge dekodierten die spitzen Klammern-Entitäten nicht, was (und ist) mein dringendstes Bedürfnis war. Also zurück zu HTMLEntities. Ich habe require 'mail' und require 'htmlentities' an den Anfang des Yahoo-Import-Skripts hinzugefügt und Zeile 75 (vor dem Hinzufügen der Requires war es Zeile 73) so geändert, wie oben beschrieben. Ich erhalte weiterhin einen Fehler, aber was ich zuvor übersehen habe, ist, dass tatsächlich ein Benutzer korrekt analysiert und importiert wird, bevor das Skript abstürzt:

dan@ubuntu:~/discourse$ bundle exec ruby script/import_scripts/yahoogroup.rb
Lade bestehende Gruppen...
Lade bestehende Benutzer...
Lade bestehende Kategorien...
Lade bestehende Beiträge...
Lade bestehende Themen...
(snip)
Verbunden mit der Datenbank....

Importiere aus Mongodb....

Importiere Benutzer
Benutzer erstellt: user@host.tld
Traceback (most recent call last):
        8: from script/import_scripts/yahoogroup.rb:163:in `<main>'
        7: from /home/dan/discourse/script/import_scripts/base.rb:47:in `perform'
        6: from script/import_scripts/yahoogroup.rb:39:in `execute'
        5: from script/import_scripts/yahoogroup.rb:58:in `import_users'
        4: from /home/dan/discourse/script/import_scripts/base.rb:247:in `create_users'
        3: from /home/dan/discourse/script/import_scripts/base.rb:247:in `each'
        2: from /home/dan/discourse/script/import_scripts/base.rb:259:in `block in create_users'
        1: from /home/dan/discourse/script/import_scripts/base.rb:290:in `create_user'
/home/dan/discourse/script/import_scripts/base.rb:385:in `find_existing_user': undefined method `downcase' for #<Mail::ToField:0x00005575597e63b8> (NoMethodError)

(Die E-Mail-Adresse in dieser Ausgabe ist maskiert, befindet sich aber in der Quelldatenbank mit dem vollständigen Namen und den Entitäten für die spitzen Klammern – es scheint also, dass meine Änderungen am Skript genau die gewünschte Wirkung hatten). Das verwirrt mich ein wenig, da ich dachte, downcase sei standardmäßig verfügbar.

Edit 2: Nun, es analysiert den Benutzer, importiert ihn aber tatsächlich nicht in die Discourse-Instanz.

Die E-Mail-Sache bringt mich immer noch ins Schleudern, aber ich habe mich entschieden, das vorerst beiseitezulegen und zu prüfen, ob ich HTMLEntities auf den Beitragstitel und den Nachrichtentext anwenden kann. Im Skript yahoogroup.rb habe ich Zeile 110 so geändert:

        topic_title = HTMLEntities.new.decode(topic_post["ygData"]["subject"])

…und Zeile 116 so:

        raw: HTMLEntities.new.decode(topic_post["ygData"]["messageBody"]),

(Beide Zeilennummern liegen um +2 höher als im Originalskript, da ich die beiden oben erwähnten requires-Zeilen hinzugefügt habe). Es hat perfekt funktioniert. Die Terminalausgabe hat sich nicht geändert (das wäre in Zeile 105 passiert, was mir erst aufgefallen ist, als ich es bereits laufen hatte), aber die Beitragstitel und der Text in der importierten Instanz sind sauber und ordentlich.

Diese Methode scheint also perfekt zu funktionieren, um Beitragstitel und Nachrichtentexte aufzubereiten, aber bei den E-Mail-Adressen klappt es nicht. Hast du Ideen, wonach ich da suchen sollte? Da bin ich irgendwie ratlos.

Es könnte einfacher sein, Migrate a mailing list to Discourse (mbox, Listserv, Google Groups, etc) zu verwenden, um Daten von Yahoo Groups zu importieren. Entweder durch die Verwendung von mbox-Dateien oder indem Sie die von Ihnen erwähnten JSON-Dateien in einzelne MSG-Dateien umwandeln, die den rohen E-Mail-Text enthalten.

Das mbox-Import-Skript verarbeitet sowohl mbox-Dateien als auch E-Mails, die in einzelnen Dateien gespeichert sind, und es hat möglicherweise bereits alle Probleme gelöst, auf die Sie derzeit stoßen.