وثائق Discourse API تشير إلى "request body" لـ GET request

أحاول إنشاء نص برمجي للحصول على مشاركات محددة من موضوع. انظر هذه الصفحة Discourse API Docs

لكنني ما زلت أتلقى رمز حالة الاستجابة = 413.

شخص ما يساعدني، من فضلك! سأرسل 20 دولارًا إلى حساب PayPal الخاص بك إذا كان بإمكانك حلها.

def get_post_from_topic(topic_id, post_id):
    endpoint = "https://www.example.com/t/" + topic_id + "/posts.json"

    headers = {
        "Content-Type": "application/json",
        "Api-Key": api_key,
        "Api-Username": api_username,
    }

    data = {"post_ids[]": post_id}  # لقد جربت 0، لم ينجح
    
    response = requests.get(endpoint, headers=headers, data=data)
    if response.status_code == 200:
        return response

للعلم، مفتاح واجهة برمجة التطبيقات (Api-Key) واسم المستخدم لواجهة برمجة التطبيقات (Api-Username) صحيحان. واجهات برمجة التطبيقات الأخرى الخاصة بي تعمل باستثناء هذه الواجهة.

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

مرحباً @Ahmed_Gagan

شكراً على الرد.

أعتقد أنني ما زلت بحاجة إلى دعم مدفوع.

لقد نقلت المنشور إلى السوق

أنت ترسل جسمًا، يجب عليك استخدام طلب POST.

فقط احصل على الموضوع ورتب المنشورات التي تريدها مع تجاهل الآخرين.

أيضًا، إذا كان لديك معرف المنشور، يمكنك الحصول عليه عبر /p/123

لقد جربت واجهة برمجة التطبيقات لاسترداد منشور واحد. لا تُرجع “link_counts” ولا تحتوي على “post_stream”.

أعتقد أن واجهة برمجة التطبيقات للحصول على منشورات محددة من موضوع تحتوي على “post_stream”.

والموضوع الذي أحاول معالجته يحتوي على أكثر من 1500 مشاركة…

ربما تحتاج إلى ترميز بياناتك صراحةً بتنسيق JSON؟

data = '{\"post_ids[]\":' + post_id +'}' 

لا يعمل.

لقد جربت json.dumps أيضًا. لا يعمل…

أتمنى لو كان لدينا بعض الأمثلة البرمجية…

دالة GET تحتوي دائمًا على سلسلة استعلام (query string) ولا تحتوي أبدًا على بيانات POST (ولهذا السبب تحصل على خطأ “413 payload too large”، لأنها لا تتوقع أي بيانات). عند استرداد البيانات من الخادم دون إجراء أي تغيير، ستستخدم (تقريبًا) دائمًا GET وليس POST. لذلك يجب عليك استخدام params= بدلاً من data=.

أعتقد أن وثائق هذه المكالمة الخاصة لـ API صيغت بشكل سيئ (“Request Body schema” تشير حقًا إلى data في POST)، لذا سأقوم بنقل هذا الموضوع إلى Contribute > Bug ولا داعي لدفع أي مبلغ لي.

import requests
import json

def get_post_from_topic(topic_id, post_id):
    endpoint = f"https://forum.example.com/t/{topic_id}/posts.json"
    api_username = 'system'
    api_key = 'REDACTED'
    headers = {
        "Content-Type": "application/json",
        "Api-Key": api_key,
        "Api-Username": api_username,
    }
    params = {
      "post_ids[]": post_id
    }
    response = requests.get(endpoint, headers=headers, params = params) 
    if response.status_code == 200:
        return response

response = get_post_from_topic(6,8)
print(response.json())

{"post_stream": {"posts": [{"id": 8, "name": "system", "username": "system", "avatar_template": "/images/discourse-logo-sketch-small.png", "created_at": "2022-06-26T04:44:23.637Z", "cooked": "<p><a name=\"collect\"></a></p>\n<h2>\n<a name=\"what-information-do-we-collectcollect-1\" class=\"anchor\" href=\"#what-information-do-we-collectcollect-1\"></a><a href=\"#collect\">What information do we collect...

إنه يعمل!
شكراً جزيلاً @RGJ