Sto cercando di creare uno script per ottenere post specifici da un argomento. Vedi questa pagina Discourse API Docs
Ma continuo a ricevere il codice di stato della risposta = 413.
Qualcuno mi aiuti, per favore! Manderò $20 sul tuo conto PayPal se riesci a risolvere il problema.
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} # Ho provato 0, non ha funzionato
response = requests.get(endpoint, headers=headers, data=data)
if response.status_code == 200:
return response
Per tua informazione, la mia Api-Key e il mio Api-Username sono corretti. Le mie altre API di discourse funzionano tranne questa.
Ciao, puoi dare un’occhiata a Discourse API gen
Troverai facilmente l’API di cui hai bisogno in questo gem, quindi non dovrai implementarla separatamente.
Se hai ancora bisogno di supporto a pagamento, faccelo sapere, sposteremo l’argomento in Marketplace in modo che le persone interessate possano contattarti.
Ciao @Ahmed_Gagan
Grazie per la risposta.
Penso di aver ancora bisogno di supporto a pagamento.
Ho spostato il post nel marketplace
Hector
(Héctor Fernández)
26 Giugno 2022, 7:20pm
6
Stai inviando un corpo, dovresti usare una richiesta POST.
pfaffman
(Jay Pfaffman)
26 Giugno 2022, 7:39pm
7
Basta ottenere l’argomento e ordinare i post che desideri ignorando gli altri.
Inoltre, se hai l’ID del post, puoi ottenere /p/123
Ho provato l’API per recuperare un singolo post. Non restituisce “link_counts” e non ha “post_stream”.
Penso che l’API per ottenere post specifici da un argomento abbia “post_stream”.
E l’argomento che sto cercando di elaborare ha oltre 1500 post…
pfaffman
(Jay Pfaffman)
26 Giugno 2022, 7:54pm
10
Forse devi codificare esplicitamente i tuoi dati come json?
data = '{\"post_ids[]\":' + post_id +'}'
Non funziona.
Ho provato anche json.dumps. Non funziona…
Vorrei che avessimo alcuni esempi di codice…
RGJ
(Richard - Communiteq)
26 Giugno 2022, 10:19pm
13
GET ha sempre una stringa di query e non ha mai dati POST (è per questo che ricevi l’errore 413 payload too large, poiché non si aspetta alcun dato). Quando si recuperano dati da un server senza apportare modifiche, si usa (quasi) sempre GET e non POST. Dovresti quindi usare params= invece di data=.
Credo che la documentazione per questa specifica chiamata API sia mal formulata (“Request Body schema ” indica chiaramente l’uso di POST data), quindi sposto questo problema in Contribute > Bug e non devi pagarmi nulla.
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...