Exemple d'API Data Explorer en PHP

Je travaille à extraire des données de Discourse en utilisant PHP et l’API Data Explorer. Voici le squelette de mon code PHP pour que d’autres puissent s’en servir comme point de départ.

Code PHP

<?php
// Définir la clé API
$api_key = '<votre clé ici>';
//
// 1. $url doit être défini sur l'URL de votre forum Discourse
// 2. Obtenez le # de requête que vous souhaitez exécuter. Mettez à jour l'URL pour cette requête
//    c'est-à-dire requête #5 => .../queries/5/run
//    c'est-à-dire requête #47 => .../queries/47/run
$url = 'https://discourse.com/admin/plugins/explorer/queries/7/run';
//
// Mettez à jour vos paramètres pour les passer à la requête.
//  Exemple pour un paramètre - codé en dur
//  $data = 'params={"user":"fred_smith"}';
//  Exemple pour un paramètre - passage d'une variable
//  $data = 'params={"user":"'.$user.'"}';
//  Exemple pour deux paramètres ou plus - passage d'une variable
$data = 'params={"user":"'.$user.'","term":"'.$term.'"}';
//
// Commandes 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) {
   // Gérer l'erreur, appeler curl_close($ch) et retourner.
}
curl_close($ch);
//
// Convertir le résultat curl en un tableau php pour travailler programmatiquement
$result_array = json_decode($result, true);

print($result_array);

?>

Requête Data Explorer

Dans l’exemple de code utilisant deux variables passées, mon code data explore ressemblait à ceci :

--[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

J’espère que cela aidera quelqu’un à démarrer un projet.

3 « J'aime »

Je supprimerais la plupart des commentaires pour faciliter la lecture :slight_smile:
Certains commentaires sont inutiles, comme :

// Obtenir le résultat
//
$result = curl_exec( $ch );

ou

// fermer la session curl
curl_close( $ch );

Sachez également que vous pouvez définir la coloration syntaxique en ajoutant le nom de la langue à la première ligne des backticks :

```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);
```

Rendu comme

$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);

Merci pour vos commentaires. J’ai mis à jour les publications initiales.