Aggiorna un post tramite richiesta API PUT

Solo per chiarire, la documentazione API di Discourse menziona una struttura del genere…

{
"post[raw]": "string",
"post[raw_old]": "string",
"post[edit_reason]": "string",
"post[cooked]": "string"
}

Prima di provare, significa questo, o meglio… cosa significa esattamente?

Significa: {post: {raw: ..., raw_old: ... }}

O semplicemente {raw: "", raw_old: ""...}?

E inoltre, cos’è raw_old? Dice solo che ogni elemento è una “stringa” che devo inserire nel corpo JSON con un PUT.

Sto semplicemente cercando di aggiungere una riga all’inizio del post (inizialmente creato da un Bot) dove dobbiamo inserire un link a un altro sito. Nota anche che l’obiettivo è far visualizzare quel primo paragrafo sotto il titolo della Categoria, o nell’elemento cooked

da mostrare (definito subito sotto il titolo della categoria).

Spero abbia senso. Se non è così, chiedimi di chiarire.

Al momento non sono sicuro a cosa serva esattamente raw_old, ma devi solo utilizzare il campo raw e questo sostituirà l’intero post. Quindi, nel tuo codice, dovresti recuperare il post che desideri modificare, aggiungere la tua riga in cima, quindi aggiornare il post utilizzando il campo raw.

Potrebbe essere utile vedere come fa Discourse modificando un post in tempo reale sul tuo sito ed esaminando le chiamate del browser:

È così che funziona anche il gem discourse_api:

Solo una domanda a riguardo: ti riferisci a una documentazione diversa da quella definita all’indirizzo Discourse API Docs ? Sarebbe interessante… Tuttavia, mi baso solo sulla documentazione API.

Il mio obiettivo semplice è aggiungere un commento e un link sotto il nome della categoria, che credo Discourse prenda dal primo post del topic “About …”? Sto cercando di capire cosa verrà inserito nell’elemento

… o cosa devo fare per far apparire il mio post lì. La mia spiegazione ha senso?

Dalle informazioni sopra riportate e dai tentativi effettuati, non è possibile aggiornare un post utilizzando il campo “cooked” come indicato nella documentazione API. È invece possibile farlo con “raw”; tutti i miei tentativi con “cooked” hanno restituito un errore indicando che il post era invalido perché inferiore a 20 caratteri o non costituiva una frase chiara…

Tuttavia, ci sono ulteriori problemi relativi a “raw” che discuterò in un altro post, poiché non sono direttamente correlati.

Grazie per tutto il vostro aiuto.

C’è una leggera discrepanza nella documentazione API:

La documentazione indica: PUT /posts/{id}.json con payload

Content type: application/json

{
  "post[raw]": "string",
  "post[raw_old]": "string",
  "post[edit_reason]": "string",
  "post[cooked]": "string"
}

ma questo funziona solo con PUT /posts/{id} e Content-Type: application/x-www-form-urlencoded.

Il payload corretto per PUT /posts/{id}.json dovrebbe essere:

Content type: application/json

{
  "post": {
      "raw": "string",
      "raw_old": "string",
      "edit_reason": "string",
      "cooked": "string"
    }
}

Il parametro raw è sufficiente per sostituire l’intero post.

Sì, grazie, me ne sono reso conto dopo aver provato alcune richieste su Postman e sperimentato un po’… Inoltre, nei miei tentativi, l’opzione “cooked” sembrava non avere alcun effetto… e non sono ancora sicuro di cosa sia “raw_old”.

Questo è stato rimandato oggi ed è assegnato a me. Forse può essere non assegnato :slight_smile:

In ogni caso, la documentazione ora è corretta: Discourse API Docs.