我正在尝试创建脚本以使用其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, 'FieldName', 'LastName');
$tags = get_field($contact->CustomFields, 'FieldName', '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