API로 이메일(보조 이메일 포함) 기준으로 사용자 필터링

안녕하세요,

다른 앱에서 가져온 이메일 주소 목록을 기준으로 사용자를 매칭하여 모든 사용자를 하나의 그룹에 추가하고, 목록에 없는 멤버를 제거하려고 합니다. 이를 위해 API를 사용하는 스크립트를 작성해 두었습니다.

멤버 제거 부분은 쉽습니다. 각 멤버에 대해 다음 명령으로 모든 이메일 주소를 추출합니다:
get(/u/{username}/emails.json)
그리고 목록과 각각의 이메일을 비교합니다. 일치하는 항목이 없으면 해당 멤버는 제외됩니다.

추가하는 부분은 더 복잡합니다. 각 이메일 주소에 대해 해당 주소를 가진 사용자가 있는지 확인하고, 있으면 그룹에 추가하며, 없으면 초대장을 보내지 않으려고 합니다. 다음 명령을 사용했습니다:
get(/admin/users/list/all.json?email={email})
하지만 이 명령은 해당 주소를 기본 이메일로 가진 사용자 목록만 반환할 뿐, 보조 이메일(secondary), 미확인 이메일(unconfirmed_emails) 또는 *연결된 계정(associated_accounts)*으로 해당 주소를 가진 사용자는 반환하지 않습니다. 모든 가능한 이메일 주소를 기준으로 필터링하는 방법이 있을까요, 아니면 전체 사용자 목록을 내보내서 외부에서 수동으로 처리해야 하나요? 데이터 유출 위험을 줄이려면 내부에서 처리하는 것이 더 좋겠습니다.

감사합니다!

안녕하세요, 다시 오신 것을 환영합니다! :wave:

Data Explorer 플러그인이 사용 사례에 적합할 수 있습니다.

이를 API로 사용하여 초기 입력을 기반으로 쿼리를 생성할 수 있습니다.

감사합니다.
이 플러그인을 사용하여 다음 쿼리를 실행하여 문제를 해결했습니다:

--[params]
-- string :q_email

SELECT u.username FROM users u JOIN user_emails e ON u.id=e.user_id WHERE e.email = :q_email

그리고 파이썬 스크립트에서 다음과 같이 호출했습니다:

import pydiscourse
client = DiscourseClient('https://forum.com', api_username='system', api_key='1234')
params = '{"q_email":"' + str(email) + '"}'
response = client._request('POST', '/admin/plugins/explorer/queries/{number}/run', params={"params":params})  # 네, 3개의 params가 각각 다른 의미를 가집니다. 좋은 해킹 습관입니다!
username=response["rows"]