PHP - Пример использования API Data Explorer

Я работаю над извлечением данных из Discourse с помощью PHP и API Data Explorer. Ниже представлен каркас моего PHP-кода, который может служить отправной точкой для других.

PHP-код

<?php
// Установите ключ API
$api_key = '<ваш ключ здесь>';
//
// 1. $url должен быть установлен в URL вашего форума Discourse
// 2. Получите номер запроса, который хотите выполнить. Обновите URL для этого запроса
//    например, запрос #5 = > .../queries/5/run
//    например, запрос #47 = > .../queries/47/run
$url = 'https://discourse.com/admin/plugins/explorer/queries/7/run';
//
// Обновите свои параметры, передаваемые в запрос.
//  Пример для одного параметра — жестко заданный
//  $data = 'params={"user":"fred_smith"}';   
//  Пример для одного параметра — передача переменной
//  $data = 'params={"user":"'.$user.'"}';   
//  Пример для двух и более параметров — передача переменной
$data = 'params={"user":"'.$user.'","term":"'.$term.'"}';   
//
// Команды 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 ) {
   // Обработайте ошибку, вызовите curl_close( $ch ) и вернитесь.
}
curl_close( $ch );
//
// Преобразуйте результат curl в массив PHP для программной обработки
$result_array = json_decode( $result,true);

print($result_array);

?>

Запрос Data Explorer

В примере кода с двумя переданными переменными мой код Data Explorer выглядел так:

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

Надеюсь, это поможет кому-то начать проект.

Я бы убрал большинство комментариев, чтобы код было легче читать :slight_smile:
Некоторые комментарии излишни, например:

// Получить результат
//
$result = curl_exec( $ch );

или

// закрыть сессию curl
curl_close( $ch );

Также знайте, что вы можете включить подсветку синтаксиса, добавив название языка к первой строке с обратными кавычками:

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

Отобразится как

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

Спасибо за обратную связь. Я обновил исходные посты.