Migración desde Yahoo! Groups

Muchos grupos de Yahoo se ven afectados por la decisión de Yahoo de eliminar el contenido subido, y están buscando proveedores alternativos. El más obvio es groups.io, que ofrece paridad de funciones y migrará automáticamente todo el contenido del grupo, pero (1) cuesta 220 dólares el primer año para realizar la migración (después de eso, es gratuito si los requisitos de almacenamiento son < 1 GB), y (2) aún utiliza el mismo formato centrado en el correo electrónico de Yahoo Groups. He visto mencionado en otro tema (Yahoo Groups to Discourse migration?) que existe un script de migración, pero, según lo que puedo ver (admito que no mucho en este momento), solo migra los mensajes.

Dado que el cambio en Yahoo que impulsará a los grupos a mudarse es la pérdida del almacenamiento de archivos y fotos, esto deja dos preguntas:

  • ¿Existe una forma automatizada de mover el contenido subido desde un grupo de Yahoo a una instancia de Discourse?
  • ¿Qué opciones hay en Discourse para hacer que ese contenido esté disponible/visible para otros usuarios? La única que veo es que el contenido subido por un usuario se coloque en uno o varios temas creados por ese usuario, probablemente en categorías distintas. Para las fotos, esto sería bastante sencillo; para otros documentos subidos al grupo (principalmente PDFs, algunos archivos .doc y .xls), parece que requeriría algunos cambios de configuración, pero nada demasiado grave. ¿Pero hay otra opción?

Interesante… No sabía que Yahoo Groups iba a eliminar el contenido subido. Tengo un grupo antiguo de Yahoo que aún mantengo para mi vecindario y he tenido en mente migrarlo a una instancia de Discourse… quizás ya es el momento.

Creo que la forma más sencilla de migrar sería exportar la lista de suscriptores a CSV y luego usarla para crear tu base de usuarios en Discourse; eso debería ser bastante directo.

En cuanto al contenido, ¿tienes un historial completo de los mensajes enviados a la lista en tu correo? Si es así, podrías usar una aplicación como Thunderbird para descargar todos los mensajes y guardarlos en formato MBOX. Una vez que los tengas, existen scripts para importarlos. Creo que esta guía te ayudará: Migrate a mailing list to Discourse (mbox, Listserv, Google Groups, etc)

No estoy seguro de a qué te refieres con “contenido subido”; yo no he usado Yahoo Groups de esa manera. No sé cuáles son tus opciones para extraer ese contenido de Yahoo y prepararlo para Discourse. Quizás sea un proceso manual… y tal vez una buena oportunidad para organizarte y deshacerte de lo que ya no necesitas.

Pero sí, Discourse está orientado a discusiones, por lo que todo el contenido se organiza en temas. Es posible configurar los temas como wikis para que puedan ser mantenidos por un grupo, incluyendo la adición o eliminación de archivos adjuntos. También hay mensajes privados que podrían usarse para hablar contigo mismo o con una selección específica de otras personas, donde, supongo, las personas podrían guardar cierto contenido. Quizás te resulte más sencillo explorar otra herramienta con SSO para compartir archivos. En mi comunidad usamos WordPress, que tiene un plugin que maneja SSO y funciona de manera muy fluida. Si estás hablando de muchos archivos, podrías configurar una instancia de Nextcloud.

¡Que lo disfrutes!

Actualización: ¡guau… definitivamente parece que es hora de mudarse! Están tomando medidas drásticas para limitar la utilidad de Yahoo Groups, y muy pronto. No habrá nuevo contenido a partir del 28 de octubre, ¡en dos días! Y el contenido será eliminado el 14 de diciembre.

No, aunque no soy administrador de ninguna de las listas con las que trabajo. Sin embargo, la migración de los mensajes parece estar cubierta por discourse/script/import_scripts/yahoogroup.rb at main · discourse/discourse · GitHub y GitHub - jonbartlett/yahoo-groups-export: Export Yahoo Groups forum to file or database · GitHub. Además, un administrador del grupo podría exportar los mensajes del grupo junto con las direcciones de correo electrónico adjuntas (algo que un usuario normal no puede hacer). Aunque no parece ser tan sencillo como un solo clic, los mensajes parecen ser lo menos preocupante en este momento.

Yahoo Groups proporcionaba (bueno, proporcionaba) espacio de almacenamiento para fotos (100 GB) y otros archivos (2 GB) para el grupo. Los grupos en los que estoy participo utilizan este espacio para fotos de los miembros del grupo y elementos de interés para el mismo, así como para varios otros archivos. Cualquier cosa que se enviara de forma privada entre miembros en un grupo de Yahoo probablemente se habría enviado como correo electrónico, y Yahoo no tendría ningún registro de eso; no creo que la migración de eso siquiera fuera posible, mucho menos una prioridad. Pero hay mucha información almacenada allí en muchos grupos, y querrían preservarla en una migración.

Podría ser. De nuevo, hay uno (y solo uno, que yo sepa) sitio que parece ser un reemplazo llave en mano, pero mantiene el formato antiguo de los grupos de Yahoo con solo cambios menores. Estoy pensando que, si un grupo tiene que migrar de todos modos, podría ser agradable migrar a algo más moderno, y Discourse todavía funciona muy bien con el correo electrónico (algo que muchos otros paquetes de foros no hacen), lo que significa que las personas de la vieja escuela como yo, que estamos acostumbrados a recibir los correos electrónicos y responder por correo electrónico, aún podemos hacerlo de esa manera. Y ahorrar unos dólares también sería agradable.

Así, más novedades. Esta herramienta:

parece funcionar bastante bien para descargar masivamente el contenido de un grupo: obtiene todos los mensajes, archivos, adjuntos, etc. Los mensajes se descargan en dos archivos .json cada uno, uno «crudo» (raw) y el otro en HTML. El primero se ve así:

{
    "userId": 185744666,
    "authorName": "vhsproducts@aol.com",
    "from": "vhsproducts@...",
    "profile": "vhsproducts",
    "replyTo": "LIST",
    "senderId": "fc-T6L4xNaFRDleu_7gutRzgA_WWujKXanij68LOf7iz0WXh-BolDsmiqlo19adwRPTjwe0FpCYycg",
    "spamInfo": {
        "isSpam": false,
        "reason": "0"
    },
    "subject": "Re: [MicroTrak] Mint-Trak300 completed",
    "postDate": "1181013131",
    "msgId": 4,
    "canDelete": false,
    "contentTrasformed": false,
    "systemMessage": false,
    "headers": {
        "messageIdInHeader": "PGM3ZC5lNWZlOTFjLjMzOTYyZThiQGFvbC5jb20+"
    },
    "prevInTopic": 3,
    "nextInTopic": 6,
    "prevInTime": 3,
    "nextInTime": 5,
    "topicId": 3,
    "numMessagesInTopic": 4,
    "msgSnippet": "Outstanding work! I see you have the first gen of the Micro-Trak ( although we still sell them for people with TT3 SMT s) How long will a 9 volt run your GPS? ",
    "rawEmail": "Return-Path: &lt;VHSProducts@...&gt;\r\nX-Sender: VHSProducts@...\r\nX-Apparently-To: MicroTrak@yahoogroups.com\r\nReceived: (qmail 18487 invoked from network); 5 Jun 2007 03:13:19 -0000\r\nReceived: from unknown (66.218.67.36)\n  by m50.grp.scd.yahoo.com with QMQP; 5 Jun 2007 03:13:19 -0000\r\nReceived: from unknown (HELO imo-m23.mx.aol.com) (64.12.137.4)\n  by mta10.grp.scd.yahoo.com with SMTP; 5 Jun 2007 03:13:19 -0000\r\nReceived: from VHSProducts@...\n\tby imo-m23.mx.aol.com (mail_out_v38_r9.2.) id r.c7d.e5fe91c (29679)\n\t for &lt;MicroTrak@yahoogroups.com&gt;; Mon, 4 Jun 2007 23:12:11 -0400 (EDT)\r\nMessage-ID: &lt;c7d.e5fe91c.33962e8b@...&gt;\r\nDate: Mon, 4 Jun 2007 23:12:11 EDT\r\nTo: MicroTrak@yahoogroups.com\r\nMIME-Version: 1.0\r\nContent-Type: multipart/alternative; boundary=&quot;-----------------------------1181013131&quot;\r\nX-Mailer: 9.0 Security Edition for Windows sub 5365\r\n(snip)"
}

…mientras que el segundo se ve así:

{
    "userId": 185744666,
    "authorName": "vhsproducts@aol.com",
    "from": "vhsproducts@...",
    "profile": "vhsproducts",
    "replyTo": "LIST",
    "senderId": "oChpSVZSELyeHvFRyDX_nG5dfpdVZTLBKFMDvOg33fSsrDk5l-zpPohl42rhz6OhM9tFfSjAxxGsRg",
    "spamInfo": {
        "isSpam": false,
        "reason": "0"
    },
    "subject": "Re: [MicroTrak] Mint-Trak300 completed",
    "postDate": "1181013131",
    "msgId": 4,
    "canDelete": false,
    "contentTrasformed": false,
    "systemMessage": false,
    "headers": {
        "messageIdInHeader": "PGM3ZC5lNWZlOTFjLjMzOTYyZThiQGFvbC5jb20+"
    },
    "prevInTopic": 3,
    "nextInTopic": 6,
    "prevInTime": 3,
    "nextInTime": 5,
    "topicId": 3,
    "numMessagesInTopic": 4,
    "msgSnippet": "Outstanding work! I see you have the first gen of the Micro-Trak ( although we still sell them for people with TT3 SMT s) How long will a 9 volt run your GPS? ",
    "messageBody": "\u003cdiv id=\"ygrps-yiv-810547383\"\u003e\n\u003chtml\u003e\u003chead\u003e\n \n\u003c/head\u003e \n\n\u003cfont id=\"ygrps-yiv-810547383role_document\"\n face=\"Arial\" color=\"#000000\" size=\"2\"\u003e\n\u003cdiv\u003eOutstanding work! I see you have the first gen of the Micro-Trak ( although \nwe still sell them for people with TT3 SMT&#39;s) How long will a 9 volt run your \nGPS?\u003c/div\u003e\n(snip)",
    "specialLinks": []
}

Dependiendo del grupo, puede haber decenas o incluso cientos de miles de estos archivos. Yahoo, siendo Yahoo, oculta las direcciones de correo electrónico a los usuarios «normales»: los propietarios del grupo pueden verlas, y quizás los moderadores, pero el resto no. Ahora toca ver si hay una manera relativamente sencilla de importar masivamente estos datos en una instancia de Discourse, o si sería mejor usar las herramientas que mencioné anteriormente.

Esta herramienta también descarga archivos y fotos, junto con encuestas, calendarios y otro material que a mí no me interesa demasiado, pero que sin duda otros sí valorarían.

Otro punto más: una lectura más cuidadosa del mensaje de Yahoo indica que no solo están eliminando archivos y fotos, sino que también están haciendo desaparecer los archivos de mensajes. Eso realmente va a hacer que pierdan utilidad para cualquier propósito.

Por favor, migren a Discourse.

Necesitamos más sitios web independientes y menos personas dependiendo de las grandes plataformas monopolísticas.

Solo para mencionar que hace años migramos nuestra comunidad local de un Grupo de Yahoo a Discourse y nunca hemos mirado atrás. Los toques personales que puedes añadir a tu recurso de comunicación compartido ya valen la pena por sí solos, pero las funciones adicionales son la cereza del pastel.

Desafortunadamente, no puedo ofrecerte experiencia útil sobre la migración, ya que simplemente comenzamos de cero, excepto por la lista de correo. ¿Por qué no dejar el sitio antiguo del Grupo de Yahoo activo y proporcionar un enlace? ¿Cuántos archivos adjuntos necesitas realmente conservar? ¿Dirígete a los más importantes?

¡Mucha suerte, te irá bien!

No es una decisión que tome directamente, pero tengo ciertas inclinaciones en ese sentido. Y para el grupo que más me preocupa, no espero que los archivos y las fotos sean un problema importante; ya los he descargado todos y son tan pocos que transferirlos manualmente a los temas no debería ser un gran problema.

Sí, porque estamos viendo ahora mismo uno de los riesgos de eso.

Porque en seis semanas todos los datos desaparecerán de allí.

Puedo escribir un importador para leer esos archivos JSON, pero no puedo competir con 200 dólares. Por lo general, cobro 10 veces esa cantidad para escribir un importador e importar un foro de tamaño moderado (varios cientos de miles de publicaciones).

Así que parece que me convendría más usar:

seguido de:

…una vez que los entienda.

(edits importantes a continuación—segundo intento)

Trabajando en el proceso de importación de mensajes, siguiendo las instrucciones de Migrate from another forum to Discourse. Según mi entendimiento, el proceso debería ser así:

  • Configurar el entorno de desarrollo usando Install Discourse on Ubuntu or Debian for Development
  • Instalar MongoDB en ese sistema
  • En ese sistema, como el mismo usuario no privilegiado que ejecuta Discourse, git clone el script de yahoo-group-export
  • Como el mismo usuario, gem install mechanize; gem install mongo. Luego editar .config.yaml para proporcionar las credenciales de Yahoo y el nombre del grupo, y ejecutar ruby bin/yg-export.rb.
  • Tomar una taza (o dos) de tu bebida preferida.
  • Una vez que yg-export termine, en el directorio de Discourse, revisa script/import_scripts/yahoogroup.rb. Edítalo para que apunte al MONGODB_HOST correcto (localhost).
  • En el directorio de discourse, ejecuta bundle exec ruby script/import_scripts/yahoogroup.rb
  • Verifica que se haya importado correctamente
  • Haz una copia de seguridad y restaura en un servidor en vivo

Los pasos 2 a 4 son inferidos. ¿Pero esto parece ser la secuencia correcta a seguir? Creyendo que lo era, procedí. Funcionó bien hasta el paso 4: yg-export.rb se ejecutó durante aproximadamente una hora, reportando ÉXITO para todo y guardando ~38k mensajes. La base de datos syncro está presente con ~85MB de datos. En ese punto, tomé una instantánea de la VM.

Sin embargo, tengo problemas con el script de importación. Cuando ejecuto bundle exec ruby script/import_scripts/yahoogroup.rb, obtengo esto:

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)

Extraño, pensé que ya había instalado el gem mongo. Bueno, lo instalaré de nuevo:

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

Vuelvo a ejecutar el script de importación, mismo resultado. ¿Importa si lo instalo a nivel del sistema?

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.

Más curioso y más curioso…

Necesitas agregar las gemas al Gemfile y ejecutar bundle install, de lo contrario, al ejecutar bundle exec ruby script/import_scripts/yahoogroup.rb no se encontrarán las gemas.

Ese era el fragmento que me faltaba; ahora la importación está avanzando sin problemas. ¡Gracias!

Edición: Bien, el proceso de importación duró 75 minutos y los mensajes ya están allí. Excelente. También se crearon usuarios, algo que me había preguntado. Sin embargo, estoy detectando un par de problemas con los usuarios:

  • Parece que todos los nombres de usuario de Yahoo se importaron correctamente (reconozco muchos de ellos por mi pertenencia a la lista), pero se asociaron a los mensajes incorrectos. Lo hicieron de manera consistente: todos los mensajes que publiqué ahora aparecen como si los hubiera publicado el mismo usuario; sin embargo, es un error significativo que sería muy laborioso corregir manualmente.
  • Todos los usuarios importados están suspendidos durante los próximos 200 años.

Sospecho que ambos problemas se deben a la falta de direcciones de correo electrónico válidas en los datos descargados de Yahoo, ya que no soy administrador del grupo. Eso se menciona explícitamente como la causa del segundo problema, pero no sé si también podría ser la causa del primero. ¿Qué opinan?

Si ese es el problema, me da algo en qué investigar, pero también plantea un posible inconveniente: sé que hay dos moderadores vivos para el grupo, pero el propietario falleció en el último año. Ojalá alguien tenga acceso a esa información…

Hola,

Hay un nuevo plugin para eso.

He exportado e importado todos los mensajes de Yahoo! desde una versión de desarrollo como una categoría con este script:
https://meta.discourse.org/t/topic-and-category-export-import/38930/38

Ahora surgió el problema con los usuarios duplicados o incorrectos.
Con este plugin: Merge Users Plugin
puedes fusionar fácilmente los usuarios de Yahoo con tus usuarios de Discourse.

Y ahora solo nos queda el problema con los archivos adjuntos de Yahoo.

Eso no hace exactamente lo que necesito: los únicos usuarios presentes en esta instancia, aparte del usuario administrador, son los importados desde Yahoo. El problema es que el nombre de usuario incorrecto está asociado a las publicaciones incorrectas: mis publicaciones están conectadas (de manera consistente, según puedo ver) al nombre de usuario de otra persona, y las publicaciones de otra persona están conectadas a las mías.

Ahora se me ha otorgado acceso de moderador a este grupo, lo cual es suficiente para descargar mensajes con las direcciones de correo electrónico reales adjuntas. Reconstruiré (las máquinas virtuales son ideales para eso), volveré a realizar la importación y veré si eso soluciona el problema.

Hola, bien, eso no es lo mismo que descubrí yo. En mi comunidad, ninguna de las publicaciones importadas estaba conectada a ninguno de los miembros existentes de la comunidad.
Si importé la categoría como se describe en el tema enlazado, entonces solo tenía usuarios duplicados (o alguien nuevo) en la lista de usuarios.

El importador asignó las publicaciones al usuario incorrecto, pero lo hizo de la manera correcta. Es decir, si las publicaciones que escribí yo mismo en Yahoo! están asignadas a “Hans”, entonces todas mis publicaciones estaban asignadas a “Hans”.

Tengo el ID de usuario 1 en mi foro comunitario, pero ese no es el mismo nombre que en el foro de Discourse para desarrollo que configuré. Así que mi cuenta no fue sobrescrita, sino que había otra cuenta con el mismo nombre. Pero esta cuenta está vinculada a la publicación incorrecta.

Ahora estoy usando el plugin enlazado para fusionar todos los usuarios por separado con la persona correcta en mi foro. No toma mucho tiempo, pero es difícil averiguar qué publicación pertenece a qué usuario.

Es posible que estemos en situaciones diferentes: en mi caso, no hay una “comunidad existente”. Más bien, todo se está importando desde el grupo Y.

OK, tengo la descarga de los mensajes del grupo que incluye las direcciones de correo electrónico completas. Después de algunos problemas con el entorno de desarrollo, he podido volver a trabajar en la importación. Aún así, sigo notando algunos problemas:

  • El problema de que los nombres de usuario incorrectos estén vinculados a las publicaciones incorrectas persiste.
  • Posiblemente como causa (o “una causa”) de lo anterior, la mayoría de los usuarios importados se determinan que tienen direcciones de correo electrónico no válidas. En la base de datos Mongo generada por el script yahoo-export, el campo From (desde el cual parece que el script de importación intenta leer las direcciones de correo electrónico) aparece para la mayoría de los usuarios así:
Nombre Apellido &lt;usuario@dominio.com&gt;

…lo cual Discourse rechaza como una dirección de correo electrónico no válida. Como resultado, la mayoría de los usuarios se les asigna una dirección de correo electrónico como 5dc3e1b4f4d821bd7de3ce456eaf26d5@email.invalid; las excepciones parecen ser aquellos usuarios que enviaron correos sin sus nombres completos adjuntos.

  • Los mensajes importados contienen varias entidades HTML, especialmente para comillas y signos mayor que y menor que.

  • Muchos, pero definitivamente no todos, de los mensajes importados tienen un nombre de grupo en la línea de asunto: Re: [SpareOom] algún asunto. Sería bueno eliminarlos.
    Para los últimos tres puntos, me pregunto si una simple búsqueda y reemplazo en toda la base de datos podría solucionarlo y, de ser así, cómo proceder teniendo en cuenta que nunca he tocado MongoDB antes.

  • Un asunto aparte es importar los mensajes en una categoría designada. Los comentarios en la parte superior de yahoogroup.rb indican que puedes ejecutar export CATEGORY_ID=<CATEGORY_ID> antes de ejecutar el script para hacer esto, pero no indican a qué se refiere <CATEGORY_ID>. He probado con el nombre regular de la categoría, así como con el “slug de la categoría” (ambos son iguales excepto por la capitalización), pero en ambos casos el script de importación falla con:

         1: from /home/dan/discourse/lib/topic_creator.rb:36:in `create'
/home/dan/discourse/lib/topic_creator.rb:115:in `setup_topic_params': category (Discourse::InvalidParameters)

Eso suena mucho a mi primera importación de mbox. Me llevó un par de meses.

Sí, probablemente puedas arreglar algunas cosas con algunos reemplazos.

Si agregas .json al final de la URL de una categoría, puedes encontrar un ID de categoría. Es un número entero.

Necesitarás ver qué identificador está usando el creador del usuario y qué se está utilizando en la función de publicación para encontrar usuarios. O tal vez simplemente no coinciden.

Al revisar yahoogroup.rb, está claro que espera que el campo From del mensaje sea una dirección de correo electrónico simple. Dado que la mayoría de los usuarios configuran sus clientes de correo para enviar también un nombre (por ejemplo,

Fred Flintstone <fred@flintstone.com>

), ese es el problema n.º 1. Una búsqueda rápida en Google sugiere que esto se puede solucionar usando la gema Mail, lo que cambiaría esa línea en el script de importación para que quede así:

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

…lo que extraería únicamente la dirección de correo electrónico. Pero, como se mencionó anteriormente, los corchetes angulares se almacenan como entidades HTML en su lugar, lo que rompe este método. Una búsqueda más profunda indica que existe la gema HTMLEntities que se encargaría de esto, lo que me lleva a probar lo siguiente:

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

Pero esto falla debido a la falta del método downcase.

Edición: Intenté evitarlo tomando un camino diferente; vi muchas sugerencias sobre Nokogiri. Pero por útil que sea, las sugerencias que encontré no decodificaban las entidades de los corchetes angulares, que era (y sigue siendo) mi necesidad más inmediata. Así que vuelvo a HTMLEntities. Agregué require 'mail' y require 'htmlentities' al inicio del script de importación de Yahoo y cambié la línea 75 (que era la línea 73 antes de agregar los require) para que se lea como se indicó arriba. Aún estoy obteniendo un error, pero lo que había pasado por alto anteriormente es que en realidad analiza e importa correctamente a un usuario antes de fallar:

dan@ubuntu:~/discourse$ bundle exec ruby script/import_scripts/yahoogroup.rb
Cargando grupos existentes...
Cargando usuarios existentes...
Cargando categorías existentes...
Cargando publicaciones existentes...
Cargando temas existentes...
(snip)
conectado a la base de datos....

Importando desde Mongodb....

Importando usuarios
Usuario creado: 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)

(la dirección de correo electrónico en esta salida está enmascarada, pero está en la base de datos de origen con el nombre completo y las entidades para los corchetes angulares, por lo que parece que mis cambios en el script tuvieron exactamente el efecto deseado). Esto me tiene un poco confundido, ya que entendía que downcase debería estar disponible por defecto.

Edición 2: Bueno, analiza el usuario, pero en realidad no importa el usuario en la instancia de Discourse.

Lo de los correos electrónicos sigue sin tener sentido para mí, pero decidí dejarlo de lado por el momento y ver si podía aplicar HTMLEntities al título del tema y al texto del mensaje. En el script yahoogroup.rb, cambié la línea 110 para que dijera:

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

…y la línea 116 para que dijera:

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

(ambos números de línea son +2 en comparación con el script original, debido a que agregué las dos líneas require que mencioné anteriormente). Funcionó perfectamente. La salida de la terminal no cambió (eso habría sido en la línea 105, que no noté hasta que ya había comenzado a ejecutarlo), pero los títulos de los temas y el texto en la instancia importada están muy limpios.

Así que este método parece funcionar perfectamente para limpiar los títulos de los temas y los cuerpos de los mensajes, pero no está funcionando para las direcciones de correo electrónico. ¿Alguna idea de qué debería buscar en ese aspecto? En ese punto, estoy un poco atascado.

Podría ser más fácil utilizar Migrate a mailing list to Discourse (mbox, Listserv, Google Groups, etc) para importar datos desde Yahoo Groups. Ya sea mediante archivos mbox o, quizás, convirtiendo los archivos JSON que mencionaste en archivos MSG individuales que contengan el texto crudo del correo electrónico.

El script de importación de mbox maneja tanto archivos mbox como correos almacenados en archivos individuales, y es posible que ya haya resuelto todos los problemas que estás encontrando actualmente.