【问题标题】:Get all members from the mailing list using MailChimp API 3.0使用 MailChimp API 3.0 从邮件列表中获取所有成员
【发布时间】:2015-11-15 14:11:36
【问题描述】:

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

使用此资源,我们只能获得前 10 个成员。如何获得全部?

【问题讨论】:

    标签: mailchimp mailchimp-api-v3.0


    【解决方案1】:

    答案很简单——在 URL 查询中使用 offsetcount 参数:

    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

    【讨论】:

    • @pocockn 您可以分两步获取它们:1) get total items 2) get all members。如果您能找到更好的解决方案,请告诉我:)
    • count 似乎在 1000 处最大化。因此您需要在多次调用中遍历所有成员。
    • 值得一提的是,您可以在请求中使用的计数有限制。对我来说,它似乎达到了 700 左右。
    • 当尝试对大约 2600 个成员的“正常”列表进行 curl 调用时,我从 mailchimp api 收到内部服务器错误,我目前正在尝试将列表成员导出到 excel 文件我被卡住了,所以对于大型列表,我能看到的唯一解决方案是发出增量请求并将结果保存在文件或数据库中,这不是一个好的解决方案。
    【解决方案2】:

    我在研究一种在 MC API 3.0 中获取所有列表成员的方法时偶然发现了这个。我注意到在尝试将所有列表成员放在一个页面上时,API 上的一些 cmets 超时。起初我也遇到过这个问题,但是通过使用“字段”参数限制结果中的字段来克服它。我的代码用于批量删除器,所以我真正需要的是每个成员的 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 个订阅者而不会出错。

    【讨论】:

      【解决方案3】:

      偏移和计数是文档上的官方方式,但问题是线性减速。它似乎是一个 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

      【讨论】:

        【解决方案4】:

        使用 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")
        

        【讨论】:

          【解决方案5】:

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

          我遇到了这个问题,因为我有一个包含 2600 名成员的中等列表,而 MailChimp 抛出了一个错误,但它适用于 1500 人。

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

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

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

          【讨论】:

            【解决方案6】:

            使用 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;
            }
            

            【讨论】:

              猜你喜欢
              • 2017-08-15
              • 2016-12-18
              • 2018-06-29
              • 2017-05-08
              • 2016-02-08
              • 2015-12-05
              • 1970-01-01
              • 2018-12-01
              • 2016-11-28
              相关资源
              最近更新 更多