Je n’ai pas de fichiers mbox et je ne connais aucun moyen de les obtenir—Yahoo ne me permettra certainement pas de les télécharger. Connaissez-vous un outil capable de convertir JSON en mbox ? Google affiche plusieurs outils pour faire l’inverse, mais je ne vois rien qui couvre ce cas rapidement.
Je m’attendais à ce que, puisqu’il existe déjà des scripts conçus spécifiquement pour migrer les groupes Yahoo, ces scripts fonctionnent réellement et constituent la méthode la plus directe pour accomplir cette tâche. Il semble que mon attente était trop optimiste : les scripts « fonctionnent » dans le sens où ils migrent les messages et migrent en quelque sorte les utilisateurs, mais le fait de manquer la plupart des adresses e-mail et d’attribuer la plupart des messages au mauvais utilisateur pose un problème.
Ce qui me frustre, c’est que cela semble être une correction triviale pour quelqu’un qui connaît vraiment un peu Ruby—mais malheureusement, je ne suis pas cette personne (j’essaie, mais il n’y a jamais assez de temps pour tout). Mon groupe est assez petit pour que je puisse probablement le corriger manuellement si nécessaire, mais je préfère ne pas avoir à le faire, et surtout, j’essaie de mettre au point une méthode générale que d’autres propriétaires de groupes Yahoo pourront utiliser.
Édition : Je suppose que je devrais être reconnaissant de réussir autant dans un langage que je ne connais vraiment pas du tout, mais j’ai toujours l’impression qu’il manque quelque chose d’important (qui devrait être évident). J’ai essayé une autre méthode avec la gemme Mail. La partie de import_users que j’ai modifiée se lit comme suit :
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
Et ça marche ! Enfin, en grande partie. Sur 302 utilisateurs distincts comptés par le script, il en importe 289. Ils apparaissent sur la page d’administration avec les noms d’utilisateur corrects, les noms complets (lorsqu’ils sont fournis) et les adresses e-mail. Le script indique qu’il a importé les 302 utilisateurs et ne signale aucune erreur. Mais lorsqu’il commence à importer les sujets, j’obtiens ceci :
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)
…ce qui n’est pas surprenant, puisque l’identifiant utilisateur le plus élevé est 290.