【问题标题】:How to get all lists on mailchimp API v3.0?如何获取 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

【问题讨论】:

    标签: mailchimp mailchimp-api-v3.0


    【解决方案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)
      

      【讨论】:

      • 我认为随机选择计数不会减少它。它会带来随机结果。
      猜你喜欢
      • 2016-12-18
      • 2016-01-28
      • 2018-06-29
      • 2021-05-01
      • 2017-05-15
      • 2017-11-23
      • 2016-05-02
      • 2017-07-07
      • 2017-08-15
      相关资源
      最近更新 更多