Estou tentando criar um script para obter posts específicos de um tópico. Veja esta página Discourse API Docs
Mas continuo recebendo o código de status de resposta = 413.
Alguém me ajude, por favor! Enviarei US$ 20 para sua conta do PayPal se você puder resolver isso.
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} # Tentei 0, não funcionou
response = requests.get(endpoint, headers=headers, data=data)
if response.status_code == 200:
return response
FYI Minha Api-Key e Api-Username estão corretas. Minhas outras APIs do discourse funcionam, exceto esta.
Olá, você pode conferir a Discourse API gen
Você encontrará facilmente a API que precisa nesta gem, então não terá que implementá-la separadamente.
Se você ainda precisar de suporte pago, nos avise e moveremos o tópico para o Marketplace para que pessoas interessadas possam entrar em contato com você.
1 curtida
Olá @Ahmed_Gagan
Obrigado pela resposta.
Acho que ainda preciso de suporte pago.
Movi a postagem para o marketplace
Hector
(Héctor Fernández)
Junho 26, 2022, 7:20pm
6
Você está enviando um corpo, você deveria estar usando uma requisição POST.
1 curtida
pfaffman
(Jay Pfaffman)
Junho 26, 2022, 7:39pm
7
Apenas obtenha o tópico e organize as postagens que você deseja, ignorando as outras.
Além disso, se você tiver o ID da postagem, poderá obter /p/123.
Tentei a API de recuperação de um único post. Ela não retorna “link_counts” e não tem “post_stream”.
Acho que a API get specific posts from topic tem “post_stream”.
E o tópico que estou tentando processar tem mais de 1500 posts…
1 curtida
pfaffman
(Jay Pfaffman)
Junho 26, 2022, 7:54pm
10
Talvez você precise codificar seus dados explicitamente como json?
data = '{\"post_ids[]\":' + post_id +'}'
Não funciona.
Também tentei o json.dumps. Não funciona…
Gostaria que tivéssemos alguns exemplos de código…
RGJ
(Richard - Communiteq)
Junho 26, 2022, 10:19pm
13
GET sempre tem uma string de consulta e nunca tem dados de postagem (é por isso que você está recebendo 413 payload too large, ele não espera nada). Ao consultar dados de um servidor sem fazer uma alteração, você (quase) sempre usará GET e não POST. Portanto, você deve usar params= em vez de data=.
Acho que a documentação para esta chamada de API específica está mal formulada (“Request Body schema ” realmente indica POST data), então estou movendo isso para Bug e você não precisa me pagar 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><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 curtidas
Funciona!
Muito obrigado @RGJ
2 curtidas
system
(system)
Fechado
Julho 26, 2022, 11:10pm
17
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.