我正在点击和获取一些记录的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%的记录,因此对我没有帮助。