أحاول إنشاء نص برمجي للحصول على مشاركات محددة من موضوع. انظر هذه الصفحة 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
شكراً على الرد.
أعتقد أنني ما زلت بحاجة إلى دعم مدفوع.
لقد نقلت المنشور إلى السوق
Hector
(Héctor Fernández)
26 يونيو 2022، 7:20م
6
أنت ترسل جسمًا، يجب عليك استخدام طلب POST.
إعجاب واحد (1)
pfaffman
(Jay Pfaffman)
26 يونيو 2022، 7:39م
7
فقط احصل على الموضوع ورتب المنشورات التي تريدها مع تجاهل الآخرين.
أيضًا، إذا كان لديك معرف المنشور، يمكنك الحصول عليه عبر /p/123
لقد جربت واجهة برمجة التطبيقات لاسترداد منشور واحد. لا تُرجع “link_counts” ولا تحتوي على “post_stream”.
أعتقد أن واجهة برمجة التطبيقات للحصول على منشورات محددة من موضوع تحتوي على “post_stream”.
والموضوع الذي أحاول معالجته يحتوي على أكثر من 1500 مشاركة…
إعجاب واحد (1)
pfaffman
(Jay Pfaffman)
26 يونيو 2022، 7:54م
10
ربما تحتاج إلى ترميز بياناتك صراحةً بتنسيق JSON؟
data = '{\"post_ids[]\":' + post_id +'}'
لا يعمل.
لقد جربت json.dumps أيضًا. لا يعمل…
أتمنى لو كان لدينا بعض الأمثلة البرمجية…
RGJ
(Richard - Communiteq)
26 يونيو 2022، 10:19م
13
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)
system
(system)
تم إغلاقه في
26 يوليو 2022، 11:10م
17
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.