こんにちは、チームの皆さん
/polls/voters.json への GET リクエストで問題が発生しています(各オプションに投票したすべてのユーザー名または ID が必要です)。
Discourse は常に次のエラーを返します。
{
“errors”: [
“リクエストに無効なパラメータが指定されました: poll_name”
],
“error_type”: “invalid_parameters”
}
vote および unvote エンドポイントは正常に動作するため、post_id と poll_name は問題ありません。このエンドポイントだけがうまくいきません 
ganncamp
(G Ann Campbell)
3
どうでもいい質問かもしれませんが、投票自体に「エクスポート」ボタンが表示されていませんか?
エクスポートを実行すると、API呼び出し(ブラウザの開発者ツール経由)が表示されるはずです…
「いいね!」 6
@ganncampさん、エクスポートボタンが見当たりません。サーバーから設定する必要があるのでしょうか?それに関する設定は見つかりませんでした。
この情報を返すはずのエンドポイントを見つけましたが、機能していません - https://github.com/discourse/discourse/blob/main/plugins/poll/app/controllers/polls_controller.rb#L46
Falco
(Falco)
7
エクスポートボタンは、Discourse Data Explorer プラグインがインストールされて機能している場合に表示されます。将来的にはこのプラグインを切り離す予定ですが、現時点では依存関係があります。
「いいね!」 8
皆さん、ご協力ありがとうございました!そのプラグインはインストールしたくありません。おそらく、投票と投票解除などで回避策を見つけられると思います 
エクスポートボタンをリバースエンジニアリングして投票結果を取得しようとしていますが、常に422応答が返ってきます。
url
'https://forum.example.com/admin/plugins/explorer/queries/-16/run.csv'
params
{'post_id': 82022, 'poll_name': 'poll2'}
headers
{'Api-Key': 'redacted', 'Api-Username': 'discobot'}
requests.post(url, params=params, headers=headers)
422
クエリ16は組み込みの投票レポートです。管理者がこのクエリにアクセスできるようにしました。@discobotは管理者です。

このユーザー名とAPIキーは、他のすべてのクエリで機能します。これは私の唯一のData Explorerベースのクエリです(これは非常に強力なツールになるようです)。
エクスポートされた投票が取得するものと同じものを取得する、動作するソリューションを次に示します。
import requests
from io import StringIO
import csv
from urllib.parse import urlencode
def get_discourse_poll_results(post_id, poll_name):
"""
Data Explorer のクエリ 16 を使用して Discourse から投票結果を取得します。
このクエリは、投票結果を CSV 形式で返します。
"""
url = f"{DISCOURSE_URL}/admin/plugins/explorer/queries/-16/run.csv"
payload = {
"params": f'{{"poll_name":"{poll_name}","post_id":"{post_id}"}}',
"explain": "false",
"limit": "1000000",
"download": "1",
}
headers = {
"Api-Key": DISCOURSE_API_KEY,
"Api-Username": DISCOURSE_API_USERNAME,
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
"X-Requested-With": "XMLHttpRequest"
}
try:
response = requests.post(url, data=urlencode(payload), headers=headers)
response.raise_for_status()
csv_data = StringIO(response.text)
reader = csv.reader(csv_data)
results = list(reader)
processed_results = process_poll_results(results)
reformatted_results = reformat_rating_poll(processed_results)
return reformatted_results
except requests.exceptions.RequestException as e:
print(f"投票結果の取得中にエラーが発生しました: {e}")
print(f"レスポンステキスト: {response.text}")
return None
「いいね!」 2