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.