التفاعل مع discourse من Python؟

وصلتُ إلى هذه المحادثة متأخرًا قليلاً (حسنًا، إلى امتدادها :p)، لكنني أيضًا أردتُ سحب بيانات من منتدى Discourse دون عناء إعداد مفتاح API. إذا كنتَ أنتَ (أو أي شخص آخر) ترغب في واجهة بسيطة لسحب المنشورات من أي منتدى Discourse، يمكنك الاطلاع عليها هنا: GitHub - elninotech/discourse-reader: A simple Python wrapper for reading data from Discourse forums · GitHub

تم إصدارها على PyPi، لذا يسهل تثبيتها باستخدام pip/uv، وتتعامل مع حدود المعدل (rate limiting) تلقائيًا، وهي مُعرَّفة الأنماط باستخدام Pydantic (مما يُحسّن تجربة المطور DX برأيي). الاستخدام:

from discourse_reader import DiscourseClient

client = DiscourseClient("https://meta.discourse.org")

# تصفح التصنيفات
for cat in client.categories():
    print(f"{cat.name}: {cat.topic_count} مواضيع")

# الحصول على موضوع مع جميع منشوراته
topic = client.topics.get(12345)
print(topic.title)
print(topic.opening_post.cooked)       # المنشور الأصلي (HTML)
print(topic.accepted_answer)           # الإجابة المقبولة أو None
for reply in topic.posts.replies():
    print(reply.username, reply.cooked)

بالتأكيد لن تقدّم هذه الأداة بيانات أفضل أو أسرع من إضافة مستكشف البيانات، لكنني أعتقد أنها لطيفة إذا كنتَ ترغب فقط في سحب دفعة من المواضيع أو إحصائيات بسيطة للموقع بسرعة :slight_smile: