私は mbox ファイルを持っていませんし、それらを取得する方法も知りません。Yahoo はもちろん、ダウンロードを許可してくれません。JSON から mbox への変換ツールをご存知でしょうか?Google で検索すると、逆方向(mbox から JSON)の変換ツールは数多く見つかりますが、この方向をカバーするものはすぐには見当たりません。
当初は、Yahoo グループの移行に特化した既存のスクリプトが存在する以上、それらが実際に機能し、これが最も直接的な解決策になるだろうと考えていました。しかし、私の期待は楽観的すぎたようです。スクリプトは「動作」し、メッセージは移行され、ユーザーも「ある程度」移行されますが、メールアドレスの大部分が欠落しており、メッセージの大部分が間違ったユーザーに割り当てられているのは大きな問題です。
私がイライラしているのは、Ruby についてそれなりに知識がある人にとっては、これは些細な修正で済むはずなのに、残念ながら私はそのような人物ではないからです(挑戦はしていますが、すべてに十分な時間が割けません)。私のグループは小規模なので、必要であれば手動で修正できるかもしれません。しかし、できれば手動でやりたくないですし、何より重要なのは、他の Yahoo グループの所有者も使える一般的な方法を模索している点です。
編集:私が全く知らない言語でこれだけ処理できていることに感謝すべきなのでしょうが、それでもまだ何か重大な(当然であるべき)見落としがあるように感じています。Mail gem を使った別の方法を試してみました。私が編集した import_users の部分は以下の通りです。
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
そして、動作します!まあ、ほとんどです。スクリプトがカウントした 302 人の異なるユーザーのうち、289 人がインポートされました。これらは管理ページに正しいユーザー名、フルネーム(提供されている場合)、およびメールアドレスで表示されます。スクリプトは全 302 件をインポートしたと報告し、エラーも報告していません。しかし、トピックのインポートを開始すると、以下のエラーが発生します。
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)
…これは、最高ユーザー ID が 290 であることを考えると、驚くべきことではありません。