如何处理分页数据的RESTful API限制

我正在尝试创建脚本以使用其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

之间的某个问题时,就会出现问题。
dongshaobo 回答:如何处理分页数据的RESTful API限制

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2976437.html

大家都在问