从API中提取分页数据的最佳实践

时间:2016-08-04 04:03:20

标签: php mysql api

我正在点击和获取一些记录的API。每天有大约60,000条记录。每页有1,000条记录,我可以每小时点击50次API。当我点击它获得前1,000个结果时,响应中有一个“元”组件,告诉我总共有多少页。

我做这样的事情,默认情况下它会得到今天结果的第一页:

function get_records($page){
    $start=date("Y-m-d");
    $end=date("Y-m-d",strtotime("+1 day"));
    $url="//www.api.com/api/start=$start&end=$end&key=123&page=$page";
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL,$url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);   
    return json_decode(curl_exec($curl));
}
$page1=get_records(1);

$ page1现在是一个包含所有记录的对象,加上一些元信息,仅仅是为了这个目的,它就像是:

page1->
    records->
        [0]bla
        [1]blabla
        [2]etc
    meta->
        total pages

所以我只是从那里抓取记录:

$records[]=page1->records;

我检查是否有多个页面,如果有,我会使用带页码的get_records遍历我需要的所有页面:

if ($page1->meta->total_pages>1){
    for($p=2;$p<=$page1->meta->total_pages;$p++){
        $records=$records + get_records($p)->data->records;
    }
}

然后我只是循环遍历它们并将它们放入数据库中,我只需要在数据库中添加一些内容,类似于所有记录的1%:

foreach ($records as $r){
    if($r['criteria']==1){
        [REPLACE INTO DB]
    }
}

新记录一直在进行,所以我想每15分钟运行一次,收集所有新记录(因为我正在使用“替换”我可以用新记录替换旧记录 - 我只是不要我想要重新运行我当天早些时候已经运行的页面。

假设有3500条记录,我在凌晨1点得到它们,那么设置它的最佳方法是什么,以便我在1运行时不需要运行第1,2或3页: 15AM?

最简单的方法是什么?我想我可以查看当天在数据库中插入的总数,但由于我只使用了从API中提取的1%的记录,因此对我没有帮助。

0 个答案:

没有答案