http://kb.mailchimp.com/api/resources/lists/members/lists-members-collection
使用此资源,我们只能获得前10名成员。如何获得所有?
答案 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)
如某些其他答案中所述,使用offset
和count
参数是正确的,但对于大型列表则变得乏味。
更有效的方法是使用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;
}