API Фильтрация пользователей по электронным почтам, включая вторичные адреса

Здравствуйте,

Я хочу сопоставить пользователей из списка адресов электронной почты, полученных из другого приложения, чтобы добавить всех этих пользователей в одну группу и удалить тех, кто в списке отсутствует. У меня есть скрипт, который выполняет эту задачу через API.

Часть с удалением проста. Для каждого участника я извлекаю все его адреса электронной почты с помощью:
get(/u/{username}/emails.json)
и пытаюсь сопоставить каждый из них со списком. Если совпадений нет, участник исключается.

Часть с добавлением сложнее. Для каждого адреса электронной почты я хочу проверить, существует ли пользователь с таким адресом. Если да, я добавляю его в группу. Если нет, я не хочу отправлять приглашение. Я использую команду:
get(/admin/users/list/all.json?email={email})
но эта команда возвращает список пользователей, у которых этот адрес указан как основной, а не те, у кого он указан как вторичный, или в неподтверждённых адресах, или в связанных аккаунтах. Есть ли способ отфильтровать все возможные адреса электронной почты, или мне следует экспортировать список всех пользователей и выполнить это вручную во внешней системе? Я предпочёл бы сделать это внутренне, чтобы снизить риск утечки данных.

Спасибо!

Здравствуйте, добро пожаловать обратно! :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

И вызывая его через Python-скрипт:

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})  # Да, здесь три параметра, каждый из которых отвечает за что-то своё. Отличная практика взлома!
username=response["rows"]