http://kb.mailchimp.com/api/resources/lists/members/lists-members-collection
使用此资源,我们只能获得前 10 个成员。如何获得全部?
http://kb.mailchimp.com/api/resources/lists/members/lists-members-collection
使用此资源,我们只能获得前 10 个成员。如何获得全部?
答案很简单——在 URL 查询中使用offset和count参数:
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
我在研究一种在 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 个订阅者而不会出错。
偏移量和计数是文档上的官方方式,但问题是线性减速。它似乎是一个 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 中“时间范围”的正确语法是什么。
正如其他一些答案中提到的那样,使用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")
您可以只使用 count 来执行此操作,对列表根进行 API 调用,因此在下一个 API 调用中包含 count 参数并且您拥有所有列表成员。
我遇到了这个问题,因为我有一个包含 2600 名成员的中等列表,并且 MailChimp 抛出了一个错误,但它适用于 1500 人。
因此,对于超过 1500 名成员的列表,我会使用MailChimp 导出 API,因为这将停止使用,但我找不到任何其他可接受的解决方案。
或者,对于更大的列表(> 1500),您可以获得成员总数,然后对成员端点进行多次 api 调用,但我真的不喜欢这样:(
如果有人有更好的选择,我会很高兴听到它。
使用 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;
}