如何获取 mailchimp API v3.0 上的所有列表?

Posted

技术标签:

【中文标题】如何获取 mailchimp API v3.0 上的所有列表?【英文标题】:How to get all lists on mailchimp API v3.0? 【发布时间】:2015-12-20 16:08:28 【问题描述】:

此时一个请求返回 10 个列表对象。那么我怎样才能从 API v3.0 中获取所有列表,甚至有可能吗?在我从 API 得到的响应中,我没有看到 cursor_next 或类似的东西。

我说的是这个端点:http://kb.mailchimp.com/api/resources/lists/lists-collection

【问题讨论】:

【参考方案1】:

您可以发送仅返回列表计数的附加请求 /3.0/lists?fields=total_items

然后将此值用于下一个请求 /3.0/lists?count=totalItems

【讨论】:

如果您使用的是 \DrewM\MailChimp php 包装器$lists = $mc->get('lists?count=100');【参考方案2】:

不确定这怎么会这么难,但我没有从 MailChimp API v3.0 中找到此信息。相反,github中的一些项目建议我该怎么做..

所以答案是:API v3.0 中的分页总是使用计数和偏移量来完成的

【讨论】:

评论一个四年前的答案,但这让我对使用 MailChimp 和这个 API 感觉很好。它已经成熟,它们仍然存在。除了始终使用分页规则之外,我还要添加另一个:始终从 API 中指定您想要的字段!如果您依赖默认值,那么每次调用都会得到一切,这会使您的 MailChimp API 调用非常慢。您不需要 MailChimp 在每次调用时都向您发送 REST 端点信息,因此请告诉它不要这样做。他们必须编写的 JSON 越多,速度就越慢。【参考方案3】:

使用 MailChimp.Net。 这是一个带有 while 循环和偏移值的示例。

List<List> lists = new List<List>();
IMailChimpManager manager = new MailChimpManager(MailChimpApiKey);
bool moreAvailable = true;
int offset = 0;
while (moreAvailable)

    var membersRequest = manager.Lists.GetAllAsync( new ListRequest
    
        FieldsToInclude = "fieldSample1",
        Limit = 10,
        Offset = offset
    ).ConfigureAwait(false);

    var allList = membersRequest.GetAwaiter().GetResult();
    foreach (List list in allList)
    
        lists.Add(list);
    
    if (allList.Count() >= 10)
        offset += 10;
    else
        moreAvailable = false;

【讨论】:

将字段列表添加到您的 ListRequest 以指定您感兴趣的数据将使您的性能提高一个数量级。 @Bryan 我按照你的建议添加了“FieldToInclude”【参考方案4】:

感谢我们的帮助,我在您的帮助下完成了一些定制工作。

我有一个代码可以帮助将来面临同样问题的开发人员。

如果(!空($mailchimp_api_key))

            $mailchimp_lists = get_transient( 'tbz_affwp_edd_mailchimp_lists' );

            if ( false === $mailchimp_lists ) 

                if ( ! class_exists( 'TbzAffWPMailChimp' ) ) 
                    require_once plugin_dir_path( __FILE__ ) . 'classes/api/MailChimp.php';
                

                $Mailchimp = new TbzAffWPMailChimp( $mailchimp_api_key );
                $lists = $Mailchimp->get('lists?count=100');


                $lists_count = $lists['total_items'];

                if ( $lists_count >= 20 ) 

                    foreach ( $lists['lists'] as $list ) 
                        $mailchimp_lists[ $list ['id'] ] = $list['name'];
                    

                    set_transient( 'tbz_affwp_edd_mailchimp_lists', $mailchimp_lists, 5 * MINUTE_IN_SECONDS );

                

                return false;

            

            return $mailchimp_lists;
        

        return false;

    


【讨论】:

【参考方案5】:

我遇到了同样的问题,但为了更具体一点,我使用的是:

client.list.all(fields="lists.name,lists.id",)

这仅返回 10 个列表。要获得所有可用列表,需要将其更改为您拥有的列表数量或更高的数量,在这种情况下,我随机选择了 100 个:

client.list.all(fields="lists.name,lists.id", count=100, offset=0)

【讨论】:

我认为随机选择计数不会减少它。它会带来随机结果。

以上是关于如何获取 mailchimp API v3.0 上的所有列表?的主要内容,如果未能解决你的问题,请参考以下文章

使用 MailChimp API v3.0 获取特定成员列表

MailChimp 发送邮件 v3.0

连接到 MailChimp v3.0 API

Mailchimp API V3 jQuery Ajax POST 订阅者

Mailchimp API V3 jQuery Ajax POST 订阅者

使用 Mailchimp api v3.0 将订阅者添加到分段