الانتقال من Yahoo! Groups

تتأثر العديد من مجموعات Yahoo بقرار Yahoo بالتخلص من المحتوى المرفوع، وهي تبحث عن موفرين بديلين. الخيار الواضح هو groups.io، الذي يوفر تكافؤًا في الميزات وسيقوم بنقل جميع محتوى المجموعة تلقائيًا، لكنه (1) يكلف 220 دولارًا للسنة الأولى لإجراء عملية النقل (بعدها يكون مجانيًا إذا كانت متطلبات التخزين أقل من 1 جيجابايت)، و(2) لا يزال يستخدم نفس الصيغة المركزة على البريد الإلكتروني الخاصة بمجموعات Yahoo. لقد رأيت ذكرًا في موضوع آخر (Yahoo Groups to Discourse migration?) أن هناك سكريبت نقل، لكن مما أستطيع رؤيته (اعترافًا بأنني لم أرى الكثير حتى الآن)، فإنه ينقل الرسائل فقط.

نظرًا لأن التغيير في Yahoo الذي سيدفع المجموعات إلى الانتقال هو فقدان تخزين الملفات والصور، فإن هذا يترك سؤالين:

  • هل توجد طريقة آلية لنقل المحتوى المرفوع من مجموعة Yahoo إلى مثيل Discourse؟
  • ما هي الخيارات المتاحة في Discourse لجعل هذا المحتوى متاحًا/مرئيًا للمستخدمين الآخرين؟ الخيار الوحيد الذي أراه هو أن يتم وضع محتوى المستخدم المرفوع في موضوع أو أكثر من قبل هذا المستخدم، ربما في فئات متميزة. بالنسبة للصور، سيكون ذلك واضحًا بما فيه الكفاية؛ أما بالنسبة للمستندات الأخرى المرفوعة إلى المجموعة (غالبًا ملفات PDF، وبعض ملفات .doc و.xls)، فيبدو أن ذلك يتطلب بعض التغييرات في الإعدادات ولكن ليس شيئًا خطيرًا جدًا. ولكن هل هناك خيار آخر؟

مثير للاهتمام.. لم أكن أعرف أن ياهو مجموعات تتخلص من المحتوى المرفوع. لدي مجموعة ياهو قديمة ما زلت أديرها لجارتي، وقد كانت فكرة نقلها إلى مثيل Discourse تدور في ذهني.. ربما حان الوقت.

أعتقد أن أسهل طريقة للهجرة هي تصدير قائمة المشتركين إلى ملف CSV ثم استخدامه لإنشاء قاعدة المستخدمين في Discourse - وهذا يجب أن يكون مباشرًا إلى حد ما.

أما بالنسبة للمحتوى، هل تملك سجلًا كاملاً للرسائل المرسلة إلى القائمة في بريدك الإلكتروني؟ إذا كان الأمر كذلك، يمكنك استخدام تطبيق مثل Thunderbird لتحميل جميع الرسائل وحفظها بصيغة MBOX. بمجرد حصولك على ذلك، توجد نصوص برمجية للاستيراد. أعتقد أن هذه الوصفة ستساعدك: Migrate a mailing list to Discourse (mbox, Listserv, Google Groups, etc)

لست متأكدًا مما تصفه بالمحتوى المرفوع - لم أستخدم ياهو مجموعات بهذه الطريقة بنفسي. لا أعرف ما هي خياراتك لاستخراج تلك الملفات من ياهو وإعدادها لـ Discourse. قد تكون العملية يدوية… وربما تكون فرصة جيدة لتنظيم الأمور والتخلص من الأشياء التي لم تعد ضرورية.

لكن نعم، Discourse موجه نحو النقاش، لذا فإن كل المحتوى موجود في مواضيع. من الممكن تعيين المواضيع كويكي ليتمكن مجموعة من صيانتها، بما في ذلك إضافة/إزالة المرفقات. هناك أيضًا رسائل شخصية يمكن استخدامها للتحدث مع نفسك أو مع مجموعة مختارة من الأشخاص الآخرين، حيث يمكن للناس حفظ بعض المحتوى. قد يكون من الأسهل عليك النظر في أداة أخرى تدعم SSO لمشاركة الملفات. في مجتمعنا نستخدم WordPress الذي يحتوي على ملحق يتعامل مع SSO، ويعمل بسلاسة كبيرة. إذا كنت تتحدث عن عدد كبير من الملفات، يمكنك إعداد مثيل Nextcloud.

استمتع!

تحديث: واو… يبدو بالتأكيد أن الوقت قد حان للانتقال. إنهم يتخذون إجراءات جذرية حقًا للحد من فائدة ياهو مجموعات، وقريبًا جدًا. لن يكون هناك محتوى جديد اعتبارًا من 28 أكتوبر، أي بعد يومين! وسيتم إزالة المحتوى في 14 ديسمبر.

لا أملك ذلك، رغم أنني لست مسؤولاً عن أي من القوائم التي أتعامل معها. لكن يبدو أن هجرة الرسائل تُعالج عبر discourse/script/import_scripts/yahoogroup.rb at main · discourse/discourse · GitHub و GitHub - jonbartlett/yahoo-groups-export: Export Yahoo Groups forum to file or database · GitHub. كما أن مسؤول المجموعة قادر على تصدير رسائل المجموعة مع عناوين البريد الإلكتروني المرفقة (وهو ما لا يستطيع المستخدم العادي فعله). وعلى الرغم من أن العملية لا تبدو بسيطة بضغطة زر واحدة، إلا أن الرسائل تبدو أقل القلق في هذه المرحلة.

توفر مجموعات ياهو (أو كانت توفر) مساحة تخزين للصور (100 جيجابايت) وملفات أخرى (2 جيجابايت) للمجموعة. المجموعات التي أشارك فيها تستخدم هذه المساحة لصور أعضاء المجموعة والعناصر ذات الصلة بالمجموعة، بالإضافة إلى ملفات متنوعة أخرى. أي شيء يُرسل بشكل خاص بين الأعضاء في مجموعة ياهو يكون على الأرجح قد تم إرساله عبر البريد الإلكتروني، ولن تحتفظ ياهو بأي سجل لذلك؛ ولا أعتقد أن هجرة ذلك ممكنة حتى، ناهيك عن كونها أولوية. لكن هناك كمية كبيرة من المعلومات المخزنة هناك في العديد من المجموعات، والتي يرغبون في الحفاظ عليها أثناء الهجرة.

قد يكون كذلك. مرة أخرى، هناك موقع واحد (موقع واحد فقط، حسب علمي) يبدو أنه بديل جاهز للاستخدام، لكنه يحافظ على تنسيق مجموعات ياهو القديم مع تغييرات طفيفة فقط. أفكر أنه إذا كان على مجموعة ما الهجرة على أي حال، فقد يكون من الجميل الانتقال إلى شيء أكثر حداثة، ولا يزال Discourse يتفاعل بسلاسة مع البريد الإلكتروني (وهو ما لا تفعله العديد من حزم المنتديات الأخرى)، مما يعني أن الأشخاص التقليديين مثلي المعتادين على استلام الرسائل عبر البريد الإلكتروني والرد عليها عبر البريد الإلكتروني، لا يزال بإمكانهم فعل ذلك. كما أن توفير بعض الدولارات سيكون أمراً لطيفاً أيضاً.

إذن، المزيد من التطورات. يبدو أن هذه الأداة:

تعمل بشكل ممتاز في تنزيل محتوى مجموعة ما دفعة واحدة—فهي تحصل على جميع الرسائل والملفات والمرفقات وما إلى ذلك. يتم تنزيل الرسائل في ملفين JSON لكل رسالة، أحدهما “خام” والآخر بصيغة HTML. يبدو الأول كالتالي:

{
    "userId": 185744666,
    "authorName": "vhsproducts@aol.com",
    "from": "vhsproducts@...",
    "profile": "vhsproducts",
    "replyTo": "LIST",
    "senderId": "fc-T6L4xNaFRDleu_7gutRzgA_WWujKXanij68LOf7iz0WXh-BolDsmiqlo19adwRPTjwe0FpCYycg",
    "spamInfo": {
        "isSpam": false,
        "reason": "0"
    },
    "subject": "Re: [MicroTrak] Mint-Trak300 completed",
    "postDate": "1181013131",
    "msgId": 4,
    "canDelete": false,
    "contentTrasformed": false,
    "systemMessage": false,
    "headers": {
        "messageIdInHeader": "PGM3ZC5lNWZlOTFjLjMzOTYyZThiQGFvbC5jb20+"
    },
    "prevInTopic": 3,
    "nextInTopic": 6,
    "prevInTime": 3,
    "nextInTime": 5,
    "topicId": 3,
    "numMessagesInTopic": 4,
    "msgSnippet": "Outstanding work! I see you have the first gen of the Micro-Trak ( although we still sell them for people with TT3 SMT s) How long will a 9 volt run your GPS? ",
    "rawEmail": "Return-Path: <VHSProducts@...>\r\nX-Sender: VHSProducts@...\r\nX-Apparently-To: MicroTrak@yahoogroups.com\r\nReceived: (qmail 18487 invoked from network); 5 Jun 2007 03:13:19 -0000\r\nReceived: from unknown (66.218.67.36)\n  by m50.grp.scd.yahoo.com with QMQP; 5 Jun 2007 03:13:19 -0000\r\nReceived: from unknown (HELO imo-m23.mx.aol.com) (64.12.137.4)\n  by mta10.grp.scd.yahoo.com with SMTP; 5 Jun 2007 03:13:19 -0000\r\nReceived: from VHSProducts@...\n\tby imo-m23.mx.aol.com (mail_out_v38_r9.2.) id r.c7d.e5fe91c (29679)\n\t for <MicroTrak@yahoogroups.com>; Mon, 4 Jun 2007 23:12:11 -0400 (EDT)\r\nMessage-ID: <c7d.e5fe91c.33962e8b@...>\r\nDate: Mon, 4 Jun 2007 23:12:11 EDT\r\nTo: MicroTrak@yahoogroups.com\r\nMIME-Version: 1.0\r\nContent-Type: multipart/alternative; boundary="-----------------------------1181013131"\r\nX-Mailer: 9.0 Security Edition for Windows sub 5365\r\n(snip)"
}

…بينما يبدو الثاني كالتالي:

{
    "userId": 185744666,
    "authorName": "vhsproducts@aol.com",
    "from": "vhsproducts@...",
    "profile": "vhsproducts",
    "replyTo": "LIST",
    "senderId": "oChpSVZSELyeHvFRyDX_nG5dfpdVZTLBKFMDvOg33fSsrDk5l-zpPohl42rhz6OhM9tFfSjAxxGsRg",
    "spamInfo": {
        "isSpam": false,
        "reason": "0"
    },
    "subject": "Re: [MicroTrak] Mint-Trak300 completed",
    "postDate": "1181013131",
    "msgId": 4,
    "canDelete": false,
    "contentTrasformed": false,
    "systemMessage": false,
    "headers": {
        "messageIdInHeader": "PGM3ZC5lNWZlOTFjLjMzOTYyZThiQGFvbC5jb20+"
    },
    "prevInTopic": 3,
    "nextInTopic": 6,
    "prevInTime": 3,
    "nextInTime": 5,
    "topicId": 3,
    "numMessagesInTopic": 4,
    "msgSnippet": "Outstanding work! I see you have the first gen of the Micro-Trak ( although we still sell them for people with TT3 SMT s) How long will a 9 volt run your GPS? ",
    "messageBody": "<div id=\"ygrps-yiv-810547383\">\n<html><head>\n \n</head> \n\n<font id=\"ygrps-yiv-810547383role_document\"\n face=\"Arial\" color=\"#000000\" size=\"2\">\n<div>Outstanding work! I see you have the first gen of the Micro-Trak ( although \nwe still sell them for people with TT3 SMT&#39;s) How long will a 9 volt run your \nGPS?</div>\n(snip)",
    "specialLinks": []
}

اعتمادًا على المجموعة، قد يكون هناك عشرات أو حتى مئات الآلاف من هذه الملفات. ياهو، كما هو معتاد، تخفي عناوين البريد الإلكتروني عن المستخدمين “العاديين”—فأصحاب المجموعات يمكنهم رؤيتها، وربما المشرفون أيضًا، لكن البقية لا يستطيعون. الآن، يجب أن نرى ما إذا كان هناك طريقة مباشرة نسبيًا لاستيراد هذه الملفات دفعة واحدة إلى مثيل Discourse، أو ما إذا كان من الأفضل استخدام الأدوات التي ذكرتها أعلاه.

يتم أيضًا تنزيل الملفات والصور بواسطة هذه الأداة، بالإضافة إلى الاستطلاعات والتقويمات وأشياء أخرى لا أهتم بها حقًا لكن لا شك أن الآخرين سيهتمون بها.

نقطة أخرى—القراءة الدقيقة لرسالة ياهو تشير إلى أنهم لا يتخلصون فقط من الملفات والصور، بل هم أيضًا يلغون أرشيف الرسائل. هذا سيجعلها حقًا غير مجدية لأي غرض كان.

يرجى الترحيل إلى Discourse.

نحن بحاجة إلى مواقع مستقلة أكثر وأقل اعتمادًا على منصات الاحتكار الكبرى.

فقط لأقول إنني قمت بترحيل مجتمعي المحلي من مجموعة Yahoo إلى Discourse منذ سنوات، ولم نندم على ذلك أبدًا. اللمسات الشخصية التي يمكنك إضافتها إلى مورد التواصل المشترك تستحق بذاتها، لكن الميزات الإضافية هي التاج على القمة.

للأسف، لا يمكنني تقديم خبرة مفيدة من عملية الترحيل لأننا ببساطة بدأنا من الصفر، باستثناء قائمة البريد الإلكتروني. لماذا لا تترك موقع مجموعة Yahoo القديم نشطًا وتوفر رابطًا؟ كم عدد المرفقات التي تحتاج حقًا إلى الاحتفاظ بها؟ استهدف الأهم منها.

أتمنى لك التوفيق، ستسير الأمور على ما يرام!

هذا ليس قرارًا بيدي مباشرةً، لكنني أميل إلى ذلك. وبالنسبة للمجموعة التي أشعر بالقلق الأكبر تجاهها، لا أتوقع أن تكون الملفات والصور مشكلة كبيرة؛ فقد قمت بتحميلها جميعًا الآن، وعدد منها قليل لدرجة أن نقلها يدويًا إلى مواضيع لن يكون أمرًا صعبًا.

نعم، لأننا نشهد حاليًا أحد مخاطر ذلك.

لأن جميع البيانات ستختفي منه خلال ستة أسابيع.

يمكنني كتابة برنامج استيراد لقراءة ملفات JSON هذه، لكن لا يمكنني منافسة مبلغ 200 دولار. عادةً ما أتقاضى ضعف هذا المبلغ بعشرة أضعاف لكتابة برنامج استيراد واستيراد منتدى متوسط الحجم (بضعة مئات الآلاف من المنشورات).

إذن يبدو أن استخدام ما يلي سيكون أفضل لي:

يتبعه:

…بمجرد أن أفهم كيفية عملهما.

(تعديلات كبيرة أدناه—المحاولة الثانية)

أعمل على عملية استيراد الرسائل، باستخدام الإرشادات الموجودة في Migrate from another forum to Discourse. كما أفهمها، يجب أن تبدو العملية على النحو التالي:

  • إعداد بيئة التطوير باستخدام Install Discourse on Ubuntu or Debian for Development
  • تثبيت MongoDB على ذلك النظام
  • على ذلك النظام، وبصفتك المستخدم غير المميز نفسه الذي يشغّل Discourse، قم بتشغيل git clone على سكربت تصدير مجموعات ياهو
  • بنفس المستخدم، قم بتشغيل gem install mechanize ثم gem install mongo. بعد ذلك، عدّل ملف .config.yaml لتزويده ببيانات اعتماد ياهو واسم المجموعة، ثم شغّل ruby bin/yg-export.rb.
  • اشرب كوبًا (أو اثنين) من مشروبك المفضل.
  • بمجرد انتهاء yg-export، في مجلد Discourse، اطلع على script/import_scripts/yahoogroup.rb. عدّله ليشير إلى MONGODB_HOST الصحيح (localhost).
  • في مجلد discourse، شغّل bundle exec ruby script/import_scripts/yahoogroup.rb
  • تحقّق من أن الاستيراد تم بشكل صحيح
  • قم بنسخ احتياطي واستعادة إلى خادم مباشر

الخطوات من 2 إلى 4 مستنتجة. لكن هل تبدو هذه هي الخطوات الصحيحة التي يجب اتباعها؟ معتقدًا أنها كذلك، واصلتُ العمل. سارت الأمور بسلاسة حتى الخطوة 4—فقد شغّل yg-export.rb لمدة ساعة تقريبًا، وأبلغ عن نجاح كل شيء، وحفظ حوالي 38 ألف رسالة. قاعدة البيانات syncro موجودة وتحتوي على حوالي 85 ميجابايت من البيانات. عند هذه النقطة، أخذتُ لقطة للنظام الافتراضي (VM).

لكنني أواجه مشكلة مع سكربت الاستيراد. فعندما أشغّل bundle exec ruby script/import_scripts/yahoogroup.rb، أحصل على ما يلي:

dan@ubuntu:~/discourse$ bundle exec ruby script/import_scripts/yahoogroup.rb
Traceback (most recent call last):
script/import_scripts/yahoogroup.rb: Bootsnap::LoadPathCache::FallbackScan
        7: from script/import_scripts/yahoogroup.rb:4:in `<main>'
        6: from /home/dan/.rbenv/versions/2.6.2/lib/ruby/gems/2.6.0/gems/zeitwerk-2.1.10/lib/zeitwerk/kernel.rb:23:in `require'
        5: from /home/dan/.rbenv/versions/2.6.2/lib/ruby/gems/2.6.0/gems/bootsnap-1.4.4/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:26:in `require'
        4: from /home/dan/.rbenv/versions/2.6.2/lib/ruby/gems/2.6.0/gems/bootsnap-1.4.4/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:40:in `rescue in require'
        3: from /home/dan/.rbenv/versions/2.6.2/lib/ruby/gems/2.6.0/gems/bootsnap-1.4.4/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:21:in `require_with_bootsnap_lfi'
        2: from /home/dan/.rbenv/versions/2.6.2/lib/ruby/gems/2.6.0/gems/bootsnap-1.4.4/lib/bootsnap/load_path_cache/loaded_features_index.rb:89:in `register'
        1: from /home/dan/.rbenv/versions/2.6.2/lib/ruby/gems/2.6.0/gems/bootsnap-1.4.4/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `block in require_with_bootsnap_lfi'
/home/dan/.rbenv/versions/2.6.2/lib/ruby/gems/2.6.0/gems/bootsnap-1.4.4/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:22:in `require': cannot load such file -- mongo (LoadError)

غريب، ظننتُ أنني قد قمت بالفعل بتثبيت حزمة mongo. حسنًا، سأقوم بتثبيتها مرة أخرى:

dan@ubuntu:~/discourse$ gem install mongo
Successfully installed mongo-2.10.2
Parsing documentation for mongo-2.10.2
Done installing documentation for mongo after 4 seconds
1 gem installed

شغّل سكربت الاستيراد مرة أخرى، ونفس النتيجة. هل يهم إذا قمت بتثبيته على مستوى النظام؟

dan@ubuntu:~/discourse$ sudo apt install ruby-mongo
[sudo] password for dan: 
Reading package lists... Done
Building dependency tree       
Reading state information... Done
ruby-mongo is already the newest version (2.5.1-1).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

أكثر غرابةً وأكثر غرابةً…

يجب عليك إضافة المكتبات إلى ملف Gemfile وتشغيل أمر bundle install، وإلا فإن تنفيذ الأمر bundle exec ruby script/import_scripts/yahoogroup.rb لن يتمكن من العثور على المكتبات.

كان هذا هو الجزء الذي كنت أفتقده، والآن يعمل الاستيراد بسلاسة. شكرًا لك!

تعديل: حسنًا، استغرق عملية الاستيراد 75 دقيقة، والآن أصبحت المنشورات موجودة. رائع. كما تم إنشاء المستخدمين، وهو ما كنت أتساءل عنه. ومع ذلك، ألاحظ بعض المشاكل المتعلقة بالمستخدمين:

  • يبدو أن جميع أسماء مستخدمي Yahoo تم استيرادها بشكل صحيح (أعرف العديد منها من انتمائي للقائمة)، لكنها ارتبطت بالرسائل الخاطئة. حدث هذا بشكل متسق — فكل الرسائل التي نشرتها أنا تظهر الآن وكأنها نُشرت بواسطة مستخدم آخر واحد — ومع ذلك، فإن هذا خطأ كبير سيكون مؤلمًا جدًا لإصلاحه يدويًا.
  • جميع المستخدمين المستوردين معلقون لمدة 200 سنة قادمة.

أعتقد أن كلا المشكلتين تنبعان من عدم وجود عناوين بريد إلكتروني صالحة في البيانات التي تم تنزيلها من Yahoo، والسبب في ذلك أنني لست مدير المجموعة — وقد تم ذكر ذلك صراحةً كسبب للمشكلة الثانية، لكنني لا أعرف ما إذا كان ذلك سيؤدي أيضًا إلى المشكلة الأولى. ما رأيكم؟

إذا كانت هذه هي المشكلة، فهذا يعطيني شيئًا أتتبعه، لكنه أيضًا يمثل مشكلة محتملة — فأنا أعلم أن هناك مديريين اثنين على قيد الحياة للمجموعة، لكن المالك توفي خلال العام الماضي. آمل أن يكون شخص ما لديه الوصول إلى هذه المعلومات…

مرحبًا،

هناك إضافة جديدة لهذا الغرض.

لقد قمت بتصدير واستيراد جميع رسائل Yahoo! من إصدار تجريبي كفئة باستخدام هذا السكربت:
https://meta.discourse.org/t/topic-and-category-export-import/38930/38

كانت هناك مشكلة تتعلق بوجود مستخدمين مكررين أو غير صحيحين.
باستخدام هذه الإضافة: Merge Users Plugin
يمكنك دمج مستخدمي Yahoo بسهولة مع مستخدمي Discourse.

والآن، تبقى لدينا فقط مشكلة المرفقات من Yahoo.

هذا لا يقوم تمامًا بما أحتاجه—فالمستخدمون الوحيدون الموجودون في هذه النسخة، بخلاف مستخدم المشرف، هم المستخدمون المستوردون من Yahoo. المشكلة هي أن اسم المستخدم الخاطئ مرتبط بالمنشورات الخاطئة—فمنشوراتي مرتبطة (بشكل متسق، حسب ما أستطيع الحكم عليه) باسم مستخدم لشخص آخر، ومنشورات شخص آخر مرتبطة باسمي.

لقد مُنحت الآن صلاحيات المشرف في هذه المجموعة، وهو ما يكفي لتحميل الرسائل مع عناوين البريد الإلكتروني الفعلية المرفقة بها. سأقوم بإعادة البناء (الآلات الافتراضية ممتازة في ذلك)، وإعادة استيراد البيانات، وسأرى ما إذا كان ذلك سيحل المشكلة.

مرحبًا، حسنًا، هذا ليس ما اكتشفته أنا. في مجتمعي، لم تكن أي من المنشورات المستوردة مرتبطة بأي عضو من أعضاء المجتمع الحالي.
إذا قمت باستيراد الفئة كما هو موضح في الموضوع المرتبط، فإن النتيجة كانت وجود مستخدمين مكررين (أو مستخدم جديد) في قائمة المستخدمين فقط.

أداة الاستيراد عيّنت المنشورات للمستخدم الخاطئ، لكنها فعلت ذلك بالطريقة الصحيحة. أعني، إذا كانت المنشورات التي كتبتها بنفسي في Yahoo! مُعيّنة لـ “هانس”، فإن جميع منشوراتي كانت مُعيّنة لـ “هانس”.

لدي معرف مستخدم 1 في منتدى مجتمعي، لكن هذا ليس نفس الاسم في منتدى Discourse للتطوير الذي أنشأته. لذا، لم يتم تجاوز حسابي، بل كان هناك حساب آخر بنفس الاسم. لكن هذا الحساب مرتبط بالمنشورات الخاطئة.

الآن أستخدم الإضافة المرتبطة لدمج جميع المستخدمين بشكل منفصل مع الشخص الصحيح في منتداي. لا يستغرق الأمر الكثير من الوقت، لكن من الصعب تحديد أي منشور ينتمي إلى أي مستخدم.

ربما نكون في مواقف مختلفة—في حالتي، لا يوجد “مجتمع موجود”. بل إن كل شيء يتم استيراده من مجموعة Y.

حسناً، لقد قمت بتحميل رسائل المجموعة بما في ذلك عناوين البريد الإلكتروني الكاملة. وبعد بعض المشاكل في بيئة التطوير، تمكنت من مواصلة العمل على عملية الاستيراد. ولا يزال هناك بعض المشاكل التي ألاحظها:

  • لا تزال مشكلة ارتباط أسماء المستخدمين الخاطئة بالمنشورات الخاطئة قائمة.
  • وربما كسبب (أو أحد الأسباب) لما سبق، فإن معظم المستخدمين الذين يتم استيرادهم يُعتبرون أن عناوين بريدهم الإلكتروني غير صالحة. في قاعدة بيانات Mongo المُنشأة بواسطة سكريبت yahoo-export، يظهر حقل From (الذي يحاول سكريبت الاستيراد قراءة عناوين البريد الإلكتروني منه) لمعظم المستخدمين بالشكل التالي:
First Last &lt;user@domain.com&gt;

…وهو ما يرفضه Discourse باعتباره عنوان بريد إلكتروني غير صالح. ونتيجة لذلك، يتم تعيين عنوان بريد إلكتروني مثل 5dc3e1b4f4d821bd7de3ce456eaf26d5@email.invalid لمعظم المستخدمين—والاستثناءات تبدو أنها تنطبق على المستخدمين الذين أرسلوا رسائل دون إرفاق أسمائهم الكاملة.

  • تحتوي الرسائل المستوردة على عدد من كيانات HTML، خاصةً لعلامات الاقتباس ورموز أكبر من وأقل من.

  • تحتوي العديد من الرسائل المستوردة، وليس جميعها بالتأكيد، على اسم المجموعة في سطر الموضوع: Re: [SpareOom] بعض الموضوع. سيكون من الجيد إزالة هذه الأسماء.
    بالنسبة للنقاط الثلاث الأخيرة، أتساءل عما إذا كان بحث/استبدال بسيط عبر قاعدة البيانات سيحل المشكلة—وإذا كان الأمر كذلك، فكيف يمكن القيام بذلك مع الأخذ في الاعتبار أنني لم أتعامل مع MongoDB من قبل.

  • مسألة منفصلة هي استيراد الرسائل إلى فئة محددة. تشير التعليقات في أعلى ملف yahoogroup.rb إلى أنه يمكنك استخدام export CATEGORY_ID=<CATEGORY_ID> قبل تشغيل السكريبت للقيام بذلك، لكنها لا توضح ما يشير إليه <CATEGORY_ID>. لقد جربت الاسم العادي للفئة، وكذلك “اسم الفئة المختصر” (كلاهما متطابقان باستثناء الأحرف الكبيرة والصغيرة)، لكن في كلتا الحالتين يفشل سكريبت الاستيراد بالخطأ التالي:

         1: from /home/dan/discourse/lib/topic_creator.rb:36:in `create'
/home/dan/discourse/lib/topic_creator.rb:115:in `setup_topic_params': category (Discourse::InvalidParameters)

يبدو ذلك مشابهاً جداً لأول استيراد لملفات mbox قمت به. استغرق الأمر مني بضعة أشهر.

نعم، يمكنك على الأرجح إصلاح بعض الأمور عبر بعض عمليات الاستبدال.

إذا أضفت .json في نهاية رابط التصنيف، يمكنك العثور على معرف التصنيف. وهو عدد صحيح.

ستحتاج إلى التحقق مما يستخدمه منشئ المستخدم كمعرف، وما الذي تستخدمه دالة المنشور للعثور على المستخدمين. أو ربما لا يتطابقان ببساطة.

عند النظر في ملف yahoogroup.rb، يتضح أنه يتوقع حقل From في الرسالة أن يكون عنوان بريد إلكتروني مجرد. ونظرًا لأن معظم المستخدمين يهيئون عملاء البريد الإلكتروني لديهم لإرسال الاسم أيضًا (على سبيل المثال،

فريد فلينستون <fred@flintstone.com>

)، فإن هذه هي المشكلة رقم 1. وتشير بعض عمليات البحث على جوجل إلى أنه يمكن معالجة ذلك باستخدام مكتبة Mail، مما سيؤدي إلى تغيير السطر في سكريبت الاستيراد ليصبح:

        email: Mail::ToField.new(user_info["ygData"]["from"]), # mandatory

…مما يستخرج عنوان البريد الإلكتروني فقط. ولكن كما ذُكر أعلاه، يتم تخزين الأقواس الزاوية ككيانات HTML بدلاً من ذلك، مما يكسر هذه الطريقة. وتُخبرنا عمليات بحث إضافية على جوجل بوجود مكتبة HTMLEntities ستتعامل مع ذلك، مما دفعني إلى تجربة ما يلي:

        email: Mail::ToField.new(HTMLEntities.new.decode(user_info["ygData"]["from"])), # mandatory

ولكن هذا يفشل بسبب عدم وجود طريقة downcase.

تعديل: حاولت تجنب ذلك باتخاذ مسار مختلف؛ فقد رأيت العديد من الاقتراحات المتعلقة بـ Nokogiri. ولكن بغض النظر عن فائدته، فإن الاقتراحات التي وجدتها لم تقم بفك تشفير كيان الأقواس الزاوية، وهو ما كان (وما زال) احتياجي الفوري الأكثر إلحاحًا. لذا عدت إلى مكتبة HTMLEntities. أضفت require 'mail' و require 'htmlentities' إلى أعلى سكريبت استيراد ياهو، وغيرت السطر 75 (كان السطر 73 قبل إضافة متطلبات الـ require) ليقرأ كما هو موضح أعلاه. ما زلت أحصل على خطأ، ولكن ما فاتني سابقًا هو أنه يقوم فعليًا بتحليل واستيراد مستخدم واحد قبل أن يتعطل:

dan@ubuntu:~/discourse$ bundle exec ruby script/import_scripts/yahoogroup.rb
Loading existing groups...
Loading existing users...
Loading existing categories...
Loading existing posts...
Loading existing topics...
(snip)
connected to db....

Importing from Mongodb....

Importing users
User created: user@host.tld
Traceback (most recent call last):
        8: from script/import_scripts/yahoogroup.rb:163:in `<main>'
        7: from /home/dan/discourse/script/import_scripts/base.rb:47:in `perform'
        6: from script/import_scripts/yahoogroup.rb:39:in `execute'
        5: from script/import_scripts/yahoogroup.rb:58:in `import_users'
        4: from /home/dan/discourse/script/import_scripts/base.rb:247:in `create_users'
        3: from /home/dan/discourse/script/import_scripts/base.rb:247:in `each'
        2: from /home/dan/discourse/script/import_scripts/base.rb:259:in `block in create_users'
        1: from /home/dan/discourse/script/import_scripts/base.rb:290:in `create_user'
/home/dan/discourse/script/import_scripts/base.rb:385:in `find_existing_user': undefined method `downcase' for #<Mail::ToField:0x00005575597e63b8> (NoMethodError)

(تم إخفاء عنوان البريد الإلكتروني في هذا المخرجات، لكنه موجود في قاعدة البيانات المصدر مع الاسم الكامل وكيانات الأقواس الزاوية - لذا يبدو أن تغييراتي على السكريبت حققت بالضبط التأثير المطلوب). هذا يجعلني مشوشًا قليلاً، حيث كنت أفهم أن downcase يجب أن تكون متاحة بشكل افتراضي.

تعديل 2: حسنًا، يقوم بتحليل المستخدم، لكنه لا يستورد المستخدم فعليًا إلى مثيل Discourse.

لا يزال الأمر المتعلق بالبريد الإلكتروني يحيرني، لكنني قررت تركه جانبًا مؤقتًا ورؤية ما إذا كان بإمكاني تطبيق HTMLEntitles على عنوان الموضوع ونص الرسالة. في سكريبت yahoogroup.rb، غيّرت السطر 110 ليصبح:

        topic_title = HTMLEntities.new.decode(topic_post["ygData"]["subject"])

…والسطر 116 ليصبح:

        raw: HTMLEntities.new.decode(topic_post["ygData"]["messageBody"]),

(كلا رقمي السطرين أكبر بـ 2 مقارنة بالنسخة الأصلية من السكريبت، بسبب إضافة سطري requires اللذين ذكرتهما أعلاه). لقد نجح الأمر تمامًا. لم يتغير مخرجات الطرفية (كان ذلك سيحدث في السطر 105، الذي لم ألاحظه إلا بعد بدء تشغيل السكريبت)، لكن عناوين المواضيع والنصوص في النسخة المستوردة أصبحت نظيفة ومرتبة.

إذن يبدو أن هذه الطريقة تعمل بشكل مثالي في تنظيف عناوين المواضيع ونصوص الرسائل، لكنها لا تعمل مع عناوين البريد الإلكتروني. هل لديك أي أفكار حول ما يجب البحث عنه في هذا الجانب؟ أنا محير قليلاً في هذا الشأن.

قد يكون من الأسهل استخدام Migrate a mailing list to Discourse (mbox, Listserv, Google Groups, etc) لاستيراد البيانات من مجموعات Yahoo. إما باستخدام ملفات mbox أو ربما عن طريق تحويل ملفات JSON التي ذكرتها إلى ملفات MSG فردية تحتوي على نص البريد الإلكتروني الخام.

يُعالج سكريبت استيراد mbox ملفات mbox وكذلك الرسائل المخزنة في ملفات فردية، وقد يكون قد حل بالفعل جميع المشكلات التي تواجهها حاليًا.