API Benutzer nach E-Mails filtern, einschließlich sekundärer E-Mails

Hallo,

Ich möchte Benutzer aus einer Liste von E-Mail-Adressen, die von einer anderen App stammen, abgleichen, um alle Benutzer zu einer Gruppe hinzuzufügen und Mitglieder zu entfernen, die nicht in der Liste enthalten sind. Ich habe ein Skript, das dies über die API erledigt.

Der Entfernungs-Teil ist einfach. Für jedes Mitglied extrahiere ich alle seine E-Mails mit:
get(/u/{username}/emails.json)
und ich versuche, jede einzelne gegen die Liste abzugleichen. Wenn keine vorhanden ist, wird das Mitglied ausgeschlossen.

Der Einschluss-Teil ist kniffliger. Für jede E-Mail-Adresse möchte ich sehen, ob es einen Benutzer mit dieser Adresse gibt. Wenn ja, füge ich ihn zur Gruppe hinzu. Wenn nicht, möchte ich keine Einladung senden. Ich verwende den Befehl:
get(/admin/users/list/all.json?email={email})
aber dieser Befehl gibt eine Liste von Benutzern zurück, die diese Adresse als primäre Adresse haben, und nicht diejenigen, die diese Adresse als sekundäre, unbestätigte E-Mails oder verknüpfte Konten haben. Gibt es eine Möglichkeit, von allen möglichen E-Mail-Adressen aus zu filtern, oder sollte ich die Liste aller Benutzer exportieren und dies manuell extern tun? Ich würde es lieber intern erledigen, damit weniger Datenlecks entstehen.

Danke!

Hallo, willkommen zurück! :wave:

Das Data Explorer Plugin ist möglicherweise für Ihren Anwendungsfall geeignet.

Sie können es als API verwenden und Ihre Abfrage basierend auf anfänglichen Eingaben erstellen.

2 „Gefällt mir“

Danke.
Ich habe es mit diesem Plugin geschafft, indem ich diese Abfrage verwendet habe:

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

Und sie mit dem Python-Skript aufrufen:

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})  # Ja, es gibt 3 Parameter, die jeweils etwas anderes darstellen. Gute Hacking-Praxis!
username=response["rows"]
1 „Gefällt mir“

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