PHP - Data Explorer API 示例

我正在使用 PHP 和 Data Explorer API 从 Discourse 中提取数据。以下是我的 PHP 代码的骨架,供其他人作为起点。

PHP 代码

<?php
// 设置 API 密钥
$api_key = '<your key goes here>';
//
// 1. $url 应设置为您的 Discourse 论坛 URL
// 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 查询

在上面使用两个传递变量的代码示例中,我的数据探索代码如下所示:

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

希望这对某人启动项目有所帮助。

3 个赞

我会删除大部分注释,使其更易于阅读 :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);

感谢您的反馈。我已更新初始帖子。