نصيحة كاتب الروبوت: معالجة كل منشور

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

:information_source: هل سيكون روبوتك أفضل إذا تم تشغيله على الخادم؟ فكر في إنشاء إضافة بدلاً من ذلك: Developing Discourse Plugins - Part 1 - Create a basic plugin

المقدمة

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

ستحتاج إلى تخزين دائم لعدد صحيح واحد، وهو أعلى معرف منشور تم معالجته بنجاح. على سبيل المثال، يمكنك كتابة هذا إلى Redis أو إلى ملف نصي عادي. سيُتيح لك استخدام Redis الحفاظ على اشتراكات حافلة الرسائل عبر إعادة تشغيل العمليات من جانبك.

يُوصى بشدة بإنشاء حساب مستخدم جديد تمامًا للروبوت، بحيث يمكن إضافته إلى المجموعات والرسائل الخاصة حسب الضرورة. تجنب استخدام حساب @system.

مجموعة الخوارزميات التالية مكتوبة على غرار أسلوب مواصفات WHATWG، وتُبنى تدريجيًا حتى تصل إلى الخوارزمية الخاصة بـ المراقبة المستمرة للمنشورات الجديدة.

مواصفات الخوارزميات

ليكن عنوان URL الأساسي للمنتدى هو عنوان URL للموقع بدون شرطة مائلة في النهاية - على سبيل المثال، https://meta.discourse.org أو https://www.contoso.com/forum في حالة التثبيت في مجلد فرعي.

جلب المنشورات الحديثة التالية

لـ جلب المنشورات الحديثة التالية معطى عدد صحيح أعلى معرف منشور شوهد، وعلامة تم تشغيلها بواسطة حافلة الرسائل، قم بتشغيل الخطوات التالية:

  • ليكن أقصى معرف منشور في الاستجابة هو ناتج إضافة خمسين (50) إلى أعلى معرف منشور شوهد.
  • ليكن رابط الطلب هو دمج عنوان URL الأساسي للمنتدى، و /posts.json، و ?before=، و أقصى معرف منشور في الاستجابة.
  • ليكن الاستجابة هي ناتج :satellite: جلب JSON مع احترام حدود المعدل باستخدام رابط الطلب و بيانات الاعتماد.
  • إذا كانت الاستجابة خطأً في HTTP، فأنهِ هذه الخطوات بخطأ.
  • ليكن المنشورات هي مصفوفة JSON الموجودة في المسار latest_posts داخل الاستجابة.
  • ليكن علم تم رؤية منشورات جديدة غير معيّن.
  • لكل كائن JSON منشور في المنشورات بترتيب عكسي، قم بتنفيذ الخطوات التالية:
    • ليكن معرف المنشور هو الرقم الموجود في المسار id داخل المنشور.
    • عيّن أعلى معرف منشور شوهد إلى معرف المنشور.
    • عيّن علم تم رؤية منشورات جديدة.
    • :white_check_mark: أصدِر المنشور. (:information_source: وبعبارة أخرى: أرسل المنشور إلى أي معالجة مخصصة ترغب في تنفيذها.)
    • إذا كان الإصدار قد أعاد إشارة ضغط الخلفية، فاكسر هذه الحلقة.
  • :information_source: تُنفذ الحلقة أعلاه بترتيب عكسي حتى يرى الكود الخاص بك أقدم المنشورات أولاً وأحدثها أخيرًا.

  • إذا كان علم تم رؤية منشورات جديدة معيّنًا:
    • قم بتنفيذ خطوات :floppy_disk: حفظ الحالة في التخزين مع أعلى معرف منشور شوهد.
  • أنهِ هذه الخطوات مع إرجاع أعلى معرف منشور شوهد.

استكشاف معرف منشور موجود مرتفع

لـ استكشاف معرف منشور موجود مرتفع، قم بتنفيذ الخطوات التالية:

  • ليكن رابط طلب الاستكشاف الأحدث هو دمج عنوان URL الأساسي للمنتدى و /posts.json.
  • ليكن استجابة استكشاف الأحدث هي ناتج :satellite: جلب JSON مع احترام حدود المعدل باستخدام رابط طلب استكشاف الأحدث و بيانات الاعتماد.
  • إذا كانت استجابة استكشاف الأحدث خطأً في HTTP، فأنهِ هذه الخطوات بخطأ.
  • ليكن منشورات الاستكشاف هي مصفوفة JSON الموجودة في المسار latest posts داخل استجابة استكشاف الأحدث.
  • لكل كائن JSON منشور في منشورات الاستكشاف:
    • ليكن معرف المنشور هو الرقم الموجود في المسار id داخل المنشور.
    • أنهِ هذه الخطوات، مع إرجاع معرف المنشور.
  • أنهِ هذه الخطوات بخطأ.

تعبئة من الأحدث

لـ تعبئة من الأحدث معطى عدد صحيح اختياري أعلى معرف منشور شوهد، قم بتنفيذ الخطوات التالية:

  • ليكن أدنى معرف منشور هو أعلى معرف منشور شوهد إذا كان موجودًا، وصفر (0) خلاف ذلك.
  • ليكن معرف منشور موجود مرتفع هو ناتج استكشاف معرف منشور موجود مرتفع.
  • إذا كان أقصى معرف منشور خطأً، فأنهِ هذه الخطوات بخطأ.
  • قم بتنفيذ خطوات التعبئة معطى أدنى معرف منشور و معرف منشور موجود مرتفع.

التعبئة

لـ التعبئة معطى عددين صحيحين أدنى معرف منشور و معرف منشور موجود مرتفع:

  • ليكن أدنى معرف منشور حالي هو أدنى معرف منشور.
  • كرر الخطوات التالية:
    • قم بتنفيذ خطوات جلب المنشورات الحديثة التالية معطى أدنى معرف منشور حالي وعلامة تم تشغيلها بواسطة حافلة الرسائل غير معيّنة.
    • إذا لم تكتمل خطوات جلب المنشورات الحديثة التالية بنجاح:
      • قم بتحديث خوارزمية التراجع الأسي بإشارة فشل، وانتظر المدة المحددة.
      • انتقل إلى التكرار التالي من الحلقة (دون تحديث أدنى معرف منشور حالي).
    • ليكن أقصى معرف منشور مرشح في الاستجابة هو ناتج إضافة خمسين (50) إلى أدنى معرف منشور حالي.
    • إذا كان أقصى معرف منشور مرشح في الاستجابة أكبر من أو يساوي معرف منشور موجود مرتفع، فـ :white_check_mark: أنهِ هذه الخطوات.
    • عيّن أدنى معرف منشور حالي إلى أقصى معرف منشور مرشح في الاستجابة.

المراقبة المستمرة للمنشورات الجديدة

لـ المراقبة المستمرة للمنشورات الجديدة، قم بتنفيذ الخطوات التالية:

  • ليكن أعلى معرف منشور شوهد عددًا صحيحًا اختياريًا غير معيّن.
  • عيّن أعلى معرف منشور شوهد إلى ناتج :arrow_forward: استعادة الحالة من التخزين.
  • إذا كان أعلى معرف منشور شوهد غير معيّن:
    • عيّن معرف المنشور الأولي إلى ناتج استكشاف معرف منشور موجود مرتفع.
    • قم بتنفيذ خطوات :floppy_disk: حفظ الحالة في التخزين مع معرف المنشور الأولي.
    • عيّن أعلى معرف منشور شوهد إلى معرف المنشور الأولي.
  • عيّن الإشعارات إلى ناتج تنفيذ خطوات :satellite: الاشتراك في حافلة الرسائل، مع قناة /latest.
  • قم بتنفيذ الخطوات التالية بشكل متكرر:
    • عيّن أعلى معرف منشور شوهد جديد إلى ناتج جلب المنشورات الحديثة التالية، مع تعيين علامة تم تشغيلها بواسطة حافلة الرسائل إذا حدث تحديث في حافلة الرسائل، و أعلى معرف منشور شوهد.
    • إذا لم تكتمل خطوات جلب المنشورات الحديثة التالية بنجاح:
      • قم بتحديث خوارزمية التراجع الأسي بإشارة فشل، وانتظر المدة المحددة.
      • انتقل إلى التكرار التالي من الحلقة.
    • إذا كان أعلى معرف منشور شوهد جديد مختلفًا عن أعلى معرف منشور شوهد:
      • قم بتحديث خوارزمية التراجع الأسي بإشارة نجاح.
      • عيّن أعلى معرف منشور شوهد إلى أعلى معرف منشور شوهد جديد.
    • انتظر رسالة على الإشعارات أو حتى يحدث مهلة محددة حسب التنفيذ. يجب ألا تكون هذه المهلة أقصر من 10 دقائق وقد تتراوح بشكل معقول حتى 24 ساعة أو أكثر قليلاً.

الخوارزميات التي تحتاج إلى توفيرها:

  • :satellite: جلب JSON مع احترام حدود المعدل، مع أخذ رابط طلب وبيانات اعتماد اختيارية.
    • يجب أن يتراجع تلقائيًا ويعيد المحاولة باستخدام خوارزمية التراجع الأسي و/أو معلومات Retry-After المقدمة من الخادم عند مواجهة خطأ 429.
  • :arrow_forward: استعادة الحالة من التخزين
  • :floppy_disk: حفظ الحالة في التخزين، مع أخذ عدد صحيح
  • :satellite: الاشتراك في حافلة الرسائل

14 إعجابًا