La documentazione di Discourse API menziona un "request body" per una richiesta GET

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.

1 Mi Piace

Ciao @Ahmed_Gagan

Grazie per la risposta.

Penso di aver ancora bisogno di supporto a pagamento.

Ho spostato il post nel marketplace

Stai inviando un corpo, dovresti usare una richiesta POST.

1 Mi Piace

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…

1 Mi Piace

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…

GET ha sempre una stringa di query e mai dati post (ecco perché ricevi 413 payload troppo grande, non si aspetta nulla). Quando interroghi dati da un server senza apportare modifiche, userai (quasi) sempre GET e non POST. Quindi dovresti usare params= invece di data=.

Penso che la documentazione per questa specifica chiamata API sia formulata male (" Request Body schema " indica in realtà POST data) quindi sto spostando questo in 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...\n```
5 Mi Piace

Funziona!

Grazie mille @RGJ

2 Mi Piace

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.