Esempio API Data Explorer PHP

Sto lavorando per estrarre dati da Discourse utilizzando PHP e l’API Data Explorer. Ecco lo scheletro del mio codice PHP come punto di partenza per altri.

Codice PHP

<?php
// Imposta la chiave API
$api_key = '<la tua chiave va qui>';
//
// 1. $url deve essere impostato sull'URL del tuo forum Discourse
// 2. Ottieni il numero della query che vuoi eseguire. Aggiorna l'URL per quella query
//    es. query #5 => .../queries/5/run
//    es. query #47 => .../queries/47/run
$url = 'https://discourse.com/admin/plugins/explorer/queries/7/run';
//
// Aggiorna i tuoi parametri da passare alla query.
// Esempio per un parametro - codificato in modo fisso
// $data = 'params={"user":"fred_smith"}';   
// Esempio per un parametro - passaggio di una variabile
// $data = 'params={"user":"'.$user.'"}';   
// Esempio per due o più parametri - passaggio di una variabile
$data = 'params={"user":"'.$user.'","term":"'.$term.'"}';   
//
// Comandi Curl
//
$headers = array("Content-Type: multipart/form-data;", "Api-Key: $api_key", "Api-Username: system",);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers );
curl_setopt($ch, CURLOPT_POSTFIELDS,$data);

$result = curl_exec( $ch );
if ( curl_errno( $ch ) !== 0 ) {
   // Gestisci l'errore, chiama curl_close( $ch ) e ritorna.
}
curl_close( $ch );
//
// Converti il risultato di curl in un array php per lavorarci programmaticamente
$result_array = json_decode( $result,true);

print($result_array);

?>

Query Data Explorer

Nell’esempio di codice che utilizza due variabili passate, il mio codice Data Explorer era simile a questo:

--[params]
-- string :term
-- string :user

SELECT users.username, posts.id, uploads.url, topics.title
     FROM upload_references
     JOIN uploads ON uploads.id = upload_references.upload_id
     JOIN posts   ON posts.id   = upload_references.target_id
     JOIN topics  ON topics.id  = posts.topic_id
     JOIN users   ON posts.user_id = users.id
    WHERE (posts.cooked like '%' || :term || '%' 
       OR topics.title like '%' || :term || '%') 
      AND users.username_lower like '%' || :user || '%'
      AND topics.archetype = 'regular'
 ORDER BY uploads.created_at DESC
 limit 10

Spero che questo aiuti qualcuno ad avviare un progetto.

3 Mi Piace

Mi consiglierei di tagliare la maggior parte dei commenti per renderlo più facile da leggere :slight_smile:
Alcuni commenti sono superflui, come:

// Ottieni risultato
//
$result = curl_exec( $ch );

o

// chiudi la sessione curl
curl_close( $ch );

Inoltre, sappi che puoi impostare l’evidenziazione della sintassi aggiungendo il nome della lingua alla prima riga dei backtick:

```php
$headers = array("Content-Type: multipart/form-data;","Api-Key: $api_key","Api-Username: system",);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers );
curl_setopt($ch, CURLOPT_POSTFIELDS,$data);
```

Renderizzato come

$headers = array("Content-Type: multipart/form-data;","Api-Key: $api_key","Api-Username: system",);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers );
curl_setopt($ch, CURLOPT_POSTFIELDS,$data);

Grazie per il feedback. Ho aggiornato i post iniziali.