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.