وثائق 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 حتى يتمكن الأشخاص المهتمون من الاتصال بك.

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

مرحباً @Ahmed_Gagan

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

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

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

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

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

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

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

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

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

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

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

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

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

لا يعمل.

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

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

GET يحتوي دائمًا على سلسلة استعلام ولا يحتوي أبدًا على بيانات POST (لهذا السبب تحصل على خطأ 413 Payload Too Large، فهو لا يتوقع أي شيء). عند الاستعلام عن بيانات من خادم دون إجراء تغيير، ستستخدم دائمًا (تقريبًا) GET وليس POST. لذلك يجب عليك استخدام params= بدلاً من data=.

أعتقد أن وثائق استدعاء API المحدد هذا مصاغة بشكل سيء (“مخطط جسم الطلب” يشير حقًا إلى POST data) لذلك أقوم بنقل هذا إلى 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><h2><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...
5 إعجابات

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

إعجابَين (2)

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.