هذا دليل إرشادي يشرح كيفية جلب جميع المشاركات من موضوع باستخدام واجهة برمجة تطبيقات Discourse.
النتائج التي تعيدها واجهة برمجة تطبيقات Discourse للعديد من المسارات تكون مُصفحة.
على سبيل المثال، نقطة نهاية واجهة برمجة التطبيقات لـ “الحصول على موضوع واحد” - مثال:
https://examplesite/t/{id}.jsonستعيد 20 مشاركة فقط افتراضيًا، حتى لو كان الموضوع يحتوي على أكثر من 20 مشاركة.بسبب هذا السلوك، هناك طريقتان يمكنك استخدامهما لواجهة برمجة تطبيقات Discourse لجلب جميع المشاركات لموضوع باستخدام نقطة النهاية
.../t/{id}.json.إضافة مُعامل استعلام
أسهل طريقة لجلب جميع المشاركات من موضوع هي إضافة مُعامل استعلام
print=trueإلى عنوان URL الذي تقوم بتقديم الطلب إليه.مثال:
https://examplesite/t/{id}.json?print=trueعند إضافة مُعامل الاستعلام
print=true، تقوم Discourse بتعيينchunk_sizeلعدد المشاركات التي يتم إرجاعها إلى 1000. هذا يعني أن هذا نهج جيد للاستخدام طالما أنك متأكد من أن مواضيعك لا تحتوي على أكثر من 1000 مشاركة.طلبات واجهة برمجة تطبيقات متعددة
الطريقة الأخرى لجلب جميع المشاركات هي إجراء طلبات واجهة برمجة تطبيقات متعددة لجلب جميع المشاركات من الموضوع:
أولاً، ستقوم بتقديم طلب
GETأولي إلى نقطة النهاية.../t/{id}.json. سيحتوي هذا على تجزئةposts_streamتحتوي على مصفوفةpostsومصفوفةstream. ستمنحك مصفوفةpostsأول 20 مشاركة.الآن تحتاج إلى المرور عبر مصفوفة
streamالتي تعطيك جميع معرفات المشاركات في الموضوع. قم بإزالة أول 20 معرف مشاركة من التدفق (وإلا فإنك تعيد تنزيلها دون داعٍ).يمكنك بعد ذلك تقديم طلبات إضافية إلى نقطة نهاية “الحصول على مشاركات محددة من موضوع”
.../t/{id}/posts.json، وإضافةpost_ids[]، وتمرير جميع المعرفات من مصفوفةstreamفي أجزاء من 20. مثال:…/t/{id}/posts.json?post_ids=46&post_ids=47&post_ids=48&post_ids=49&post_ids=50&post_ids=51&post_ids=52&post_ids=53&post_ids=54&post_ids=55&post_ids=56&post_ids=57&post_ids=58&post_ids=59&post_ids=60&post_ids=61&post_ids=62&post_ids=63&post_ids=64&post_ids=65
حدود المعدل
إذا واجهت رسالة
Error: you have performed this action many times, please try again laterعند تقديم طلبات واجهة برمجة تطبيقات متعددة، فهذا يشير إلى أنك تواجه حدود معدل مفتاح واجهة برمجة التطبيقات.لدى Discourse حد لعدد طلبات
print=trueالتي يمكن تقديمها في الساعة، والتي يتم التحكم فيها بواسطة إعداد الموقعmax prints per hour per user. يضبط هذا الإعداد افتراضيًا السماح للمستخدمين بطباعة 5 مواضيع فقط في الساعة. يمكنك تعيين هذا الإعداد إلى0لتعطيل حد المعدل.لاحظ أن حد المعدل لن يتم تطبيقه إذا استخدمت مفتاح واجهة برمجة تطبيقات لجميع المستخدمين للطلبات وقدمت اسم مستخدم لمسؤول الموقع لمعلمة
Api-Usernameللطلب. هذا يعني أنه بدلاً من تعطيل إعداد الموقعmax prints per hour per user، يمكنك ببساطة استخدام اسم مستخدم مسؤول (على سبيل المثالsystem) للطلبات.إذا كنت تواجه أخطاء في حدود المعدل مع طلبات واجهة برمجة التطبيقات التي لا تحتوي على
print=true، فنحن نوصي بإضافة مهلة إلى برنامج واجهة برمجة التطبيقات الخاص بك حتى لا تتجاوز حدود المعدل. بدلاً من ذلك، يمكنك الاستماع إلى رموز الخطأ429(عدد كبير جدًا من الطلبات) والتراجع عن الطلبات عند تلقي هذا الرد.كمرجع، تنطبق حدود المعدل الافتراضية المدرجة أدناه على خطط الاستضافة القياسية والأعمال لدينا:
discourse/config/discourse_defaults.conf at main · discourse/discourse · GitHub
مُستضاف ذاتيًا فقط - انظر: Available settings for global rate limits and throttling للحصول على تفاصيل حول تعديل حدود معدل واجهة برمجة تطبيقات Discourse.
هل يتم دعم معلمة الاستعلام ?page؟ إنها تعمل، ولكن بطريقة مفاجئة - ?page=1 تُرجع المنشور الأول فقط في الموضوع، لذلك للتنقل باستخدام المعلمة تحتاج إلى البدء بـ https://example.com/t/slug/topicId.json، ثم الانتقال إلى https://example.com/t/slug/topicId.json?page=2، ثم الاستمرار حتى تحصل في النهاية على استجابة 404.
مرحباً سيمون،
استخدام المعلمة ?page=1 مع نقطة نهاية الحصول على موضوع واحد سيعيد أول 20 مشاركة من موضوع، وكل رقم صفحة لاحق سيعيد ما يصل إلى 20 مشاركة.
عندما لا تكون هناك مشاركات متاحة (مثال: الصفحة مرتفعة جدًا وغير صالحة)، ستحصل على استجابة 404.
إذا لم تحدد رقم صفحة، فسيقوم الرمز بتعيين رقم الصفحة إلى 1، لذا فإن ?page=1 هو نفس عدم إلحاق صفحة صريحة بطلب الموضوع.
إذا كنت ترغب في استخدام هذه الطريقة لجلب جميع المشاركات من موضوع، فيجب أن تكون قادرًا على القيام بذلك، على الرغم من أنه لم يتم ذكره في مستندات واجهة برمجة تطبيقات Discourse.
شكرا! أعمل على روبوت Matrix لجلب المشاركات!
أعتقد أن هذا خطأ. تعيينه إلى 0 سيعطل الطباعة على الإطلاق. الوصف الأخير لهذا الإعداد هو الحد الأقصى لعدد مرات عرض صفحة /print (تعيينه إلى 0 لتعطيل الطباعة).
