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.