API ユーザーをメールでフィルタリング、セカンダリメールを含む

こんにちは。

別のアプリから提供されたメールアドレスのリストにあるユーザーを照合し、それらすべてのユーザーを1つのグループに追加して、リストに含まれていないメンバーを削除したいと思います。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

そして、次の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})  # はい、3つのパラメータがあり、それぞれが異なるものを表しています。優れたハッキングの実践です!
username=response["rows"]
「いいね!」 1

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