Filtro de API para usuarios por correos electrónicos, incluyendo correos secundarios

Hola,

Me gustaría hacer coincidir usuarios de una lista de direcciones de correo electrónico provenientes de otra aplicación, para poder añadir todos los usuarios a un grupo y eliminar miembros que no estén en la lista. Tengo un script que hace eso desde la API.

La parte de eliminación es fácil. Para cada miembro, extraigo todos sus correos electrónicos con:
get(/u/{username}/emails.json)
y trato de hacer coincidir cada uno contra la lista. Si no hay ninguno, el miembro es excluido.

La parte de inclusión es más complicada. Para cada dirección de correo electrónico, quiero ver si hay un usuario con esa dirección. Si lo hay, lo añado al grupo. Si no lo hay, no quiero enviar una invitación. Utilizo el comando:
get(/admin/users/list/all.json?email={email})
pero este comando devuelve una lista de usuarios con esa dirección como principal, y no los que tienen esa dirección como secundaria, ni unconfirmed_emails, ni associated_accounts. ¿Hay alguna forma de filtrar por todas las posibles direcciones de correo electrónico, o debería exportar la lista de todos los usuarios y hacerlo manualmente externamente? Preferiría hacerlo internamente para que haya menos riesgos de fugas de datos.

¡Gracias!

Hola, ¡bienvenido de nuevo! :wave:

El plugin Data Explorer podría ser adecuado para tu caso de uso.

Puedes usarlo como una API y crear tu consulta basándote en las entradas iniciales.

2 Me gusta

Gracias.
Logré hacerlo con este plugin, usando esta consulta:

--[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

Y llamándolo con el script de 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})  # Sí, hay 3 params, cada uno representando algo diferente. ¡Buenas prácticas de hacking!
username=response["rows"]
1 me gusta

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