Estoy intentando crear un script para obtener publicaciones específicas de un tema. Vea esta página Discourse API Docs
Pero sigo recibiendo el código de estado de respuesta = 413.
¡Alguien me ayude, por favor! Enviaré $20 a su cuenta de PayPal si puede resolverlo.
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} # Intenté con 0, no funcionó
response = requests.get(endpoint, headers=headers, data=data)
if response.status_code == 200:
return response
Para tu información, mi Api-Key y Api-Username son correctos. Mis otras APIs de Discourse funcionan excepto esta.
Hola, puedes consultar Discourse API gen
Encontrarás fácilmente la API que necesitas en esta gema, por lo que no tendrás que implementarla por separado.
Si aún necesitas soporte de pago, háznoslo saber y moveremos el tema a Marketplace para que las personas interesadas puedan contactarte.
1 me gusta
Hola @Ahmed_Gagan
Gracias por tu respuesta.
Creo que todavía necesito soporte de pago.
Moví la publicación al marketplace
Hector
(Héctor Fernández)
26 Junio, 2022 19:20
6
Estás enviando un cuerpo, deberías estar usando una solicitud POST.
1 me gusta
pfaffman
(Jay Pfaffman)
26 Junio, 2022 19:39
7
Simplemente obtén el tema y selecciona las publicaciones que desees, ignorando las demás.
Además, si tienes el ID de la publicación, puedes obtener /p/123.
Intenté usar la API para recuperar una sola publicación. No devuelve “link_counts” y no tiene “post_stream”.
Creo que la API para obtener publicaciones específicas de un tema tiene “post_stream”.
Y el tema que estoy intentando procesar tiene más de 1500 publicaciones…
1 me gusta
pfaffman
(Jay Pfaffman)
26 Junio, 2022 19:54
10
¿Quizás necesites codificar tus datos explícitamente como json?
data = '{\"post_ids[]\":' + post_id +'}'
No funciona.
También acabo de probar json.dumps. No funciona…
Ojalá tuviéramos algunos ejemplos de código…
RGJ
(Richard - Communiteq)
26 Junio, 2022 22:19
13
GET siempre tiene una cadena de consulta y nunca tiene datos POST (por eso obtienes 413 payload demasiado grande, no espera ninguno). Al consultar datos de un servidor sin realizar un cambio, casi siempre usarás GET y no POST. Por lo tanto, deberías usar params= en lugar de data=.
Creo que la documentación para esta llamada API específica está mal redactada (“Request Body schema ” realmente indica POST data), así que lo muevo a Bug y no necesitas pagarme nada.
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...
5 Me gusta
system
(system)
Cerrado
26 Julio, 2022 23:10
17
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.