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

مرحبًا بالجميع! نحب منصة Discourse، فهي العمود الفقري لمجتمعنا.

نحن مشروع مفتوح المصدر ولدينا حضور قوي على GitHub. لدينا روبوت مكتوب بلغة بايثون يدير مستودعاتنا على GitHub ويقوم بمهام مثل دمج طلبات السحب (pull requests) تلقائيًا إذا تم اعتمادها. وبما أن لدينا العديد من المستودعات ولا يتابع الجميع كل مستودع، فسيكون رائعًا لو كان بإمكان الروبوت النشر في المنتديات عند إنشاء مشروع جديد أو عندما تحتاج طلبات السحب إلى مراجعة.

هل يمكن لأحد أن يوجهني نحو أفضل طريقة لاستدعاء واجهة برمجة تطبيقات Discourse من بايثون؟

3 إعجابات

There is a python discourse api library that is a few years old:

And a forked version that has been updated somewhat recently:

Hopefully the latter one will work for you.

Also this plugin may be of interest to you:

https://meta.discourse.org/t/the-github-linkback-plugin/66081

7 إعجابات

Thanks @blake! That is exactly the kind of thing I needed to get started.

I will report back with my successes.

إعجابَين (2)

I recently started a project for this, and am actively updating it. Currently working towards the next dot release:

https://github.com/samamorgan/discourse

10 إعجابات

هل نجح الأمر معك؟ أنا أيضًا أحاول ذلك. أستمر في الحصول على رسالة “DiscourseClientError: Payload Too Large”.

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

أرى هذا الخطأ فجأة أيضًا خلال عطلة نهاية الأسبوع عند محاولة جلب موضوع. لم يتغير كود جلب هذا الموضوع منذ أكثر من عام، لذا يجب أن يكون هناك تغيير ما في واجهة برمجة التطبيقات. أنا أقوم بالتحقيق.

إعجابَين (2)

خطأ ‘Payload Too Large’ ناتج عن هذا التغيير.

لا أعرف شيئًا عن المشروع المذكور أعلاه، لكن هذا هو الوضع الحالي لمشروع bennylope. ربما يكون نفس الإصلاح مطلوبًا في أطر العمل الأخرى أيضًا.

المشكلة رقم 38 في GitHub - pydiscourse/pydiscourse: A Python library for the Discourse API · GitHub تحل المشكلة، لكن النسخة المُصلحة لم تُرفع بعد إلى PyPI - pydiscourse.exceptions.DiscourseClientError: Payload Too Large · Issue #38 · pydiscourse/pydiscourse · GitHub. نحن بانتظار أن يقوم المستخدم @bennylope على GitHub بذلك. لذا يمكنك الانتظار حتى يتم تحديث PyPI، أو استخدام أمر git pull master.

5 إعجابات

شكرًا لك! هذا نجح. قمت بإلغاء تثبيت pydiscourse، واستخدمت نسخة محلية بناءً على ما اقترحته. والآن، يعمل كل شيء!
أحاول استخدام محلل المشاعر في Python لإجراء تحليل مشاعر للمنشورات الأحدث. سأبقيكم على اطلاع بكيفية سير الأمور.

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

هل يستخدم هذا أي شخص آخر؟ هل يمكنك الحصول على أكثر من 20 منشورًا لكل موضوع باستخدام هذا؟

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

ربما تحتاج إلى استخدام الترقيم. لم أجرب ذلك تحديدًا للمشاركات، لكن شيء مثل:

pagesize = 20
for page in range(100):
    client.posts(topic_id, limit=pagesize, offset=page*pagesize)
3 إعجابات

نعم، أعلم أن هذا منشور قديم ولكن نظرًا لأنه يلبي ما أبحث عنه بشكل أساسي، فلا داعي لإنشاء منشور جديد عندما يعمل هذا المنشور ولكنه يحتاج فقط إلى تحديث.\n\nبينما أعرف كيفية البرمجة بلغات برمجة عديدة، يؤسفني القول إن Ruby ليست واحدة منها. كنت أتساءل عما إذا كانت هناك إجابات أحدث أو أفضل لهذا السؤال.\n\n> التفاعل مع Discourse من Python؟\n\n—\n\nكسؤال جانبي، هل يمكن إنشاء إضافات و/أو سمات Discourse باستخدام Python؟

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

السمات، بالتأكيد لا، فهذه فقط JavaScript و CSS و HTML.

الإضافات: نوعًا ما.

يمكنك استيراد وحدات Python إلى إضافة Discourse المستندة إلى Ruby (on Rails) واستدعاء دوال Python باستخدام Pycall: GitHub - red-data-tools/pycall.rb: Calling Python functions from the Ruby language

أستخدمه في بيئة الإنتاج لغرض محدد جدًا حيث لا توجد وحدة مكافئة تتم صيانتها في نظام Ruby on Rails البيئي، لذا فإنه يجنبني الاضطرار إلى ترجمة ثم صيانة كل هذا الكود المتخصص بلغة Ruby.

إنه يعمل بشكل جيد بشكل مدهش.

ومع ذلك، فإن أساس تلك الإضافة لا يزال مكتوبًا بلغة Ruby.

أوصي ببساطة بتعلم Ruby on Rails أيضًا - إنها لغة ممتعة جدًا وفي رأيي الكود أجمل للقراءة من Python :slight_smile:

يجب أن أخصص أيضًا وقتًا لتعلم المزيد من Python إذا/عندما تدعو الحاجة.

ملاحظة جانبية مثيرة للاهتمام: بعض الكود في Discourse Chatbot 🤖 الذي ينشئ سلوك الوكيل كان يعتمد على وكيل Python يسمى “Funkagent” والذي قمت بترجمته أولاً إلى Ruby on Rails (ثم قمت بتعديله وتحسينه.). لذا يمكن أن تكون الترجمة خيارًا بالطبع إذا كان ذلك منطقيًا. في تلك الحالة، كان الأمر منطقيًا.

3 إعجابات

شكرًا.

هذه إجابة معقولة وخيار محتمل سأبقيه مطروحًا.

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

لقد كتبت العديد من نصوص الاستيراد قبل أن “أتعلم” لغة روبي حقًا. اعتمادًا على ما تريد القيام به، قد تتمكن من فعل المزيد بمجموعة مهاراتك الحالية مما تعتقد. من المحتمل أن يكون استخدام لغة روبي أسهل من معرفة كيفية استخدام شيء آخر.

إذا كنت تتفاعل مع واجهة برمجة التطبيقات (API)، فيمكنك استخدام أي لغة تريدها.

5 إعجابات

روبي مصمم بشكل جميل وسهل التعلم، في رأيي.

يتطلب Ruby on Rails المزيد من التعلم وكإطار عمل يعتمد على الاتفاقيات يمكن أن يكون صعبًا في بعض الأحيان ولكنه قوي جدًا بمجرد أن تتعود عليه.

إعجابَين (2)

تم تقسيم 3 مشاركات إلى موضوع جديد: ما مدى صعوبة تمكين غير المبرمجين من استخدام روبوت الذكاء الاصطناعي Discourse AI - AI لإنشاء المكونات الإضافية و/أو السمات

يمكنك إلقاء نظرة على GitHub - discourse/all-the-plugins كوسيلة للاطلاع على ما هو ممكن.

اختر شيئًا تريد القيام به يبدو بسيطًا. إذا كنت تريد شيئًا مثل “cakeday” الذي يغير تعريف الذكرى السنوية، فيمكن أن يكون “cakeday” مكانًا جيدًا للبدء. ستقوم بتحديد شيء صغير تريد تغييره والقيام بالأشياء خطوة صغيرة واحدة في كل مرة.

إعجابَين (2)

هاها أنا أتعلم روبي بنفسي هذه الأيام، يا له من متعة حقيقية. :exploding_head:

3 إعجابات

مرحباً بالجميع، أنا مهتم أيضاً بالحصول على بيانات من ديسكورس (Discourse) (بشكل أساسي إحصائيات حول المشاهدات وعدد المستخدمين) باستخدام بايثون (Python). يبدو أن العديد من الحزم المذكورة هنا لم تعد نشطة. هل هناك طريقة قياسية جديدة للقيام بذلك في عام 2026؟

شكراً!

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

لست مضطرًا دائمًا إلى استخدام واجهة شخص آخر.

ليس من الصعب جدًا القيام بذلك عبر مكتبة requests المضمنة، وإذا استخدمت شيئًا ما (على سبيل المثال، Postman، الذي قمت بإعداده بالفعل)، يمكنك استيراد مواصفات واجهة برمجة التطبيقات (API specification) الخاصة بنا إليه ثم اطلب منه إنشاء الكود:

ثم قم بتكييفه ليناسب احتياجاتك:

import json
import pandas
import requests

url = "https://try.discourse.org/categories.json?include_subcategories=false"

payload = {}
headers = {
  'Accept': 'application/json'
}

response = requests.request("GET", url, headers=headers, data=payload)
response_data = json.loads(response.text)
data = pandas.DataFrame(response_data['category_list']['categories']).set_index('id')

الآن لدي معلومات الفئة:

            name   color text_color  ... uploaded_background_dark                                             topics can_vote
id                                   ...                                                                                     
5        general  25AAE2     FFFFFF  ...                     None  [{'fancy_title': 'Testing dulu ya jangan di hi...      NaN
4         videos  258af1     FFFFFF  ...                     None  [{'fancy_title': 'Ikan ganteng yang\u0026rsquo;\u0026rdq...      NaN
86      calendar  12A89D     FFFFFF  ...                     None  [{'fancy_title': 'Category Calendar demo topic...      NaN
2           tech     444     FFFFFF  ...                     None  [{'fancy_title': 'Poll: What\u0026rsquo;s your pref...      NaN
1      discourse  00B355     FFFFFF  ...                     None  [{'fancy_title': 'Welcome to our demo!', 'id':...      NaN
53  Topic Voting  F7941D     FFFFFF  ...                     None  [{'fancy_title': 'Is this topic worth voting f...     True
6         gaming  800080     FFFFFF  ...                     None  [{'fancy_title': 'Impressions Games City Build...      NaN
8         movies  B22222     FFFFFF  ...                     None  [{'fancy_title': 'What\u0026rsquo;s your all-time f...      NaN
9         sports  0000FF     FFFFFF  ...                     None  [{'fancy_title': 'Modernizing the antiquated b...      NaN

[9 rows x 45 columns]

إذا كنت تريد الوصول إلى معلومات محمية، فستحتاج إلى استخدام مفتاح API.

6 إعجابات