ليس لدي ملفات mbox، ولا أعرف أي طريقة للحصول عليها—فـ Yahoo بالتأكيد لن تسمح لي بتحميلها. هل تعرف أداة ما يمكنها تحويل JSON إلى mbox؟ تُظهر نتائج بحث Google عددًا من الأدوات للقيام بالعكس، لكنني لا أرى أي شيء يغطي هذا الاتجاه بسرعة.
كنت أتوقع أنه نظرًا وجود نصوص برمجية (scripts) مصممة خصيصًا لنقل مجموعات Yahoo، فإن هذه النصوص ستعمل بالفعل، وأن هذا سيكون الطريقة الأكثر مباشرة لإنجاز هذه المهمة. يبدو أن توقعي كان متفائلًا بعض الشيء—فالنصوص البرمجية “تعمل” من حيث أنها تنقل الرسائل، وتنقل المستخدمين إلى حد ما، لكن غياب معظم عناوين البريد الإلكتروني وتعيين معظم الرسائل للمستخدم الخاطئ يُشكّل مشكلة كبيرة.
ما يثير إحباطي هو أنه يبدو وكأنه إصلاح تافه لشخص يعرف شيئًا أو اثنين عن Ruby—لكن للأسف لستُ من هؤلاء (أحاول، لكن لا يوجد وقت كافٍ لكل شيء). مجموعتي صغيرة بما يكفي لأتمكن من إصلاحها يدويًا إذا لزم الأمر، لكنني أفضل عدم الاضطرار إلى ذلك، والأهم من ذلك، أنني أحاول ابتكار طريقة عامة يمكن لمالكي مجموعات Yahoo الآخرين استخدامها.
تعديل: أعتقد أنني يجب أن أشعر بالرضا لأنني أدير كل ما أديره بلغة لا أعرف شيئًا عنها حقًا، لكنني ما زلت أشعر بأن هناك شيئًا كبيرًا (يجب أن يكون واضحًا) أفتقده. جربت استخدام طريقة مختلفة مع مكتبة Mail. الجزء الذي عدلته من دالة 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)
…وهو ليس مفاجئًا، لأن أعلى معرف مستخدم هو 290.