Migration depuis Yahoo! Groups

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.

Discourse aurait-il des journaux indiquant quels utilisateurs n’ont pas été créés et pourquoi ? Où se trouvent-ils ?

J’ai mis en gras mon erreur. Il s’avère que Yahoo permet bien de les télécharger, mais c’est un processus quelque peu complexe, et nulle part il n’est indiqué que vous obtiendrez des fichiers mbox. Yahoo dispose d’un outil « Obtenir mes données ». Rendez-vous sur cette page, connectez-vous, soumettez une demande, puis attendez qu’ils vous notifient (environ une semaine dans mon cas). Ils vous enverront un e-mail contenant une URL vers laquelle vous pourrez télécharger un fichier .zip qui semble contenir la plupart du contenu de chaque groupe dont vous êtes membre (les photos semblent manquantes). De manière quelque peu surprenante, les fichiers .mbox contiennent les adresses e-mail complètes, même pour les groupes dont vous n’êtes pas modérateur.

Donc, @gerhard, il semble que j’ai été trop pressé en rejetant votre suggestion – mes excuses.

Éditation : Oui, le processus .mbox semble fonctionner beaucoup mieux. Certains messages sont ignorés (~100, par exemple en raison de l’absence de date), mais presque tous les 38 000 messages ont été transférés, ainsi que tous les utilisateurs (et un contrôle aléatoire indique qu’ils sont tous associés aux bons messages), tous avec les bonnes adresses e-mail. Ce n’est pas parfait pour maintenir les sujets ensemble (l’autre script non plus), mais cela fonctionne plutôt bien. Et, en prime, cela constitue une méthode plus simple à documenter que ce que j’essayais de faire auparavant. Le seul inconvénient que je vois pour l’instant est le délai imposé par Yahoo pour rendre vos données disponibles au téléchargement.

Wow ! C’est plutôt fou. Je suppose qu’ils considèrent que si vous avez déjà été sur la liste, vous avez déjà les adresses e-mail.

C’est une bonne nouvelle : je viens de télécharger les données et il semble que j’aie une archive assez complète des messages de mon groupe Yahoo que je souhaite conserver, dans un format mbox pratique et portable. Super !