يشمل نواة Discourse الآن نقاط نهاية Markdown لقوائم المواضيع والعروض

يدعم Discourse الآن نقاط نهاية Markdown أصلية، مما يسهّل على أدوات الذكاء الاصطناعي والعملاء الآخرين قراءة محتوى المنتديات دون الحاجة إلى تحليل صفحات HTML الكاملة.

سيتم تفعيل هذه الميزة بشكل افتراضي على جميع المواقع المستضافة عبر نظام “التغييرات القادمة”. يمكن للمسؤولين الذين يرغبون في الاستثناء من ذلك القيام بذلك عن طريق تعطيل التغيير القادم enable_markdown_endpoints عند /admin/config/upcoming-changes?changeNamesFilter=enable_markdown_endpoints:

شكرًا جزيلًا لـ @benword لإنشاءه إضافة Discourse to Markdown الأصلية، فقد كانت السبّاقة لهذه الميزة في نواة Discourse.


يتم توليد مخرجات Markdown من HTML المُصيَّر (المُطبوخ) للمشاركات، مع الحفاظ على المحتوى الذي يراه القراء، بما في ذلك الروابط الموسّعة والتنسيق المعالج. يتم تحويل العناصر الخاصة بـ Discourse مثل الاقتباسات و oneboxes وكتل الكود والاستطلاقات والأقسام قابلة للطي مرة أخرى إلى Markdown. تتضمن ردود الموضوع بيانات وصفية وروابط ترقيم الصفحات، وتُخزّن أجسام المشاركات المحوّلة مؤقتًا باستخدام ملخص محتوى (content digest) بحيث تنتج التعديلات مخرجات جديدة.

يمكن للعملاء طلب Markdown صراحةً من خلال عناوين URL التي تنتهي بـ .md أو بإرسال ترويسة Accept: text/markdown. يحترم التفاوض قيم الجودة ويختار Markdown عندما يُفضَّل على HTML و JSON؛ بينما تحتفظ الطلبات الصريحة بـ .md بتنسيقاتها. تُعلن الصفحات المدعومة بـ HTML عن مكافئتها بصيغة Markdown من خلال ترويسة HTTP Link وعنصر <link rel="alternate">.

24 إعجابًا

هل تريد أن أوضح لك قوائم المواضيع المدعومة وغير المدعومة؟

بما أنني أستخدم حاليًا إضافة Discourse-to-Markdown الأصلية، فهل أحتاج إلى تعطيلها وإزالتها لتجنب تعارض المخرجات؟ أرجو التوجيه.

يعمل بشكل جيد دون إضافة البرنامج المضاف مع تفعيل الميزة القادمة.

إعجاب واحد (1)

سؤال: لمن يستخدم وكيل Cloudflare، يبدو أن هناك تعارضًا بين وظيفة النواة وأداتهم للتحول. السؤال هو: إذا كنت خلف الوكيل، وبما أن الوظيفة مخصصة للمشتركين، هل سيمنعون تحويل الترويسة من HTML إلى .md، أم أن التحول يتم بغض النظر عن ذلك نظرًا لدعم العميل للتحول؟

نعم. إذا بقيت الإضافة مفعّلة، فإنها تحل محل بعض نقاط النهاية الأساسية (core endpoints)، لذا نوصي بتعطيلها أو إلغاء تثبيتها لاستخدام الوظيفة المتوفرة الآن في النواة.

حاليًا، القوائم التالية:

مدعوم أمثلة
القوائم الرئيسية /latest.md, /hot.md, /top.md
قوائم مخصصة، تتطلب مصادقة /new.md, /unread.md
قوائم التصنيف/التصنيف الفرعي الافتراضية /c/support/6.md, /c/parent/child/12.md
قوائم وسم واحد /tag/example.md, /tag/example/123.md

تُعد /categories.md و /tags.md مدعومة أيضًا كمجلدات. تعريفات المسارات

لست على دراية كبيرة بميزة Cloudflare، ولكن من ما يمكنني استنتاجه، فإنها تلتقط طلب Accept text/markdown قبل وصوله إلى الخادم، ثم تحول الـ HTML وتقدمه. لذا، يبدو أن هذه الميزة ستتجاوز وظيفة Discourse، عند استخدام Cloudflare.

3 إعجابات

سيتم تجاوزها إذا كانت مفعّلة، أليس كذلك؟ لم أجد في مدونتهم أي معلومات حول ما إذا كانوا يمنعون المصدر نفسه من إرسال هذا الترويسة.

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

إعجاب واحد (1)

شكرًا لك على التوضيح، وإليك الإجابة بخصوص ذلك:

  • X-Discourse-Route: topics/show: يعرض المتحكم/الإجراء الداخلي (controller/action) في Discourse (Ruby on Rails) الذي يعالج الموضوع.
  • X-Runtime: 0.133969: الوقت الذي استغرقته التطبيق لتوليد الاستجابة (حوالي 133 مللي ثانية).
  • Cf-Ray: ...-GRU: طلب تمت معالجته بواسطة حافة Cloudflare (edge) في غوارولوس/ساو باولو (GRU).
  • Cf-Cache-Status: DYNAMIC و Cache-Control: no-cache, no-store: محتوى ديناميكي لا يُخزَّن في ذاكرة التخزين المؤقت (cache) عند الحافة.
  • عند فحص عنوان URL العادي (HTML) بدون .json، يستجيب الخادم بما يلي:
    • Link: <https://segredin.com/t/conselhos-duvidosos/22054.md>; rel="alternate"; type="text/markdown"
    • X-Discourse-Crawler-View: true (مما يشير إلى أن Discourse يوفر أيضًا نسخة نظيفة بصيغة .md / Markdown الأصلية للمحزات (crawlers) والقُرّاء).

ترويسة Link التي تشير إلى النسخة البديلة: Link: <https://segredin.com/t/conselhos-duvidosos/22054.md>; rel="alternate"; type="text/markdown"

يعيد Vary: Accept من المصدر بغض النظر عن الدوال الخارجية على مستوى DNS.

إذا اختار الطلب تنفيذ طلب (request) بدون .json، فسيُعاد .md كتحويل افتراضي.

HTTP/1.1 200 OK
Content-Type: text/markdown
Vary: Accept

لقد ترددت لأنني استلمت 123 ألف طلب من Claude، ومعظمها، منذ أن حدّثت Discourse بهذه الميزة الأساسية، لم يرتفع بشكل حاد. سأواصل المراقبة خلال الأسابيع القادمة.

شكرًا لك، كنتُ محبطًا لأنني جرّبتُ الأمر أولًا على قائمة مواضيع مُرشَّحة حسب فئة ووسم، ولم يعمل. أميل إلى اختيار أمثلة سيئة للاختبار.

لماذا تضمّنتَ /new و/unread لكنك لم تُضمّن /unseen؟

إعجابَين (2)

هل ينوي فريق Discourse الأساسي منح كتل discourse-post-event تمثيلًا مخصصًا بصيغة Markdown، تمامًا كما هو الحال مع الاستطلاعات والاقتباسات وoneboxes والأقسام القابلة للطي؟ تقنيًا، يبدو إضافة مثل هذا التمثيل إلى CookedProcessor أمرًا ممكنًا إلى حد كبير: اكتشاف div.discourse-post-event، وقراءة سمات data-* الخاصة به، واستبداله بكتلة Markdown محفوظة قبل المرور العام عبر ReverseMarkdown.

إعجابَين (2)

شكرًا لك على هذا الاقتراح، وقد تم تنفيذه في هذا طلب الإرسال (PR) الذي سيتم دمجُه قريبًا.

إعجابَين (2)

أريد إيقافه، لكنني لا أرى هذا الإعداد في لوحة التحكم. أنا أقوم بتصفية النتائج حسب كلمة “markdown”.

في الواقع، هذه تغيير قادم. عليك الانتقال إلى /admin/config/upcoming-changes?changeNamesFilter=enable_markdown_endpoints

أحدّث المنشور الأصلي لي反映 هذا التغيير.

إعجابَين (2)

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

إعجاب واحد (1)

نعم، نقطة جيدة، سنقوم بتصحيح ذلك. الخطة هي أن تبقى هذه الميزة قابلة للتعطيل.

إعجاب واحد (1)

يبدو جيدًا. شكرًا!

إليك طلب الإرسال (PR) هذا: UX: Hide permanent warning for markdown endpoints - Pull Request #45037 - discourse/discourse - GitHub

إعجابَين (2)

ملاحظة صغيرة ربما تكون مفيدة: بعد شهر من تفعيل الميزة هنا، بلغ عدد مفاتيح markdown-endpoint:cooked:* حوالي مليون مفتاح، أي 87% من مساحة مفاتيح Redis (حوالي 570 ميغابايت). جاءت الغالبية العظمى منها من البوتات التي تجلب صفحات .md، حيث يتم تخزين كل مشاركة مؤقتًا لمدة أسبوع. يبدو هذا ببساطة عبئًا كبيرًا على Redis لميزة واحدة.

وهذا يدفعني إلى التساؤل عن الجانب الآخر. هل لاحظ أحدًا عودة زوار حقيقيين بفضل هذه الميزة؟ لو حدث ذلك، لكان قرار إعادة تفعيلها سهلًا. :slight_smile:

إعجابَين (2)

أقدّر الملاحظات، سأطلع على التنفيذ وأيضًا على استخدام redis هنا في ميتا وفي عدد من النماذج الأخرى.

إعجابَين (2)