后台php实现数据实时抓取

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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
do{  

/**********利用函数从url获取数据***************/
$json = GetCurl("http://www.pm25.in/api/querys/<all_cities class=" "></all_cities>json?token=jzxqS2qpsYU3bRhkEjey"); //json数据文件

/**********把上述数据插入数据库****************/
$con = mysql_connect("localhost","root","");//连接数据库
set_time_limit(0);//设置永远不超时
mysql_select_db("airquality_db",$con);//选择数据库
···

/**********按设置的时间等待一小时循环执行****************/
sleep($interval);

}while(true);

从url中获取数据的函数如下:

1
2
3
4
5
6
7
8
9
10
11
12
function 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文件进行抓取。

热评文章