API: تصفية المستخدمين حسب البريد الإلكتروني، بما في ذلك البريد الإلكتروني الثانوي

مرحباً،

أود مطابقة المستخدمين من قائمة عناوين البريد الإلكتروني القادمة من تطبيق آخر، وذلك لإضافة جميع المستخدمين إلى مجموعة واحدة، وإزالة الأعضاء الذين ليسوا في القائمة. لدي نص برمجي يقوم بذلك من خلال واجهة برمجة التطبيقات (API).

جزء الإزالة سهل. لكل عضو، أستخرج جميع رسائل البريد الإلكتروني الخاصة به باستخدام:
get(/u/{username}/emails.json)
وأحاول مطابقة كل منها مع القائمة. إذا لم يكن هناك تطابق، يتم استبعاد العضو.

الجزء الخاص بالإضافة أكثر صعوبة. لكل عنوان بريد إلكتروني، أريد معرفة ما إذا كان هناك مستخدم بهذا العنوان. إذا كان موجودًا، أضيفه إلى المجموعة. إذا لم يكن موجودًا، لا أريد إرسال دعوة. أستخدم الأمر:
get(/admin/users/list/all.json?email={email})
لكن هذا الأمر يُرجع قائمة بالمستخدمين الذين لديهم هذا العنوان كعنوان أساسي، وليس أولئك الذين لديهم هذا العنوان كعنوان ثانوي، أو unconfirmed_emails، أو associated_accounts. هل هناك طريقة للتصفية من جميع عناوين البريد الإلكتروني الممكنة، أم يجب عليّ تصدير قائمة بجميع المستخدمين والقيام بذلك يدويًا خارجيًا؟ أفضل القيام بذلك داخليًا حتى تكون هناك مخاطر أقل لتسرب البيانات.

شكرًا!

مرحباً، أهلاً بعودتك! :wave:
قد يكون المكون الإضافي Data Explorer مناسبًا لحالتك.

يمكنك استخدامه كواجهة برمجة تطبيقات (API) وإنشاء استعلامك بناءً على المدخلات الأولية.

إعجابَين (2)

شكرا لك.
تمكنت من القيام بذلك باستخدام هذا المكون الإضافي، باستخدام هذا الاستعلام:

--[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 معلمات، كل منها يمثل شيئًا مختلفًا. ممارسة قرصنة جيدة!
username=response["rows"]
إعجاب واحد (1)

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