Ich versuche, ein Skript zu erstellen, um bestimmte Beiträge aus einem Thema abzurufen. Sehen Sie sich diese Seite an: Discourse API Docs
Aber ich erhalte immer den Antwortstatuscode = 413.
Bitte helfen Sie mir! Ich schicke Ihnen 20 $ auf Ihr PayPal-Konto, wenn Sie es lösen können.
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} # Ich habe 0 versucht, hat nicht funktioniert
response = requests.get(endpoint, headers=headers, data=data)
if response.status_code == 200:
return response
FYI, mein Api-Key und Api-Benutzername sind korrekt. Meine anderen Discourse-APIs funktionieren, außer dieser.
Hallo, Sie können sich Discourse API gen ansehen.
Dort finden Sie die benötigte API ganz einfach, sodass Sie sie nicht separat implementieren müssen.
Wenn Sie dennoch kostenpflichtigen Support benötigen, lassen Sie es uns wissen. Wir werden das Thema dann in die Rubrik Marketplace verschieben, damit interessierte Personen Sie kontaktieren können.
1 „Gefällt mir“
Hallo @Ahmed_Gagan
Danke für die Antwort.
Ich denke, ich brauche immer noch kostenpflichtigen Support.
Ich habe den Beitrag in den Marktplatz verschoben
Hector
(Héctor Fernández)
26. Juni 2022 um 19:20
6
Sie senden einen Body, Sie sollten eine POST-Anfrage verwenden.
1 „Gefällt mir“
pfaffman
(Jay Pfaffman)
26. Juni 2022 um 19:39
7
Holen Sie sich einfach das Thema und sortieren Sie die gewünschten Beiträge aus, indem Sie die anderen ignorieren.
Wenn Sie außerdem die Beitrags-ID haben, können Sie /p/123 aufrufen.
Ich habe die API zum Abrufen eines einzelnen Beitrags ausprobiert. Sie gibt keine „link_counts“ zurück und hat keinen „post_stream“.
Ich glaube, die API zum Abrufen bestimmter Beiträge aus einem Thema hat einen „post_stream“.
Und das Thema, das ich zu verarbeiten versuche, hat über 1500 Beiträge…
1 „Gefällt mir“
pfaffman
(Jay Pfaffman)
26. Juni 2022 um 19:54
10
Vielleicht müssen Sie Ihre Daten explizit als JSON kodieren?
data = '{\"post_ids[]\":' + post_id +'}'
Es funktioniert nicht.
Ich habe auch gerade json.dumps ausprobiert. Funktioniert nicht…
Ich wünschte, wir hätten einige Codebeispiele…
RGJ
(Richard - Communiteq)
26. Juni 2022 um 22:19
13
GET hat immer eine Query-String und niemals Post-Daten (deshalb erhalten Sie 413 Payload zu groß, es erwartet keine). Wenn Sie Daten von einem Server abfragen, ohne eine Änderung vorzunehmen, verwenden Sie (fast) immer GET und nicht POST. Sie sollten also params= anstelle von data= verwenden.
Ich denke, die Dokumentation für diesen spezifischen API-Aufruf ist schlecht formuliert (“Request Body schema ” deutet wirklich auf POST data hin), daher verschiebe ich dies zu Bug und Sie müssen mir nichts bezahlen.
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 „Gefällt mir“
Es funktioniert! Vielen Dank @RGJ
2 „Gefällt mir“
system
(system)
Geschlossen,
26. Juli 2022 um 23:10
17
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.