本指南说明如何使用 Discourse API 通过 Data Explorer 插件创建、运行和管理查询。
所需用户级别:管理员
通过 Discourse 用户界面可以执行的几乎任何操作也可以通过 Discourse API 触发。
本文档全面概述了如何结合使用 API 和 Data Explorer 插件。
有关如何查找操作所需 API 请求的常规概述,请参阅:Reverse engineer the Discourse API 。
运行 Data Explorer 查询
要通过 API 运行 Data Explorer 查询,请向 /admin/plugins/discourse-data-explorer/queries/<query-id>/run 发出 POST 请求。您可以通过在 Discourse 站点上访问查询并在地址栏中查看 id 参数来找到查询 ID。
下面是一个 ID 为 20 的示例查询,它会返回在指定日期按浏览量排序的主题:
--[params]
-- date :viewed_at
SELECT
topic_id,
COUNT(1) AS views_for_date
FROM topic_views
WHERE viewed_at = :viewed_at
GROUP BY topic_id
ORDER BY views_for_date DESC
可以使用以下命令从终端运行此查询:
curl -X POST "https://your-site-url/admin/plugins/discourse-data-explorer/queries/20/run" \
-H "Content-Type: multipart/form-data;" \
-H "Api-Key: <api-key>" \
-H "Api-Username: system" \
-F 'params={"viewed_at":"2019-06-10"}'
请注意,您需要将 <api-key> 和 <your-site-url> 替换为您自己的 API 密钥和域名。
处理大型数据集
默认情况下,Data Explorer 插件将 JSON 结果限制为 1000 行(由隐藏的 data_explorer_query_result_limit 站点设置控制)。您可以通过传递 limit 参数来覆盖此设置,最大可达 10,000:
curl -X POST "https://your-site-url/admin/plugins/discourse-data-explorer/queries/20/run" \
-H "Content-Type: multipart/form-data;" \
-H "Api-Key: <api-key>" \
-H "Api-Username: system" \
-F "limit=5000"
对于超过 10,000 行的数据集,您需要在 SQL 级别进行分页。您可以使用下面的示例查询:
--[params]
-- integer :limit = 100
-- integer :page = 0
SELECT *
FROM generate_series(1, 10000)
OFFSET :page * :limit
LIMIT :limit
要逐页获取结果,请在请求中递增 page 参数:
curl -X POST "https://your-site-url/admin/plugins/discourse-data-explorer/queries/27/run" \
-H "Content-Type: multipart/form-data;" \
-H "Api-Key: <api-key>" \
-H "Api-Username: system" \
-F 'params={"page":"0"}'
当 result_count 为零时停止。
有关处理大型数据集的更多信息,请参阅:结果限制和导出查询
从结果中移除 relations 数据
当通过用户界面运行 Data Explorer 查询时,结果中会添加一个 relations 对象。此数据用于在 UI 结果中渲染用户,但当通过 API 运行查询时,您很可能不需要它。
要从结果中删除该数据,请在请求中添加 download=true 参数:
curl -X POST "https://your-site-url/admin/plugins/discourse-data-explorer/queries/27/run" \
-H "Content-Type: multipart/form-data;" \
-H "Api-Key: <api-key>" \
-H "Api-Username: system" \
-F 'params={"page":"0"}' \
-F "download=true"
API 身份验证
有关生成 API 密钥以用于请求的详细信息,请参阅:Create and configure an API key 。
如果 API 密钥仅用于运行 Data Explorer 查询,您可以从“作用域”下拉菜单中选择“粒度 (Granular)”,然后选择“运行查询 (run queries)”作用域。
常见问题解答 (FAQs)
我可以使用任何 api 端点来获取报告列表和 ID 号码吗?我想用列表来构建一个下拉菜单?
是的,您可以向 /admin/plugins/discourse-data-explorer/queries.json 发出经过身份验证的 GET 请求,以获取站点上所有查询的列表。
可以通过 api 创建查询吗?
可以。有关如何执行此操作的文档位于 Create a Data Explorer query using the API
可以将参数与 post 请求一起发送吗?
可以。使用 -F 选项包含 SQL 参数,如示例所示。
API 支持查询的 CSV 导出吗?
是的。在运行终结点 URL 后面附加 .csv 即可获得 CSV 格式的结果:
curl -X POST "https://your-site-url/admin/plugins/discourse-data-explorer/queries/20/run.csv" \
-H "Api-Key: <api-key>" \
-H "Api-Username: system" \
-F 'params={"viewed_at":"2019-06-10"}'
CSV 响应默认返回多达 10,000 行。您可以传递一个 limit 参数来减少此数量。

