팀 여러분께,
GET /polls/voters.json 요청에서 문제가 발생하고 있습니다. (각 옵션에 투표한 모든 userName 또는 ID가 필요합니다.)
Discourse는 항상 다음 오류를 반환합니다:
{
“errors”: [
“You supplied invalid parameters to the request: poll_name”
],
“error_type”: “invalid_parameters”
}
vote 및 unvote 엔드포인트가 정상적으로 작동하므로 post_id와 poll_name은 문제없는 것으로 보입니다. 이 엔드포인트에서만 문제가 발생합니다. 
ganncamp
(G Ann Campbell)
3
바보 같은 질문일지도 모르지만, 투표 자체에 ‘내보내기’ 버튼이 보이지 않나요?
내보내기를 실행하면 브라우저의 개발자 도구를 통해 API 호출을 확인할 수 있을 텐데요…
@ganncamp님, 안녕하세요. 내보내기 버튼을 찾을 수 없습니다. 서버에서 설정해야 하는 건가요? 관련 설정을 찾지 못했습니다.
이 정보를 반환해야 할 엔드포인트를 찾았지만 작동하지 않습니다 - https://github.com/discourse/discourse/blob/main/plugins/poll/app/controllers/polls_controller.rb#L46
ganncamp
(G Ann Campbell)
6
"세부 내역 보기"를 클릭하면 어떤 결과가 나와요?
Falco
(Falco)
7
내보내기 버튼은 Discourse Data Explorer 플러그인이 설치되어 정상적으로 작동할 때 표시됩니다. 궁극적으로 이 플러그인을 분리할 계획이 있지만, 현재로서는 의존성이 존재합니다.
도와주셔서 감사합니다! 그 플러그인을 설치하고 싶지 않습니다. 투표와 투표 취소 같은 방식으로 우회할 방법을 찾아볼 수도 있겠네요 
Export 버튼을 역공학하여 투표 결과를 가져오려 하고 있지만, 항상 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 기반 쿼리입니다(참고로, 정말 강력한 도구인 것 같습니다).
Export poll에서 가져오는 내용을 얻기 위한 작동하는 해결책입니다.
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"Error retrieving poll results: {e}")
print(f"Response text: {response.text}")
return None