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

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

سيتم تفعيل هذه الميزة افتراضيًا على جميع المواقع المضافة عبر نظام التغييرات القادمة. يمكن للمشرفين الذين يرغبون في عدم التفعيل القيام بذلك عن طريق تعطيل إعداد الموقع 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">.

20 إعجابًا

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

بما أنني أستخدم حاليًا إضافة 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؟

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

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

إعجابَين (2)

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

إعجابَين (2)