# Esempi completi per la REST API di Discourse

**URL:** https://meta.discourse.org/t/discourse-rest-api-comprehensive-examples/274354
**Category:** Integrations
**Tags:** rest-api, how-to
**Created:** [19 Ottobre 2023, 2:32pm UTC](https://meta.discourse.org/t/discourse-rest-api-comprehensive-examples/274354 "2023-10-19T14:32:19Z")
**Posts on this page:** 20
**Page:** 1

<div class="post-metadata">

### Author: ![Discourse](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/discourse/32/148734_2.png) [@Discourse](https://meta.discourse.org/u/Discourse)
#### Post date: [19 Ottobre 2023, 2:32pm UTC](https://meta.discourse.org/t/discourse-rest-api-comprehensive-examples/274354/1 "2023-10-19T14:32:19Z")

</div>

Ci sono [diverse guide](https://meta.discourse.org/search?q=%23rest-api%20%23documentation) che coprono vari utilizzi o spiegazioni dell’API.

Questa offre esempi pratici e completi su come utilizzarla.

⚠ Tutti gli esempi di codice in questa guida non sono intesi come best practice né vanno utilizzati così come sono.  
Molti controlli, la gestione degli errori e altro sono volutamente ignorati o omessi per concentrarsi esclusivamente sull’uso dell’API.

# A cosa serve l’API?

La maggior parte delle tue azioni su Discourse (pubblicare, mettere like, modificare una impostazione, ecc.) viene eseguita tramite l’API effettuando richieste a un endpoint\[1\].

Ad esempio, quando crei un argomento su meta, viene effettuata una richiesta `POST` a `https://meta.discourse.org/posts.json`. La richiesta contiene, tra le altre cose, l’autore, il titolo, la categoria, i tag e il contenuto del tuo post.

L’utilizzo personalizzato dell’API viene solitamente effettuato per automatizzare attività e spesso in combinazione con altri servizi, come webhook, script, software di terze parti e altre API.

Per utilizzare l’API è obbligatorio disporre di credenziali API. Questo può essere fatto in pochi clic, seguendo questa guida: [Create and configure an API key](https://meta.discourse.org/t/create-and-configure-an-api-key/230124?u=canapin)

Non aspettare oltre, passiamo al primo esempio di utilizzo dell’API. 🧑‍💻

# Creare un argomento mensile

In questo esempio, useremo [curl](https://en.wikipedia.org/wiki/CURL) e [cron](https://en.wikipedia.org/wiki/Cron) per creare un argomento mensile “conversazione libera” sul tuo forum. Una pratica comune nelle comunità online 🙂

## Creare la chiave API

Segui la [guida per la creazione della chiave API](https://meta.discourse.org/t/create-and-configure-an-api-key/230124?u=canapin). Imposta **Livello utente** su Utente singolo.  
L’utente scelto sarà l’autore dell’argomento mensile.  
Successivamente, puoi scegliere un ambito **Globale** o un ambito **Granulare** ; in quest’ultimo caso, dovrà avere almeno l’accesso **Argomenti** → **Scrittura**.  
Annota la tua chiave API generata. ✍

## Creare un comando curl

Dalla riga di comando del tuo server, esegui questo comando per verificare se funziona e se un argomento viene creato correttamente utilizzando curl e l’API REST di Discourse con la tua chiave API:

```bash
curl -X POST "https://il-tuo-discourse.com/posts.json" -H "Content-Type: application/json" -H "Api-Key: LA_TUA_CHIAVE_API" -H "Api-Username: IL_TUO_NOME_UTENTE" -d "{\"title\": \"Creazione argomento di prova con l'API\", \"raw\": \"Ecco il contenuto dell'argomento\", \"category\": ID_CATEGORIA }"

```

Sostituisci:

- `il-tuo-discourse.com` con il dominio del tuo forum
- `LA_TUA_CHIAVE_API` con la tua chiave API
- `IL_TUO_NOME_UTENTE` con il nome utente scelto per la chiave API
- `ID_CATEGORIA` con l’ID della categoria in cui vuoi pubblicare il tuo argomento.

Se tutto è configurato correttamente, sul tuo forum dovrebbe essere creato un nuovo argomento di prova, simile a questo:

 ![Argomento di prova](https://global.discourse-cdn.com/meta/original/4X/9/b/3/9b3d6024b06addebd51ccd6b1b816ec46635bb46.png)

La maggior parte del lavoro è fatta in questa fase! Ora dobbiamo modificare il titolo e il contenuto dell’argomento con qualcosa di più appropriato e impostare la ricorrenza della creazione dell’argomento.

Inizia modificando il titolo dell’argomento da:  
`Creazione argomento di prova con l'API`  
a:  
`Conversazione libera del mese - $(date +\%B)`.

Fai lo stesso per il contenuto, da:  
`Creazione argomento di prova con l'API`  
a:  
`Cosa hai apprezzato di più e di meno durante $(date +\%B -d 'last month')?\nSentiti libero di condividere i tuoi pensieri e fornire idee. 🙂`

ℹ Sto usando il comando Unix [`date`](https://man7.org/linux/man-pages/man1/date.1.html) per inserire il nome del mese corrente nel titolo e quello del mese precedente nel contenuto.

ℹ `\n` nel contenuto crea una nuova riga.

Puoi usare la riga di comando ed eseguire la richiesta curl aggiornata. Dovrebbe aver creato un nuovo argomento sul tuo forum simile a questo:

 ![image](https://global.discourse-cdn.com/meta/original/4X/e/8/d/e8dbb8726d0d74ee223bdf30d3ff14c57e1b8d00.png)

## Impostare l’evento ricorrente

Creeremo un’attività cron che eseguirà il comando curl il primo giorno di ogni mese. 📅

Modifica il file cron con il seguente comando:

```bash
crontab -e

```

Inserisci questa riga alla fine del file (modifica il contenuto della richiesta come necessario) e salva le modifiche.

```bash
0 0 1 * * curl -X POST "https://il-tuo-discourse.com/posts.json" -H "Content-Type: application/json" -H "Api-Key: LA_TUA_CHIAVE_API" -H "Api-Username: IL_TUO_NOME_UTENTE" -d "{\"title\": \"Conversazione libera del mese - $(date +\%B)\", \"raw\": \"Cosa hai apprezzato di più e di meno durante $(date +\%B -d 'last month')?\nSentiti libero di condividere i tuoi pensieri e fornire idee. 🙂\", \"category\": 4 }"

```

ℹ La parte `0 0 1 * *` definisce l’intervallo con cui verrà eseguita il comando. Puoi saperne di più sulla sintassi qui: [https://crontab.guru](https://crontab.guru)

È fatto! Il tuo server creerà ora un nuovo argomento “conversazione libera” il primo giorno di ogni mese, utilizzando l’API REST di Discourse, una richiesta curl e un’attività cron. 🥳

# Cambiare automaticamente lo schema colori di un tema

Facciamo in modo che il nostro tema predefinito utilizzi uno schema colori che corrisponda alla stagione corrente ❄ 🌺 ☀ 🍂

Useremo Ruby per gestire i controlli sui mesi e un’attività cron per eseguire lo script.

Potremmo usare molti altri metodi oltre a Ruby e cron, ma questa guida mira anche a mostrare come utilizzare l’API con vari strumenti.

## Preparare il tema e gli schemi colori

Scegli il tema a cui vuoi cambiare lo schema colori e ottieni il suo ID. Troverai l’ID nell’URL del tema. Ad esempio, l’ID di questo tema è 1:

 ![ID del tema](https://global.discourse-cdn.com/meta/original/4X/5/f/3/5f36e8c933616c285da3180f14f5919e7e18d344.png)

Crea 4 palette colori e annota anche i loro ID.  
Qui, l’ID della palette Autunnale è 17:

 ![ID dello schema colori](https://global.discourse-cdn.com/meta/original/4X/e/0/6/e06a9ea9e93fab2a97662438c089c2bdd8aa9013.png)

## Creare lo script

[Installa Ruby](https://www.ruby-lang.org/en/documentation/installation/) sul tuo server.

Crea un file `seasons.rb`. Per questo esempio, considererò che si trovi in `~/scripts/`.

Inserisci il seguente contenuto in questo file. Effettueremo una richiesta PUT al nostro endpoint del tema e invieremo un payload contenente l’ID dello schema colori:

```rb
require 'net/http'
require 'json'
require 'date'

current_month = Date.today.month
color_scheme_id = case current_month
                  when 1..3 then 18 # Inverno
                  when 4..6 then 15 # Primavera
                  when 7..9 then 16 # Estate
                  else 17 # Autunno
                  end

uri = URI('https://il-tuo-discourse.com/admin/themes/ID_TEMA.json')
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true

request = Net::HTTP::Put.new(uri, {
  'Api-Key' => 'LA_TUA_CHIAVE_API',
  'Api-Username' => 'IL_TUO_NOME_UTENTE',
  'Content-Type' => 'application/json'
})

request.body = JSON.generate({
  "theme" => {
    "color_scheme_id" => color_scheme_id
  }
})

response = http.request(request)

```

Sostituisci:

- `il-tuo-discourse.com` con il dominio del tuo forum
- `LA_TUA_CHIAVE_API` con la tua chiave API
- `IL_TUO_NOME_UTENTE` con il nome utente scelto per la chiave API
- `ID_TEMA` con l’ID del tuo tema. Puoi trovarlo alla fine dell’URL della pagina delle impostazioni del tema.  
Ad esempio, in `https://il-tuo-discourse.com/admin/customize/themes/38`, l’ID del tema è `38`.

Proviamo manualmente lo script.  
Prima, imposta uno schema colori non stagionale nell’interfaccia di Discourse, se non è già così.

Poi, esegui lo script con il seguente comando:

```bash
ruby ~/scripts/seasons.rb

```

Aggiorna il browser. Lo schema colori utilizzato dal tuo tema dovrebbe essere cambiato. 🙂

L’ultima cosa da fare è creare il job cron che eseguirà questo script il primo giorno del mese in corrispondenza di ogni cambio di stagione.

Dai un’occhiata al [primo esempio](https://meta.discourse.org/t/discourse-rest-api-comprehensive-examples/274354#set-up-the-recurring-event-5) se non ricordi come creare un’attività cron.

```bash
0 0 1 1,4,7,10 * ruby ~/scripts/seasons.rb

```

È fatto! Il tuo forum indosserà ora nuovi colori all’inizio di ogni nuova stagione! ☀ 🥳

# Ricevere una richiesta web su un server web e utilizzare i suoi dati per aggiornare un argomento di Discourse

Questo è più complesso! 🧑‍💻

Il nostro strumento sarà PHP, il che significa che assumeremo di avere un server web funzionante da qualche parte con PHP installato.

In questo esempio, riceveremo un payload webhook di [Ko-Fi](https://ko-fi.com/) (un servizio di donazioni) su una pagina PHP, che utilizzerà quindi i dati ricevuti per utilizzare l’API di Discourse e aggiornare il titolo e il contenuto di un argomento.

Più specificamente, aggiornerà il titolo dell’argomento con l’importo e la data della donazione, e aggiungerà una nuova riga alla tabella che elenca le donazioni precedenti (addirittura farà saltare automaticamente l’argomento 🤫):

 ![Argomento donazioni da aggiornare](https://global.discourse-cdn.com/meta/original/4X/6/b/8/6b88be68e0ea1b0279e6dc3c62f033124b371948.png)

Ogni volta che un utente effettua una donazione, Ko-Fi\[2\] invierà una richiesta al nostro script PHP.

## Configurare Ko-Fi

Ho impostato la configurazione sulla [pagina webhooks di Ko-Fi](https://ko-fi.com/manage/webhooks) aggiungendo semplicemente l’URL del mio file PHP e annotando il token di verifica nascosto nella sezione Avanzate.

 ![image](https://global.discourse-cdn.com/meta/original/4X/f/c/5/fc5ca24ae65cd6187b12f1e42674a5b59b7eb819.png)

Su una singola donazione, Ko-Fi invierà un payload come questo al nostro script PHP:

```json
data = {
  "verification_token": "d8546b84-c698-4df5-9811-39d35813e2ff",
  "message_id": "a499df4c-7bbb-4061-b4a6-8b9d969da689",
  "timestamp": "2023-10-19T13:35:06Z",
  "type": "Donation",
  "is_public": true,
  "from_name": "Jo Example",
  "message": "Buona fortuna con l'integrazione!",
  "amount": "3.00",
  "url": "https://ko-fi.com/Home/CoffeeShop?txid=00000000-1111-2222-3333-444444444444",
  "email": "jo.example@example.com",
  "currency": "USD",
  "is_subscription_payment": false,
  "is_first_subscription_payment": false,
  "kofi_transaction_id": "00000000-1111-2222-3333-444444444444",
  "shop_items": null,
  "tier_name": null,
  "shipping": null
}

```

Riceveremo questo payload, quindi estraiamo le due informazioni di cui abbiamo bisogno:

- L’ **importo** (`3.00`), che arrotonderemo a un numero intero.

- L’ **timestamp** (`2023-10-19T13:35:06Z`), che formatteremo in una data più leggibile.

## Ricevere il payload di Ko-Fi

Innanzitutto, mettiamo il seguente codice nella nostra pagina PHP per ricevere la richiesta da Ko-Fi, assicurandoci di aver ricevuto una richiesta POST e che il valore del token corrisponda a quello fornito nella pagina webhooks di Ko-Fi. Formattiamo anche l’importo e la data come detto prima.

```php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $jsonData = json_decode($_POST['data'], true);

    if ($jsonData['verification_token'] === 'IL_TUO_TOKEN_DI_VERIFICA') {
        $amount = floor(floatval($jsonData['amount']));
        $date = (new DateTime($jsonData['timestamp']))->format('d/m/Y');
    }
}

```

Sostituisci:

- `IL_TUO_TOKEN_DI_VERIFICA` con il token fornito da Ko-Fi

## Aggiornare il titolo dell’argomento

Il passaggio successivo è aggiornare il titolo del nostro argomento. Useremo curl nel nostro script PHP per effettuare una richiesta PUT al corretto endpoint.

```php
        $putData = json_encode(['title' => '🥳 Nuova donazione: ' . $amount . '€ il ' . $date]);
        $ch = curl_init('https://il-tuo-discourse.com/t/test-nuovo-argomento/ID_ARGOMENTO');
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
        curl_setopt($ch, CURLOPT_POSTFIELDS, $putData);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_HTTPHEADER, [
            'Content-Type: application/json',
            'Content-Length: ' . strlen($putData),
            'Api-Key: LA_TUA_CHIAVE_API',
            'Api-Username: IL_TUO_NOME_UTENTE'
        ]);
        curl_exec($ch);

```

Sostituisci:

- `il-tuo-discourse.com` con il dominio del tuo forum
- `ID_ARGOMENTO` con l’ID corretto dell’argomento
- `LA_TUA_CHIAVE_API` con la tua chiave API
- `IL_TUO_NOME_UTENTE` con il nome utente scelto per la chiave API

## Aggiornare il contenuto del post

Per poter aggiungere nuovo contenuto al primo post dell’argomento, dobbiamo prima recuperarne il contenuto attuale con una richiesta GET.

```php
        $ch_get = curl_init('https://il-tuo-discourse.com/posts/ID_POST.json');
        curl_setopt($ch_get, CURLOPT_RETURNTRANSFER, true);
        $currentContent = json_decode(curl_exec($ch_get), true)['raw'];

```

Sostituisci:

- `ID_POST` con l’ID corretto del post\[3\]

Infine, dobbiamo aggiornare il contenuto del post aggiungendo una nuova riga alla tabella con l’importo e la data. Lo faremo con una richiesta PUT.

```php
        $updatedContent = $currentContent . "\n| " . $amount . "€ | " . $date . " |";
        $putPostData = json_encode(['post' => ['raw' => $updatedContent]]);
        $ch_put = curl_init('https://il-tuo-discourse.com/posts/ID_POST');
        curl_setopt($ch_put, CURLOPT_CUSTOMREQUEST, 'PUT');
        curl_setopt($ch_put, CURLOPT_POSTFIELDS, $putPostData);
        curl_setopt($ch_put, CURLOPT_HTTPHEADER, [
            'Content-Type: application/json',
            'Content-Length: ' . strlen($putPostData),
            'Api-Key: LA_TUA_CHIAVE_API',
            'Api-Username: IL_TUO_NOME_UTENTE'
        ]);
        curl_exec($ch_put);

```

Sostituisci:

- `il-tuo-discourse.com` con il dominio del tuo forum
- `ID_POST` con l’ID corretto del post
- `LA_TUA_CHIAVE_API` con la tua chiave API
- `IL_TUO_NOME_UTENTE` con il nome utente scelto per la chiave API

Il codice finale appare così:

```php
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $jsonData = json_decode($_POST['data'], true);

    if ($jsonData['verification_token'] === 'IL_TUO_TOKEN_DI_VERIFICA') {
        $amount = floor(floatval($jsonData['amount']));
        $date = (new DateTime($jsonData['timestamp']))->format('d/m/Y');

        $putData = json_encode(['title' => '🥳 Nuova donazione: ' . $amount . '€ il ' . $date]);
        $ch = curl_init('https://il-tuo-discourse.com/t/test-nuovo-argomento/ID_ARGOMENTO');
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
        curl_setopt($ch, CURLOPT_POSTFIELDS, $putData);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_HTTPHEADER, [
            'Content-Type: application/json',
            'Content-Length: ' . strlen($putData),
            'Api-Key: LA_TUA_CHIAVE_API',
            'Api-Username: IL_TUO_NOME_UTENTE'
        ]);
        curl_exec($ch);

        $ch_get = curl_init('https://il-tuo-discourse.com/posts/ID_POST.json');
        curl_setopt($ch_get, CURLOPT_RETURNTRANSFER, true);
        $currentContent = json_decode(curl_exec($ch_get), true)['raw'];

        $updatedContent = $currentContent . "\n| " . $amount . "€ | " . $date . " |";
        $putPostData = json_encode(['post' => ['raw' => $updatedContent]]);
        $ch_put = curl_init('https://il-tuo-discourse.com/posts/ID_POST');
        curl_setopt($ch_put, CURLOPT_CUSTOMREQUEST, 'PUT');
        curl_setopt($ch_put, CURLOPT_POSTFIELDS, $putPostData);
        curl_setopt($ch_put, CURLOPT_HTTPHEADER, [
            'Content-Type: application/json',
            'Content-Length: ' . strlen($putPostData),
            'Api-Key: LA_TUA_CHIAVE_API',
            'Api-Username: IL_TUO_NOME_UTENTE'
        ]);
        curl_exec($ch_put);

        curl_close($ch);
        curl_close($ch_get);
        curl_close($ch_put);
    } else {
        http_response_code(403);
        echo "Token di verifica non valido.";
    }
} else {
    http_response_code(405);
    echo "Sono consentite solo richieste POST.";
}
?>

```

Ripeto ancora una volta l’avvertimento all’inizio di questa guida 😛

> ⚠ Tutti gli esempi di codice in questa guida non sono intesi come best practice né vanno utilizzati così come sono.  
> Molti controlli, la gestione degli errori e altro sono volutamente ignorati o omessi per concentrarsi esclusivamente sull’uso dell’API.

Ora possiamo attivare una richiesta di prova da Ko-Fi e vedere come aggiorna il nostro argomento, sia il titolo che il contenuto. 🙂

È tutto!  
Hai un argomento che verrà aggiornato e fatto saltare ogni volta che qualcuno effettua una donazione su Ko-Fi! 🥳

* * *

ℹ Questo argomento è un wiki. Sentiti libero di correggere eventuali errori che vedi e di discutere su come migliorare questa guida.

* * *

1. Un URL specifico, in questo contesto. Ad esempio, `https://il-tuo-discourse.com/posts.json` 

2. Un po’ di informazioni sulla loro API: [https://help.ko-fi.com/hc/en-us/articles/360004162298-Does-Ko-fi-Have-an-API-or-Webhook-](https://help.ko-fi.com/hc/en-us/articles/360004162298-Does-Ko-fi-Have-an-API-or-Webhook-) 

3. L’ID del post può essere trovato nel codice HTML. È un elemento `<article>` con il seguente attributo: `data-post-id="ID_POST"`

---

<div class="post-metadata">

### Author: ![Lilly](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/lilly/32/575047_2.png) [@Lilly](https://meta.discourse.org/u/Lilly)
#### Post date: [19 Ottobre 2023, 2:44pm UTC](https://meta.discourse.org/t/discourse-rest-api-comprehensive-examples/274354/2 "2023-10-19T14:44:15Z")

</div>

Questo è fantastico @Canapin e molto necessario, penso. Stavo cercando qualcosa del genere un po’ di tempo fa. Grazie! 🙂

---

<div class="post-metadata">

### Author: ![CharlesBarouch](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/charlesbarouch/32/48050_2.png) [@CharlesBarouch](https://meta.discourse.org/u/CharlesBarouch)
#### Post date: [28 Dicembre 2023, 12:21pm UTC](https://meta.discourse.org/t/discourse-rest-api-comprehensive-examples/274354/5 "2023-12-28T12:21:01Z")

</div>

Come specifico un sottotema?  
Se ho jBASE con un sottotema di AutoDoc, devo unire i due in un argomento con un delimitatore (jBASE\>AutoDoc) o esiste un tag di categoria?

---

<div class="post-metadata">

### Author: ![CharlesBarouch](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/charlesbarouch/32/48050_2.png) [@CharlesBarouch](https://meta.discourse.org/u/CharlesBarouch)
#### Post date: [2 Gennaio 2024, 12:55pm UTC](https://meta.discourse.org/t/discourse-rest-api-comprehensive-examples/274354/6 "2024-01-02T12:55:36Z")

</div>

L’ho capito. Quando sei sulla pagina della categoria o sottocategoria, l’URL mostra il # invece del nome della categoria. Poiché le sottocategorie hanno i propri numeri, non devi combinare nulla.

---

<div class="post-metadata">

### Author: ![CharlesBarouch](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/charlesbarouch/32/48050_2.png) [@CharlesBarouch](https://meta.discourse.org/u/CharlesBarouch)
#### Post date: [2 Gennaio 2024, 12:57pm UTC](https://meta.discourse.org/t/discourse-rest-api-comprehensive-examples/274354/7 "2024-01-02T12:57:12Z")

</div>

Come sostituisco un articolo con informazioni aggiornate?

Attualmente, ricevo  
{“action”:“create\_post”,“errors”:[“Title has already been used”]}  
invece di un aggiornamento riuscito.

---

<div class="post-metadata">

### Author: ![Firepup650](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/firepup650/32/465200_2.png) [@Firepup650](https://meta.discourse.org/u/Firepup650)
#### Post date: [2 Gennaio 2024, 1:08pm UTC](https://meta.discourse.org/t/discourse-rest-api-comprehensive-examples/274354/8 "2024-01-02T13:08:06Z")

</div>

> [@CharlesBarouch](#):
>
> “action”:“create\_post”,

Non c’è un’azione diversa per aggiornare i post?

---

<div class="post-metadata">

### Author: ![CharlesBarouch](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/charlesbarouch/32/48050_2.png) [@CharlesBarouch](https://meta.discourse.org/u/CharlesBarouch)
#### Post date: [2 Gennaio 2024, 1:16pm UTC](https://meta.discourse.org/t/discourse-rest-api-comprehensive-examples/274354/9 "2024-01-02T13:16:59Z")

</div>

Questo è il testo della risposta. La richiesta curl non specifica un’azione.

curl -X POST “[http://LOCATION.local/posts.json](http://LOCATION.local/posts.json)” -H “Content-Type:  
application/json” -H “Api-Key: APIKEY” -H “Api-Username: BOB” -d "{"title": "PL AUTO.DOC.FUN SCS  
-TEST Autodoc","raw": " …

---

<div class="post-metadata">

### Author: ![Firepup650](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/firepup650/32/465200_2.png) [@Firepup650](https://meta.discourse.org/u/Firepup650)
#### Post date: [2 Gennaio 2024, 1:27pm UTC](https://meta.discourse.org/t/discourse-rest-api-comprehensive-examples/274354/10 "2024-01-02T13:27:56Z")

</div>

E se si utilizza l’endpoint per aggiornare un argomento?

> **[Discourse API Docs](https://docs.discourse.org/#tag/Topics/operation/updateTopic)**

O forse per aggiornare un post:

> **[Discourse API Docs](https://docs.discourse.org/#tag/Posts/operation/updatePost)**

---

<div class="post-metadata">

### Author: ![CharlesBarouch](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/charlesbarouch/32/48050_2.png) [@CharlesBarouch](https://meta.discourse.org/u/CharlesBarouch)
#### Post date: [2 Gennaio 2024, 1:37pm UTC](https://meta.discourse.org/t/discourse-rest-api-comprehensive-examples/274354/11 "2024-01-02T13:37:23Z")

</div>

Non l’avevo visto. Ben notato. Ci proverò. Grazie.

Aggiornamento: mi manca ancora qualcosa. Sembra che l’unica differenza sia l’aggiunta di un `edit_reason`. Ci ho provato e non ha fatto differenza.

Ecco l’intero curl:

curl -X POST “[http://localhost.local/posts.json](http://localhost.local/posts.json)” -H “Content-Type:  
application/json” -H “Api-Key: API KEY” -H “Api-Username: BOB” -d “{"title": "Title of the Article","raw": "The quick brown fox jumped over the lazy dog. **2023-12-26**.","edit\_reason": "auto","category": 66}”

% Total % Received % Xferd Average Speed Time Time Time Current  
Dload Upload Total Spent Left Speed  
100 1927 0 65 100 1862 1177 33729 --:–:-- --:–:-- --:–:-- 34481

{“action”:“create\_post”,“errors”:[“Title has already been used”]}

---

<div class="post-metadata">

### Author: ![Arkshine](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/arkshine/32/298682_2.png) [@Arkshine](https://meta.discourse.org/u/Arkshine)
#### Post date: [2 Gennaio 2024, 3:37pm UTC](https://meta.discourse.org/t/discourse-rest-api-comprehensive-examples/274354/12 "2024-01-02T15:37:23Z")

</div>

Per aggiornare un argomento o un post, dovresti usare il metodo `PUT`!

Come ha sottolineato Firepup, se desideri aggiornare il contenuto di un post, puoi utilizzare la seguente API: [Discourse API Docs](https://docs.discourse.org/#tag/Posts/operation/updatePost)

---

<div class="post-metadata">

### Author: ![CharlesBarouch](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/charlesbarouch/32/48050_2.png) [@CharlesBarouch](https://meta.discourse.org/u/CharlesBarouch)
#### Post date: [4 Gennaio 2024, 11:44am UTC](https://meta.discourse.org/t/discourse-rest-api-comprehensive-examples/274354/13 "2024-01-04T11:44:54Z")

</div>

Il problema è che PUT richiede l’ID# e io non li ho.  
Quando invio un POST per un nuovo argomento, raccolgo il # ma quel numero non sembra funzionare.  
Quando uso un browser per visualizzare un argomento, mostra un # diverso ma quel numero non sembra funzionare.

Ad esempio: ho generato un argomento e l’evento POST restituisce {“id”: **3244** ,…}  
L’URL per accedervi dice …test-pl-auto-doc-fun/ **2803**

Quindi, invio questo PUT:  
curl -X PUT “[http://LOCATION.local/posts.json/3244](http://LOCATION.local/posts.json/3244)” -H “Content-Type: application/json” -H “Api-Key: KEY” -H “Api-Username: system” -d  
“{"title": "Autodoc SCS-TEST PL AUTO.DOC.FUN","raw": "…","edit\_reason": "auto","category": 66}”

E ricevo indietro l’HTML per la Pagina non trovata.

---

<div class="post-metadata">

### Author: ![Arkshine](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/arkshine/32/298682_2.png) [@Arkshine](https://meta.discourse.org/u/Arkshine)
#### Post date: [4 Gennaio 2024, 12:45pm UTC](https://meta.discourse.org/t/discourse-rest-api-comprehensive-examples/274354/14 "2024-01-04T12:45:51Z")

</div>

> [@CharlesBarouch](#):
>
> /posts.json/3244

Dovrebbe essere `/posts/3244.json`.

L’`id` che ottieni da quella richiesta POST è l’ID del post (del primo post); è univoco tra tutti i post.

---

<div class="post-metadata">

### Author: ![Arkshine](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/arkshine/32/298682_2.png) [@Arkshine](https://meta.discourse.org/u/Arkshine)
#### Post date: [19 Agosto 2024, 12:49am UTC](https://meta.discourse.org/t/discourse-rest-api-comprehensive-examples/274354/15 "2024-08-19T00:49:52Z")

</div>

Entrambi i video nella guida sembrano restituire un 404.

---

<div class="post-metadata">

### Author: ![silvacarl](https://avatars.discourse-cdn.com/v4/letter/s/a3d4f5/32.png) [@silvacarl](https://meta.discourse.org/u/silvacarl)
#### Post date: [9 Ottobre 2024, 11:44pm UTC](https://meta.discourse.org/t/discourse-rest-api-comprehensive-examples/274354/16 "2024-10-09T23:44:29Z")

</div>

L’API può essere utilizzata per chiamare l’AI Helper?

---

<div class="post-metadata">

### Author: ![NateDhaliwal](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/natedhaliwal/32/313494_2.png) [@NateDhaliwal](https://meta.discourse.org/u/NateDhaliwal)
#### Post date: [10 Ottobre 2024, 7:31am UTC](https://meta.discourse.org/t/discourse-rest-api-comprehensive-examples/274354/17 "2024-10-10T07:31:11Z")

</div>

Non credo, perché [docs.discourse.org](http://docs.discourse.org) non lo menziona. Potrei sbagliarmi, però.

---

<div class="post-metadata">

### Author: ![Jagster](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jagster/32/192154_2.png) [@Jagster](https://meta.discourse.org/u/Jagster)
#### Post date: [10 Ottobre 2024, 7:40am UTC](https://meta.discourse.org/t/discourse-rest-api-comprehensive-examples/274354/18 "2024-10-10T07:40:09Z")

</div>

Perché l’AI helper dovrebbe essere utilizzato tramite API 🤔

---

<div class="post-metadata">

### Author: ![silvacarl](https://avatars.discourse-cdn.com/v4/letter/s/a3d4f5/32.png) [@silvacarl](https://meta.discourse.org/u/silvacarl)
#### Post date: [10 Ottobre 2024, 3:23pm UTC](https://meta.discourse.org/t/discourse-rest-api-comprehensive-examples/274354/19 "2024-10-10T15:23:32Z")

</div>

per costruire un bot collegato al mio sito web che sia collegato al mio forum con sette anni di conoscenza al suo interno per rispondere alle domande.  
o per costruire un bot in grado di rispondere alle email che sia collegato al mio forum con sette anni di conoscenza al suo interno per rispondere alle domande.

---

<div class="post-metadata">

### Author: ![Moin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/moin/32/554653_2.png) [@Moin](https://meta.discourse.org/u/Moin)
#### Post date: [10 Ottobre 2024, 3:29pm UTC](https://meta.discourse.org/t/discourse-rest-api-comprehensive-examples/274354/20 "2024-10-10T15:29:32Z")

</div>

Allora probabilmente #ai-bot è più quello che stai cercando. #ai-helper è quello che aiuta durante la lettura e la scrittura dei post.

> [@NateDhaliwal](#):
>
> Non credo, perché [docs.discourse.org](http://docs.discourse.org) non lo menziona.

Come dice la nota, non si tratta di un elenco completo.

> Nota: Per qualsiasi endpoint non elencato, puoi seguire la guida [reverse engineer the Discourse API](https://meta.discourse.org/t/-/20576) per capire come utilizzare un endpoint API.

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [10 Ottobre 2024, 3:47pm UTC](https://meta.discourse.org/t/discourse-rest-api-comprehensive-examples/274354/21 "2024-10-10T15:47:21Z")

</div>

Puoi fare tutto ciò che puoi fare dall’UX tramite l’API. [Ingegnerizza al contrario l’API di Discourse](https://meta.discourse.org/t/reverse-engineer-the-discourse-api/20576)

> [@NateDhaliwal](#):
>
> Non credo, perché [docs.discourse.org](http://docs.discourse.org) non lo menziona. Potrei sbagliarmi, però.

Le cose vengono aggiunte e modificate nell’API continuamente. Trovo più facile vedere sempre cosa sta succedendo nel browser.

---

<div class="post-metadata">

### Author: ![silvacarl](https://avatars.discourse-cdn.com/v4/letter/s/a3d4f5/32.png) [@silvacarl](https://meta.discourse.org/u/silvacarl)
#### Post date: [10 Ottobre 2024, 4:01pm UTC](https://meta.discourse.org/t/discourse-rest-api-comprehensive-examples/274354/22 "2024-10-10T16:01:34Z")

</div>

ottima idea grazie!

[Pagina seguente](https://meta.discourse.org/t/discourse-rest-api-comprehensive-examples/274354.md?page=2)
