我正在尝试创建脚本以使用其REST API从Campaigner帐户中获取特定数量的联系人,每个请求的联系人数量上限为1000,因此为了处理该脚本,我想出了以下代码
function get_field($array,$key,$value,$strict = false) {
foreach ($array as $property) if (($property->$key == $value && $strict === false) || ($property->$key === $value && $strict === true)) return $property;
return '';
}
$total_emails = 4000;
$break_after = 2000;
$total_iterations = $total_emails/$break_after;
$current_iteration = $_GET['i'];
use GuzzleHttp\Client;
$client = new Client([
'base_uri' => 'https://edapi.campaigner.com/v1/','auth' => ['<API_USER>','<API_KEY>'],]);
// Get total number of subscribers
$response = $client->get('Subscribers',['query' => [
'PageSize' => 1,'PageNumber' => 1,]]);
$results = json_decode($response->getBody());
// Set some useful vars for later use
$total_subscribers = $results->TotalRecords; //40,000
$page_size = ($break_after > 1000 ? 1000 : $break_after); //1000
$max_emails = ($total_subscribers > $total_emails ? $total_emails : $total_subscribers); //4000
$max_pages = ceil($max_emails/$page_size); //4
$current_page = ($current_iteration*$max_pages)/$total_iterations;
// Get all contact details
$contacts = [];
for ($page_number = $current_page; $page_number < $max_pages; $page_number++) {
r($page_number);
$response = $client->get('Subscribers',[
'query' => [
'PageSize' => $page_size,'PageNumber' => $page_number+1,'Fields' => "FirstName,LastName,Tag",]
]);
$page_results = json_decode($response->getBody());
$page_contacts = $page_results->Items;
// Save contact details to an easy-to-read array
foreach ($page_contacts as $contact) {
$first_name = get_field($contact->CustomFields,'FieldName','FirstName');
$last_name = get_field($contact->CustomFields,'LastName');
$tags = get_field($contact->CustomFields,'Tag');
$contacts[] = [
'ID' => $contact->EmailID,'FirstName' => $first_name->Value,'LastName' => $last_name->Value,'Tags' => explode(',',$tags->Value),'Email' => $contact->Emailaddress,'Status' => $contact->Status,];
}
// Break after we have reached the desired number of emails for this iteration
if (($page_size*$page_number) >= $break_after*$current_iteration) break;
}
r(count($contacts)); // Dump content of variable formatted in HTML
// For Debugging purposes
r([
'total_subscribers' => $total_subscribers,'page_size' => $page_size,'max_emails' => $max_emails,'max_pages' => $max_pages,]);
当我一次检索所有数据(即$total_emails = 4000; $break_after = 4000;
)时,代码可以正常工作。
当我尝试获取部分数据(即$total_emails = 4000; $break_after = 2000;
)并将迭代次数设置为1到$total_iterations