Migración desde Yahoo! Groups

No tengo archivos mbox y no conozco ninguna forma de obtenerlos; Yahoo, por supuesto, no me permite descargarlos. ¿Conoces alguna herramienta que convierta JSON a mbox? Google muestra varias herramientas para ir en la dirección opuesta, pero no veo nada que cubra esto de manera rápida.

Esperaba que, dado que existen scripts diseñados específicamente para migrar grupos de Yahoo, esos scripts funcionaran realmente, y que esa fuera la forma más directa de lograr esta tarea. Parece que mi expectativa fue demasiado optimista: los scripts “funcionan” en el sentido de que migran los mensajes y de cierta manera migran a los usuarios, pero omitir la mayoría de las direcciones de correo electrónico y asignar la mayoría de los mensajes al usuario incorrecto es un problema.

Lo que me frustra es que parece que esto debería ser una solución trivial para alguien que realmente sabe algo sobre Ruby, pero lamentablemente no soy esa persona (lo estoy intentando, pero nunca hay suficiente tiempo para todo). Mi grupo es lo suficientemente pequeño como para que probablemente pueda arreglarlo manualmente si es necesario, pero preferiría no tener que hacerlo, y lo más importante, estoy tratando de desarrollar un método general que otros propietarios de grupos de Yahoo puedan usar.

Edición: Supongo que debería estar agradecido de estar logrando tanto en un idioma del que realmente no sé nada, pero todavía siento que hay algo importante (que debería ser obvio) que estoy pasando por alto. He probado usar un método diferente con la gem Mail. La parte de import_users que he editado se lee de la siguiente manera:

    create_users(profiles.to_a) do |u|

      user_id = user_id + 1

      # fetch last message for profile to pickup latest user info as this may have changed
      user_info = @collection.find("ygData.profile": u["_id"]["profile"]).sort("ygData.msgId": -1).limit(1).to_a[0]

      # Store user_id to profile lookup
      @user_profile_map.store(user_info["ygData"]["profile"], user_id)

      puts "User created: #{user_info["ygData"]["profile"]}"
      
      user_email = Mail::Address.new(HTMLEntities.new.decode(user_info["ygData"]["from"]))

      user =
       {
        id: user_id,  # yahoo "userId" sequence appears to have changed mid forum life so generate this
        username: user_info["ygData"]["profile"],
        name: user_info["ygData"]["authorName"],
        email: user_email.address, # mandatory
        created_at: Time.now
      }
      user
    end

¡Y funciona! Bueno, en su mayor parte. De 302 usuarios distintos contados por el script, se importan 289. Aparecen en la página de administración con los nombres de usuario correctos, nombres completos (cuando se proporcionan) y direcciones de correo electrónico. El script dice que importa los 302 y no reporta errores. Pero cuando comienza a importar los temas, obtengo esto:

Importing discussions
Topic: 1 / 12232  (0.01%)  Subject: Newspapers
Topic: 2 / 12232  (0.02%)  Subject: Ents
Traceback (most recent call last):
	8: from script/import_scripts/yahoogroup.rb:168:in `<main>'
	7: from /home/dan/discourse/script/import_scripts/base.rb:47:in `perform'
	6: from script/import_scripts/yahoogroup.rb:40:in `execute'
	5: from script/import_scripts/yahoogroup.rb:101:in `import_discussions'
	4: from script/import_scripts/yahoogroup.rb:101:in `each_with_index'
	3: from script/import_scripts/yahoogroup.rb:101:in `each'
	2: from script/import_scripts/yahoogroup.rb:132:in `block in import_discussions'
	1: from /home/dan/discourse/script/import_scripts/base.rb:535:in `create_post'
/home/dan/.rbenv/versions/2.6.2/lib/ruby/gems/2.6.0/gems/activerecord-6.0.0/lib/active_record/core.rb:177:in `find': Couldn't find User with 'id'=298 (ActiveRecord::RecordNotFound)

…lo cual no es sorprendente, ya que el ID de usuario más alto es 290.

¿Tendría Discourse algún registro que indique qué usuarios no se han creado y por qué? ¿Dónde estarían esos registros?

He puesto énfasis en mi error. Resulta que Yahoo sí permite descargarlos, pero es un proceso algo complicado y en ningún lugar te indican que obtendrás archivos mbox. Yahoo tiene una herramienta “Obtener mis datos”. Ve allí, inicia sesión, envía una solicitud y espera hasta que te notifiquen (en mi caso, tardó aproximadamente una semana). Te enviarán un correo electrónico con una URL; al acceder a ella, podrás descargar un archivo .zip que parece contener la mayoría del contenido de todos los grupos de los que eres miembro (parece que faltan las fotos). Sorprendentemente, los archivos .mbox incluyen direcciones de correo electrónico completas, incluso para grupos de los que no eres moderador.

Así que, @gerhard, parece que fui prematuro al descartar tu sugerencia; mis disculpas.

Edición: Sí, el proceso de los archivos .mbox parece funcionar mucho mejor. Algunos mensajes se están omitiendo (por ejemplo, unos 100 por la falta aparente de fecha), pero casi todos los 38 000 mensajes se importaron, todos los usuarios también (y una verificación aleatoria indica que están todos asociados a las publicaciones correctas), todos con las direcciones de correo electrónico correctas. No es perfecto para mantener los temas juntos (el otro script tampoco lo era), pero está funcionando bastante bien. Además, como ventaja, es un método más sencillo de documentar que lo que había estado intentando hacer. El único inconveniente que veo hasta ahora es la demora de Yahoo para hacer que tu contenido esté disponible para su descarga.

¡Guau! Eso es bastante sorprendente. Supongo que piensan que, si has estado en la lista, ya tienes las direcciones de correo.

Esto es una buena noticia: acabo de descargarlo y parece que tengo un archivo bastante completo de mensajes de mi grupo de Yahoo que me gustaría conservar, en el formato práctico y portátil mbox. ¡Genial!