filtersでtopics_with_no_response.json APIをクエリする方法

管理レポートごとに、データを取得するための.json APIがあることは承知しています。私が関心のあるレポートはtopics_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。しかし、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経由でJSONエンドポイントに切り替えても、データが返されません。

これらの2つのエンドポイントをクエリするために、異なる構文を使用していますか?

なぜか GET ではなく POST を使用する必要があります。

RGJさん、こんにちは。

POSTリクエストの例を教えていただけますか?ボディは何を入れるべきでしょうか?GETを同じURLでPOSTに変更してみましたが、うまくいかないようです。

POST データとしてクエリパラメータ(つまり ? の後のすべて)を渡す必要があることは明らかです。

関連項目 Run Data Explorer queries with the Discourse API

POST に切り替えて、すべてのクエリ パラメータを POST データとして渡すと、「ページが見つかりません」というエラーが発生しました。ただし、POST を使用してデータ エクスプローラー クエリを実行することはできました。何か考えはありますか?よろしくお願いします!

Reverse engineer the Discourse API を確認してください。Topics With no Response レポートでそのアプローチを試したところ、次のような 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 は、All Users Global API キーに設定する必要があります。レポートに使用できる特定のスコープはないと思われます。

URL に json 拡張子を追加する必要があることに注意してください (http://localhost:4200/admin/reports/bulk.json)。

「いいね!」 1

@simonさん、ありがとうございます。うまくいきました!

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.