API Filtra utenti per email, incluse email secondarie

Ciao,

Vorrei associare utenti da un elenco di indirizzi email provenienti da un’altra app, al fine di aggiungere tutti gli utenti a un gruppo e rimuovere i membri che non sono nell’elenco. Ho uno script che fa questo dall’API.

La parte di rimozione è facile. Per ogni membro, estraggo tutte le loro email con:
get(/u/{username}/emails.json)
e provo ad associare ciascuna all’elenco. Se non ce n’è nessuna, il membro viene escluso.

Quella di inclusione è più complicata. Per ogni indirizzo email, voglio vedere se c’è un utente con quell’indirizzo. Se c’è, lo aggiungo al gruppo. Se non c’è, non voglio inviare un invito. Uso il comando:
get(/admin/users/list/all.json?email={email})
ma questo comando restituisce un elenco di utenti con quell’indirizzo come primario, non quelli con quell’indirizzo come secondario, né unconfirmed_emails, né associated_accounts. C’è un modo per filtrare da tutti i possibili indirizzi email, o dovrei esportare l’elenco di tutti gli utenti e farlo manualmente esternamente? Preferirei farlo internamente in modo che ci siano meno rischi di fughe di dati.

Grazie!

Ciao, bentornato! :wave:

Il plugin Data Explorer potrebbe essere adatto al tuo caso d’uso.

Puoi usarlo come API e creare la tua query in base agli input iniziali.

2 Mi Piace

Grazie.
Sono riuscito a farlo con questo plugin, usando questa query:

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

E chiamandolo con lo script 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ì, ci sono 3 parametri, ognuno dei quali rappresenta qualcosa di diverso. Buona pratica di hacking!
username=response["rows"]
1 Mi Piace

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