Migrazione da Yahoo! Groups

Non ho file mbox e non sono a conoscenza di alcun modo per ottenerli: Yahoo certamente non mi permette di scaricarli. Sai di qualcosa che possa convertire JSON in mbox? Google mostra diversi strumenti per fare il contrario, ma non vedo nulla che copra questo caso in modo rapido.

Mi aspettavo che, dato che esistono già script progettati specificamente per migrare i gruppi Yahoo, questi funzionassero effettivamente, e che sarebbe stata la via più diretta per completare questo compito. Sembra che la mia aspettativa fosse troppo ottimistica: gli script “funzionano” nel senso che migrano i messaggi e in parte migrano anche gli utenti, ma il fatto che manchino la maggior parte degli indirizzi email e che la maggior parte dei messaggi venga assegnata all’utente sbagliato è un problema non da poco.

Ciò che mi frustra è che sembra che questo dovrebbe essere una correzione banale per qualcuno che ne sa davvero qualcosa su Ruby, ma purtroppo non sono una di quelle persone (ci sto provando, ma non c’è mai abbastanza tempo per tutto). Il mio gruppo è abbastanza piccolo da poter essere corretto manualmente se necessario, ma preferirei non doverlo fare, e soprattutto sto cercando di trovare un metodo generale che altri proprietari di gruppi Yahoo possano utilizzare.

Modifica: Immagino che dovrei essere contento di riuscire a fare tutto questo in un linguaggio che in realtà non conosco affatto, ma ho ancora la sensazione che ci sia qualcosa di fondamentale (che dovrebbe essere ovvio) che mi sto perdendo. Ho provato a utilizzare un metodo diverso con il gem Mail. La parte di import_users che ho modificato è la seguente:

    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

E funziona! Beh, quasi. Dei 302 utenti distinti contati dallo script, ne vengono importati 289. Appaiono nella pagina di amministrazione con i nomi utente corretti, i nomi completi (quando forniti) e gli indirizzi email. Lo script dice di aver importato tutti i 302 e non segnala errori. Ma quando inizia a importare gli argomenti, ottengo questo:

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)

…il che non è sorprendente, dato che l’ID utente più alto è 290.

Discourse dispone di log che indichino quali utenti non sono stati creati e il motivo? Dove si trovano?

Ho messo in grassetto il mio errore. Si è scoperto che Yahoo permette di scaricarli, ma è un processo piuttosto complesso e oraehé dove viene detto che i file mbox sono ciò che si otterrà. Yahoo ha uno strumento “Scarica i miei dati”. Vai lì, accedi, invia una richiesta e attendi che ti avvisino (circa una settimana per me). Ti invieranno un’email con un URL dove potrai scaricare un file .zip che sembra contenere la maggior parte dei contenuti di ogni gruppo di cui fai parte (sembrano mancare le foto). Sorprendentemente, i file .mbox contengono indirizzi email completi anche per i gruppi di cui non sei moderatore.

Quindi, @gerhard, sembra che fossi stato prematuro nel respingere il tuo suggerimento—mi scuso.

Modifica: Sì, il processo dei file .mbox sembra funzionare molto meglio. Alcuni messaggi vengono saltati (~100, ad esempio per l’assenza di una data), ma quasi tutti i 38k messaggi sono stati acquisiti, così come tutti gli utenti (e un controllo a campione indica che sono tutti associati ai post corretti), tutti con gli indirizzi email corretti. Non è perfetto nel mantenere uniti gli argomenti (nemmeno l’altro script lo era), ma sta andando piuttosto bene. Inoltre, come vantaggio, è un metodo più semplice da documentare rispetto a quello che stavo cercando di fare. L’unico svantaggio che vedo finora è il ritardo di Yahoo nel rendere i tuoi dati disponibili per il download.

Wow! È davvero incredibile. Immagino che pensino che, se sei stato nella lista, hai già gli indirizzi email.

Questa è una buona notizia: ho appena scaricato il file e sembra di avere un archivio abbastanza completo dei messaggi del mio gruppo Yahoo che vorrei conservare, in un formato mbox comodo e portatile. Ottimo!