Получить всех участников из списка рассылки с помощью MailChimp API 3.0

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

используя этот ресурс, мы можем получить только первые 10 членов. Как получить все?

6 ответов


ответ довольно прост-используйте смещение и графа параметры в запросе URL:

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

наконец, я нашел PHP API client для MailChimp API v3: https://github.com/pacely/mailchimp-api-v3

и официальные документы о разбиении на страницы.. Я скучал по этому раньше. :( http://kb.mailchimp.com/api/article/api-3-overview


вы можете сделать это только с count, сделав вызов API для корень таким образом, в следующем вызове API вы включаете параметр count, и у вас есть все члены списка.

Я столкнулся с проблемами с этим, потому что у меня был умеренный список с 2600 членами, и MailChimp бросал ошибку, но он работал с 1500 людьми.

поэтому для списка больше 1500 членов я использую MailChimp экспорт API голый в виду, что это будет прекращено но я не смог найти других приемлемых решений.

альтернативно для больших списков (>1500) вы можете получить общее количество членов, а затем сделать несколько вызовов api для конечная точка участника но мне это очень не нравится: (

Если у кого есть лучшая альтернатива, я был бы очень рад это слышать.


offset и count является официальным способом в документах, но проблема в том, что имеет линейное замедление. Кажется, это решение N^2, поэтому, если у вас есть 20 000 элементов, вы в беде. Их документы http://developer.mailchimp.com/documentation/mailchimp/reference/lists/members/#read-get_lists_list_id_members предостеречь от использования offset.

Если сценарий позволяет использовать другие фильтры (например, since_last_changed), вы можете сделать это быстро. См.что правильный синтаксис для "таймфрейма"в MailChimp API 3.0 для формата для datetime.


используя offset и count параметры верны, как указано в некоторых других ответах, но становятся утомительными для больших списков.

более эффективным способом является использование клиента для API MailChimp. Я использовал 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")

я наткнулся на это, исследуя способ получить всех членов списка в MC API 3.0. Я заметил, что были некоторые комментарии по времени ожидания API при попытке получить всех членов списка на одной странице. Я также столкнулся с этим сначала, но смог преодолеть его, ограничив поля в результате, используя параметр "поля". Мой код предназначен для массового удаления, поэтому все, что мне действительно нужно, это идентификатор каждого члена, чтобы собрать запрос на пакетное удаление. Вот как выглядит мой запрос fetch (psuedo-code):

$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 подписчиков на одной странице без ошибок.


С 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;
}