1、设置参数
date_default_timezone_set(“Asia/Shanghai”); //使得程序能够定时运行;
ignore_user_abort(); //即使Client断开(如关掉浏览器),PHP脚本也可以继续执行;
set_time_limit(0); //执行时间为无限制,php默认执行时间是30秒,可以让程序无限制的执行下去;
$interval=60*60; // 每隔一小时运行一次
2、定时数据抓取
在无限循环语句中,首先利用函数从url获取数据,然后将数据插入到数据库中(本文选用mysql数据库),最后使用sleep()函数设置等待一段时间后再进入下一次循环。
1 | do{ |
从url中获取数据的函数如下:1
2
3
4
5
6
7
8
9
10
11
12function GetCurl($url){
set_time_limit(0);//设置永远不超时
$curl = curl_init();
curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);//获取url数据作为变量存储,设置为1或true
curl_setopt($curl,CURLOPT_URL, $url);
//模拟用户使用的浏览器,在HTTP请求中包含一个"user-agent"头的字符串。
curl_setopt($curl,CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
$resp = curl_exec($curl);//运行curl,请求网页
$json = json_decode($resp,true);
curl_close($curl);//关闭curl请求
return $json;
}
3、数据抓取的网站
空气质量
http://www.pm25.in/api/querys/all_cities.json?token=jzxqS2qpsYU3bRhkEjey
气象
http://api.openweathermap.org/data/2.5/group?id=1796236,1799397,1808926,1799962,1790645&units=metric&APPID=94506fa9256f37bd13eae4126beb7d8d&lang=zh_cn
Id代表城市,APPID代表密钥,lang代表语言。
更新时间好像是我自己测的,我让它每隔半小时获取一次,然后看到数据大约是一小时一次。
4、存在问题
数据抓取过程中发生断开连接现象(即循环过程中断),需要重新运行PHP文件进行抓取。