使用MailChimp API 3.0从邮件列表中获取所有成员

时间:2015-08-21 14:58:23

标签: mailchimp mailchimp-api-v3.0

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

使用此资源,我们只能获得前10名成员。如何获得所有?

6 个答案:

答案 0 :(得分:17)

答案很简单 - 在网址查询中使用偏移计数参数:

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

答案 1 :(得分:5)

我在研究如何获得MC API 3.0中的所有列表成员时偶然发现了这一点。我注意到在尝试将所有列表成员放在一个页面上时,对API超时有一些评论。我最初也遇到过这种情况,但是能够通过使用'fields'参数限制结果中的字段来克服它。我的代码是一个批量删除器,所以我真正需要的是每个成员的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个订阅者而不会出错。

答案 2 :(得分:2)

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

我遇到了这个问题,因为我有一个2600名成员的温和列表,MailChimp正在抛出一个错误,但它有1500人。

因此,对于超过1500个成员的列表,我使用MailChimp export API时请记住,这将会停止,但我找不到任何其他可接受的解决方案。

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

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

答案 3 :(得分:2)

如某些其他答案中所述,使用offsetcount参数是正确的,但对于大型列表则变得乏味。

更有效的方法是使用MailChimp API的客户端。我用了mailchimp3 for 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")

答案 4 :(得分:1)

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

如果您的场景允许您使用其他过滤器(例如since_last_changed),那么您可以快速完成。有关日期时间的格式,请参阅What is the right syntax for "timeframe" in MailChimp API 3.0

答案 5 :(得分: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;
}