Как запросить API topics_with_no_response.json с фильтрами

Я знаю, что для каждого отчета администратора существует .json API для получения данных. Меня интересует отчет topics_with_no_response, и я смог отфильтровать его по категории через https://xxx.com/admin/reports/topics_with_no_response?end_date=2023-06-16&filters=%7B%22category%22%3A7%2C%22include_subcategories%22%3Atrue%7D&mode=table&start_date=2023-06-14. Однако, если я переключаюсь на JSON-эндпоинт через https://xxx.com/admin/reports/topics_with_no_response.json?end_date=2023-06-16&filters=%7B%22category%22%3A7%2C%22include_subcategories%22%3Atrue%7D&mode=table&start_date=2023-06-14, данные не возвращаются.

Используется ли разный синтаксис для запросов к этим двум эндпоинтам?

По какой-то странной причине вам нужно использовать POST вместо GET.

Привет @RGJ,

Можешь привести пример POST-запроса? Что должно быть в теле запроса? Я попробовал просто заменить GET на POST с тем же URL, но, похоже, это не работает.

Очевидно, что вам нужно передать параметры запроса (то есть всё, что идёт после ?) в качестве данных POST.

См. также Run Data Explorer queries with the Discourse API

Когда я переключился на POST и передал все параметры запроса в теле POST-запроса, получил ошибку “Страница не найдена”. Однако мне удалось использовать POST для выполнения запросов в Data Explorer. Есть какие-то идеи? Спасибо!

Посмотрите статью Обратная разработка API Discourse. Когда я пытаюсь применить этот подход для отчёта «Темы без ответов», я вижу, что делаются GET-запросы, подобные следующим:

http://forum.example.com/admin/reports/bulk?reports%5Btopics_with_no_response%5D%5Bfacets%5D%5B%5D=prev_period&reports%5Btopics_with_no_response%5D%5Bstart_date%5D=2022-02-01&reports%5Btopics_with_no_response%5D%5Bend_date%5D=2023-06-17&reports%5Btopics_with_no_response%5D%5Blimit%5D=50

Кодированные параметры запроса можно получить во вкладке «Сеть» (Network) в инструментах разработчика вашего браузера. С этим URL вы сможете выполнить что-то вроде:

curl -X GET "http://localhost:4200/admin/reports/bulk.json?reports%5Btopics_with_no_response%5D%5Bfacets%5D%5B%5D=prev_period&reports%5Btopics_with_no_response%5D%5Bstart_date%5D=2022-05-16&reports%5Btopics_with_no_response%5D%5Bend_date%5D=2022-09-10&reports%5Btopics_with_no_response%5D%5Blimit%5D=50" \
-H "Api-Key: $api_key" \
-H "Api-Username: system"

Вам нужно установить api_key в значение глобального API-ключа для всех пользователей — я не думаю, что существует какая-то конкретная область доступа (scope), подходящая для отчётов.

Обратите внимание, что к URL необходимо добавлять расширение json (http://localhost:4200/admin/reports/bulk.json).

Спасибо @simon, это работает!!