15

http://kb.mailchimp.com/api/resources/lists/members/lists-members-collection

使用此资源,我们只能获得前 10 个成员。如何获得全部?

4

6 回答 6

22

答案很简单——在 URL 查询中使用offsetcount参数:

https://us10.api.mailchimp.com/3.0/lists/b5b5fdc2fa/members?offset=150&count=10

最后我找到了 MailChimp API v3 的 PHP API 客户端: https ://github.com/pacely/mailchimp-api-v3

还有关于分页的官方文档..我之前错过了:( http://kb.mailchimp.com/api/article/api-3-overview

于 2015-08-26T09:46:22.847 回答
7

我在研究一种在 MC API 3.0 中获取所有列表成员的方法时偶然发现了这个。我注意到在尝试将所有列表成员放在一个页面上时,有一些关于 API 超时的评论。起初我也遇到过这个问题,但是通过使用“字段”参数限制结果中的字段来克服它。我的代码用于批量删除器,所以我真正需要的是每个成员的 ID 来组合批量删除请求。这是我的获取请求的外观(伪代码):

$total_members = $result['total_items'];//get number of members in list via previous request
https://usXX.api.mailchimp.com/3.0/lists/foobarx/members?fields=members.id&count=total_members

通过这种方式,我可以在一个页面上获取超过 15,000 个订阅者而不会出错。

于 2017-07-27T18:00:35.630 回答
4

偏移量和计数是文档上的官方方式,但问题是线性减速。它似乎是一个 n^2 解决方案,因此如果您有 20,000 个项目,那么您就有麻烦了。他们的文档http://developer.mailchimp.com/documentation/mailchimp/reference/lists/members/#read-get_lists_list_id_members警告您不要使用偏移量。

如果您的场景允许您使用其他过滤器(例如 since_last_changed),那么您可以快速完成。有关日期时间的格式,请参阅MailChimp API 3.0 中“时间范围”的正确语法是什么

于 2016-08-04T21:38:12.347 回答
4

正如其他一些答案中提到的那样,使用offset和参数是正确的,但对于大型列表来说变得乏味。count

一种更有效的方法是使用 MailChimp API 的客户端。我将mailchimp3 用于 python。使用它,很容易获得列表中的所有成员,因为它处理分页。下面是你将如何做到的。

from mailchimp3 import MailChimp

client = MailChimp('YOUR_USERNAME', 'YOUR_SECRET_KEY')
client.lists.members.all('YOUR_LIST_ID', get_all=True, fields="members.email_address")
于 2017-01-23T01:48:05.543 回答
2

您可以只使用 count 来执行此操作,对列表根进行 API 调用,因此在下一个 API 调用中包含 count 参数并且您拥有所有列表成员。

我遇到了这个问题,因为我有一个包含 2600 名成员的中等列表,并且 MailChimp 抛出了一个错误,但它适用于 1500 人。

因此,对于超过 1500 名成员的列表,我会使用MailChimp 导出 API,因为这将停止使用,但我找不到任何其他可接受的解决方案。

或者,对于更大的列表(> 1500),您可以获得成员总数,然后对成员端点进行多次 api 调用,但我真的不喜欢这样:(

如果有人有更好的选择,我会很高兴听到它。

于 2016-10-26T11:35:40.213 回答
0

使用 MailChimp.Net。
使用偏移值。

List<Member> listMembers = new List<Member>();
IMailChimpManager manager = new MailChimpManager(MailChimpApiKey);
bool moreAvailable = true;
int offset = 0;
while (moreAvailable)
{
    var listMembers = manager.Members.GetAllAsync(yourListId, new MemberRequest
    {
        Status = Status.Subscribed,
        Limit = 250,
        Offset = offset
    }).ConfigureAwait(false);

    var Allmembers = listMembers.GetAwaiter().GetResult();
    foreach(Member member in Allmembers)
    {
        listMembers.Add(member);
    }
    if (Allmembers.Count() == 250)
        //if the count is < of 250 then it means that there aren't more results
        offset += 250;
    else
        moreAvailable = false;
}
于 2018-06-13T10:45:40.680 回答