web-dev-qa-db-fra.com

Obtenez tous les membres de la liste de diffusion en utilisant MailChimp API 3.0

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

En utilisant cette ressource, nous ne pouvons obtenir que les 10 premiers membres. Comment tout avoir?

10
graceman9

La réponse est assez simple - utilisez offset et count paramètres dans la requête d'URL:

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

Enfin, j'ai trouvé PHP client API pour MailChimp API v3: https://github.com/pacely/mailchimp-api-v3

Et docs officiels sur la pagination. Cela m’avait déjà manqué: ( http://kb.mailchimp.com/api/article/api-3-overview

11
graceman9

Je suis tombé sur celui-ci tout en recherchant un moyen d'obtenir tous les membres de la liste dans MC API 3.0. J'ai remarqué qu'il y avait des commentaires sur le délai d'attente de l'API lorsque vous essayez d'obtenir tous les membres de la liste sur une seule page. J'ai aussi rencontré cela au début, mais j'ai pu le surmonter en limitant les champs du résultat en utilisant le paramètre 'fields'. Mon code est destiné à un suppresseur de masse, donc tout ce dont j'avais besoin était l'ID de chaque membre pour constituer une demande de suppression par lot. Voici à quoi ressemble ma demande d'extraction (code psuedo):

$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

De cette façon, je peux récupérer plus de 15 000 abonnés sur une page sans erreur.

3
Tate Harmann

Utiliser les paramètres offset et count est correct comme mentionné dans certaines des autres réponses, mais devient fastidieux pour les grandes listes. 

Un moyen plus efficace consiste à utiliser un client pour l'API MailChimp. J'ai utilisé mailchimp3 pour python . En utilisant cela, il est assez facile d’obtenir tous les membres de votre liste car cela gère la pagination. Voici comment vous le feriez.

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")
2
Jacqueline Boltik

Vous pouvez le faire simplement en comptant, en appelant l'API au liste racine , de sorte que lors du prochain appel d'API, vous incluez le paramètre count et que vous ayez tous les membres de votre liste.

J'ai eu des problèmes avec cela car j'avais une liste modérée avec 2600 membres et MailChimp lançait une erreur, mais cela fonctionnait avec 1500 personnes.

Donc, pour une liste de plus de 1500 membres, j’utilise (API d’exportation MailChimp } _ gardez bien à l’esprit que cela va cesser, mais je n’ai trouvé aucune autre solution acceptable.

Alternativement, pour de plus grandes listes (> 1500), vous pouvez obtenir le nombre total de membres, puis faire plusieurs appels api au membre du membre mais je n'aime vraiment pas cela :(

Si quelqu'un a une meilleure alternative, je serais vraiment heureux de l'entendre.

2
Functional Rocking

offset et count est la manière officielle sur les docs, mais le problème est qu’il ya un ralentissement linéaire. Il semble que ce soit une solution n ° 2, donc si vous avez 20 000 articles, vous êtes en difficulté. Leurs documents http://developer.mailchimp.com/documentation/mailchimp/reference/lists/members/#read-get_lists_list_id_members vous mettent en garde contre l'utilisation de l'offset. 

Si votre scénario vous autorise à utiliser d'autres filtres (comme Since_last_changed), vous pouvez le faire rapidement. Voir Quelle est la bonne syntaxe pour "timeframe" dans MailChimp API 3.0 pour le format de date/heure. 

1
Mike S

Avec MailChimp.Net.
Utilisez la valeur de décalage.

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