مرحبًا بالجميع!
أتساءل عما إذا كان هناك طريقة عبر واجهة برمجة تطبيقات Discourse للحصول على معرف المنشور من رابط منشور قياسي مثل https://myweb.site/t/<topic_id>/<post_number>، حيث يمثل TN معرف/رقم الموضوع وPN رقم المنشور بالطبع.
لقد جربت عدة محاولات باستخدام بيانات تدفق المنشورات من https://myweb.site/t/<topic_id>.json، معتقدًا أن المنشور رقم N سيكون معرف المنشور N في بيانات post_stream->stream المسترجعة من الاستدعاء. لكن إذا تم حذف منشورات أو إجراء عمليات تقسيم في تدفق منشورات الموضوع، فإن رقم المنشور لا يتطابق مع الموضع N في stream.
كنت في حاجة ماسة إلى نفس الميزة قبل عامين. وما زلت لم أكتشف كيفية القيام بذلك (بشكل) أفضل. هذا هو الحل المؤقت الخاص بي:
def get_topic_post(topic_id, post_num)
topic = @api.topic(topic_id, {print: true})
post_obj = topic['post_stream']['posts'].find { |p| p['post_number'] == post_num }
if post_obj
post_obj['id']
else
throw "Could not find post #{topic_id}/#{post_num}."
end
end
يتجاوز هذا الحل المشاكل المذكورة: فـ {print: true} يعالج مشكلة التصفح الصفحي. أما find فهو ضروري لأن التعديل قد يسبب عدم تطابق بين مؤشرات المصفوفة وأرقام المنشورات.
يعمل هذا الحل مع المواضيع بالحجم الذي أعمل عليه. ومع ذلك، فإن وجود طريقة أكثر مباشرة عبر واجهة برمجة التطبيقات (API) سيكون أكثر إرضاءً.