MailChimp API:批量检查订阅状态

时间:2015-03-15 13:08:57

标签: php api mailchimp

检查一批电子邮件地址以及他们是否订阅特定列表的最佳方法是什么?我当前的方法是为每个电子邮件地址进行API调用,但是当计数变为>时,这变得非常慢。 50。

我正在使用V2.0,使用PHP方法,因为我正在开发CakePHP。

 //Determine MailChimp Subscription
 $args = array(
    'id' => $this->apiKeys['mailchimp_list_ID'],
    'emails' => array(1 => array('email' => $customer['User']['username']))
 );
 $mailChimpQuery = $this->mailChimp('member-info', $args);
 $mailChimpStatus = ($mailChimpQuery['success_count'] == 1 ? 1 : 0);
 $customer['Customer']['subscribed'] = $mailChimpStatus;

另一个Controller中的mailChimp调用是:

public function mailChimp($action, $args=array()) {

        $args['apikey'] = $this->apiKeys['mailchimp_api'];
        $url = 'https://us8.api.mailchimp.com/2.0/lists/' . $action .'.json';

        if (function_exists('curl_init') && function_exists('curl_setopt')){
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
            curl_setopt($ch, CURLOPT_USERAGENT, 'PHP-MCAPI/2.0');
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_TIMEOUT, 10);
            curl_setopt($ch, CURLOPT_POST, true);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($args));
            $result = curl_exec($ch);
            curl_close($ch);
        } else {
            $json_data = json_encode($args);
            $result    = file_get_contents($url, null, stream_context_create(array(
                'http' => array(
                    'protocol_version' => 1.1,
                    'user_agent'       => 'PHP-MCAPI/2.0',
                    'method'           => 'POST',
                    'header'           => "Content-type: application/json\r\n".
                    "Connection: close\r\n" .
                    "Content-length: " . strlen($json_data) . "\r\n",
                    'content'          => $json_data,
                    ),
                )));
        }

        return  $result ? json_decode($result, true) : false;
    }

1 个答案:

答案 0 :(得分:0)

仅供参考,我提出了自己的解决方案:

  1. 创建数据库中所有电子邮件地址的数组
  2. 创建一个for循环,从该阵列中获取50个电子邮件地址的细分,并使用 member-info https://apidocs.mailchimp.com/api/2.0/lists/member-info.php
  3. 运行批量检查
  4. 操纵API调用中的返回数组,仅提取电子邮件地址以及是否订阅了该列表。
  5. 在for循环中,将每个50个电子邮件地址返回值添加到一个新数组中,然后添加到它的末尾;您将拥有数据库中所有电子邮件地址的数组,并具有相应的真/假值,具体取决于它们是否已订阅列表。
  6. 祝你好运!