J’essaie de créer un script pour obtenir des publications spécifiques d’un sujet. Voir cette page Discourse API Docs
Mais je reçois constamment le code d’état de réponse = 413.
Quelqu’un peut m’aider, s’il vous plaît ! J’enverrai 20 $ sur votre compte PayPal si vous pouvez résoudre ce problème.
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} # J'ai essayé 0, ça n'a pas marché
response = requests.get(endpoint, headers=headers, data=data)
if response.status_code == 200:
return response
Pour information, ma clé API et mon nom d’utilisateur API sont corrects. Mes autres API discourse fonctionnent, sauf celle-ci.
Salut, vous pouvez consulter Discourse API gen
Vous y trouverez facilement l’API dont vous avez besoin, vous n’aurez donc pas à l’implémenter séparément.
Si vous avez toujours besoin d’un support payant, faites-le nous savoir et nous déplacerons le sujet vers Marketplace afin que les personnes intéressées puissent vous contacter.
1 « J'aime »
Salut @Ahmed_Gagan
Merci pour votre réponse.
Je pense que j’ai toujours besoin d’une assistance payante.
J’ai déplacé la publication vers la marketplace
Hector
(Héctor Fernández)
Juin 26, 2022, 7:20
6
Vous envoyez un corps, vous devriez utiliser une requête POST.
1 « J'aime »
pfaffman
(Jay Pfaffman)
Juin 26, 2022, 7:39
7
Il suffit de récupérer le sujet et de trier les publications que vous souhaitez en ignorant les autres.
De plus, si vous avez l’identifiant de la publication, vous pouvez obtenir /p/123.
J’ai essayé l’API pour récupérer un seul post. Elle ne renvoie pas « link_counts » et n’a pas « post_stream ».
Je pense que l’API pour obtenir des posts spécifiques d’un sujet a « post_stream ».
Et le sujet que j’essaie de traiter compte plus de 1500 messages…
1 « J'aime »
pfaffman
(Jay Pfaffman)
Juin 26, 2022, 7:54
10
Peut-être devez-vous encoder explicitement vos données en json ?
data = '{\"post_ids[]\":' + post_id +'}'
Ça ne fonctionne pas.
J’ai aussi essayé json.dumps. Ça ne fonctionne pas…
J’aimerais que nous ayons des exemples de code…
RGJ
(Richard - Communiteq)
Juin 26, 2022, 10:19
13
GET a toujours une chaîne de requête et jamais de données POST (c’est pourquoi vous recevez une erreur 413 Payload Too Large, il ne s’attend à rien). Lorsque vous interrogez des données d’un serveur sans apporter de modification, vous utiliserez (presque) toujours GET et non POST. Vous devriez donc utiliser params= au lieu de data=.
Je pense que la documentation de cet appel d’API spécifique est mal formulée (" Schéma du corps de la requête " indique vraiment POST data) donc je déplace ceci vers Bug et vous n’avez rien à me payer.
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...\n```
5 « J'aime »
system
(system)
A fermé ce sujet ()
Juillet 26, 2022, 11:10
17
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.