# API 按邮箱筛选用户，包含辅助邮箱

**URL:** https://meta.discourse.org/t/api-filter-users-by-emails-including-secondary-emails/296910
**Category:** Development
**Tags:** rest-api
**Created:** [2024年二月27日 15:03 UTC](https://meta.discourse.org/t/api-filter-users-by-emails-including-secondary-emails/296910 "2024-02-27T15:03:20Z")
**Posts on this page:** 4
**Page:** 1

<div class="post-metadata">

### Author: ![oca](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/oca/32/156060_2.png) [@oca](https://meta.discourse.org/u/oca)
#### Post date: [2024年二月27日 15:03 UTC](https://meta.discourse.org/t/api-filter-users-by-emails-including-secondary-emails/296910/1 "2024-02-27T15:03:20Z")

</div>

您好，

我想将来自另一个应用程序的电子邮件地址列表中的用户进行匹配，以便将所有用户添加到一个组中，并移除不在列表中的成员。我有一个通过 API 完成此操作的脚本。

移除部分很简单。对于每个成员，我使用以下命令提取他们所有的电子邮件：  
` get(/u/{username}/emails.json)`  
然后我尝试将它们与列表中的每一项进行匹配。如果没有匹配项，则排除该成员。

包含部分比较棘手。对于每个电子邮件地址，我想查看是否有用户拥有该地址。如果有，我将其添加到组中。如果没有，我不想发送邀请。我使用的是以下命令：  
`get(/admin/users/list/all.json?email={email})`  
但是此命令返回的是以该地址为主地址的用户列表，而不是拥有该地址作为_次要_地址、_未确认电子邮件_或_关联账户_的用户。是否有办法从所有可能的电子邮件地址进行筛选，还是我应该导出所有用户列表并在外部手动完成？我更倾向于在内部完成，这样可以降低数据泄露的风险。

谢谢！

---

<div class="post-metadata">

### Author: ![Arkshine](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/arkshine/32/298682_2.png) [@Arkshine](https://meta.discourse.org/u/Arkshine)
#### Post date: [2024年二月27日 15:17 UTC](https://meta.discourse.org/t/api-filter-users-by-emails-including-secondary-emails/296910/2 "2024-02-27T15:17:43Z")

</div>

你好，欢迎回来！👋

[Data Explorer](https://meta.discourse.org/t/32566?silent=true) 插件可能适合你的用例。

> [@Discourse Data Explorer](https://meta.discourse.org/t/discourse-data-explorer/32566):
>
> discourse2Summary Discourse [Data Explorer](https://meta.discourse.org/t/32566?silent=true) allows you to make SQL queries against your live database, allowing for up-to-the-minute stats reporting.open_bookInstall Guide This plugin is bundled with Discourse core. There is no need to install the plugin separately.information_source If you’re looking for examples or support for any custom queries, you can find lots of topics in our #Data & reporting category under the #sql-query tag. If there’s not one to suit your pa…

你可以将其用作 API，并根据初始输入创建查询。

> [@Run Data Explorer queries with the Discourse API](https://meta.discourse.org/t/run-data-explorer-queries-with-the-discourse-api/120063):
>
> bookmark This guide explains how to use the Discourse API to create, run, and manage queries with the [Data Explorer](https://meta.discourse.org/t/32566?silent=true) plugin. person_raising_hand Required user level: Administrator Virtually any action that can be performed through the Discourse user interface can also be triggered with the Discourse API. This document provides a comprehensive overview for utilizing the API specifically in conjunction with the [Data Explorer](https://meta.discourse.org/t/32566?silent=true) plugin. For a general overview of how to find the correct API …

---

<div class="post-metadata">

### Author: ![oca](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/oca/32/156060_2.png) [@oca](https://meta.discourse.org/u/oca)
#### Post date: [2024年二月29日 09:31 UTC](https://meta.discourse.org/t/api-filter-users-by-emails-including-secondary-emails/296910/3 "2024-02-29T09:31:50Z")

</div>

谢谢。  
我使用此插件和以下查询完成了此操作：

```sql
--[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 脚本调用它：

```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"]

```

---

<div class="post-metadata">

### Author: ![system](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/system/32/443519_2.png) [@system](https://meta.discourse.org/u/system)
#### Post date: [2024年三月30日 09:32 UTC](https://meta.discourse.org/t/api-filter-users-by-emails-including-secondary-emails/296910/4 "2024-03-30T09:32:22Z")

</div>

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