يدعم Discourse الآن نقاط نهاية Markdown أصلية، مما يسهّل على أدوات الذكاء الاصطناعي والعملاء الآخرين قراءة محتوى المنتديات دون الحاجة إلى تحليل صفحات HTML الكاملة.
سيتم تفعيل هذه الميزة بشكل افتراضي على جميع المواقع المستضافة عبر نظام “التغييرات القادمة”. يمكن للمسؤولين الذين يرغبون في الاستثناء من ذلك القيام بذلك عن طريق تعطيل التغيير القادم enable_markdown_endpoints عند /admin/config/upcoming-changes?changeNamesFilter=enable_markdown_endpoints:
يتم توليد مخرجات Markdown من HTML المُصيَّر (المُطبوخ) للمشاركات، مع الحفاظ على المحتوى الذي يراه القراء، بما في ذلك الروابط الموسّعة والتنسيق المعالج. يتم تحويل العناصر الخاصة بـ Discourse مثل الاقتباسات و oneboxes وكتل الكود والاستطلاقات والأقسام قابلة للطي مرة أخرى إلى Markdown. تتضمن ردود الموضوع بيانات وصفية وروابط ترقيم الصفحات، وتُخزّن أجسام المشاركات المحوّلة مؤقتًا باستخدام ملخص محتوى (content digest) بحيث تنتج التعديلات مخرجات جديدة.
يمكن للعملاء طلب Markdown صراحةً من خلال عناوين URL التي تنتهي بـ .md أو بإرسال ترويسة Accept: text/markdown. يحترم التفاوض قيم الجودة ويختار Markdown عندما يُفضَّل على HTML و JSON؛ بينما تحتفظ الطلبات الصريحة بـ .md بتنسيقاتها. تُعلن الصفحات المدعومة بـ HTML عن مكافئتها بصيغة Markdown من خلال ترويسة HTTP Link وعنصر <link rel="alternate">.
سؤال: لمن يستخدم وكيل 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.
لا أعرف على وجه اليقين، لكن الخيار الأسهل هو الاختبار على موقع نشط ومقارنة المخرجات مع ما يُنتجه الميتا. ستكون هناك اختلافات في المحتوى المُدرج. إذا كانت الاستجابة التي تتلقاها متطابقة سواء مع تفعيل ميزة Cloudflare أو بدونها، فإنها تحترم تنسيق Markdown الذي يعرضه نواة Discourse.
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 بهذه الميزة الأساسية، لم يرتفع بشكل حاد. سأواصل المراقبة خلال الأسابيع القادمة.
هل ينوي فريق Discourse الأساسي منح كتل discourse-post-event تمثيلًا مخصصًا بصيغة Markdown، تمامًا كما هو الحال مع الاستطلاعات والاقتباسات وoneboxes والأقسام القابلة للطي؟ تقنيًا، يبدو إضافة مثل هذا التمثيل إلى CookedProcessor أمرًا ممكنًا إلى حد كبير: اكتشاف div.discourse-post-event، وقراءة سمات data-* الخاصة به، واستبداله بكتلة Markdown محفوظة قبل المرور العام عبر ReverseMarkdown.
لقد أوقفتها، لكنها تقول إنني لن أستطيع الاختيار قريباً. لا أريد أن أسهّل الأمور على الزواحف، لأن هذا العرض يتجاوز بعض الأساليب التي أستخدمها للكشف عن البوتات.
ملاحظة صغيرة ربما تكون مفيدة: بعد شهر من تفعيل الميزة هنا، بلغ عدد مفاتيح markdown-endpoint:cooked:* حوالي مليون مفتاح، أي 87% من مساحة مفاتيح Redis (حوالي 570 ميغابايت). جاءت الغالبية العظمى منها من البوتات التي تجلب صفحات .md، حيث يتم تخزين كل مشاركة مؤقتًا لمدة أسبوع. يبدو هذا ببساطة عبئًا كبيرًا على Redis لميزة واحدة.
وهذا يدفعني إلى التساؤل عن الجانب الآخر. هل لاحظ أحدًا عودة زوار حقيقيين بفضل هذه الميزة؟ لو حدث ذلك، لكان قرار إعادة تفعيلها سهلًا.