1 //获取天气信息
2 public function get_weather()
3 {
4 $rules = ['city'];
5 if (true == self::is_empty($rules)) {
6 $city = I("post.city");
7 $url="http://wthrcdn.etouch.cn/WeatherApi?city=$city";
8 // $data=preg_replace('/<!--+.*-->/','',$data);
9 //把gbk格式转为utf-8
10 // $data = iconv('GBK','UTF-8', $data);
11 $curl=$this->curl_get($url,true); //下载天气网页内容并且解压
12 $xml=$this->FromXml($curl); //把xml转化为json格式
13 $array=$this->data($xml,$city); //拿到json格式获取需要的数据
14 $this->send($array);
15 } else {
16 $this->send("数据格式有误", 0);
17 }
18 }
19
20
21 /**将xml转为array
22 * @param $xml
23 * @return mixed
24 */
25 function FromXml($xml)
26 {
27 if (empty($xml))
28 return 0;//xml数据异常
29 libxml_disable_entity_loader(true);
30 return json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
31 }
32
33 function curl_get($url, $gzip=false){
34 $curl = curl_init($url);
35 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 设置cURL 参数,要求结果保存到字符串中还是输出到屏幕上。
36 curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10); // 设置header(很重要,第二个参数填什么数字)
37 if($gzip) curl_setopt($curl, CURLOPT_ENCODING, "gzip"); //解压
38 $content = curl_exec($curl);// 运行cURL,请求网页
39 curl_close($curl);
40 return $content;
41 }
42
43 //需要的数据
44 public function data($data,$city){
45 $array['city']=$city;
46 $array['wendu']=$data['wendu'];
47 if(!empty($data['environment']['pm25'])){
48 $array['aqi']=$data['environment']['aqi'];
49 $array['pm25']=$data['environment']['pm25'];
50 $array['quality']=$data['environment']['quality'];
51 }
52 $array['high']=substr($data['forecast']['weather'][0]['high'],7,2);
53 $array['low']=substr($data['forecast']['weather'][0]['low'],7,2);
54 $array['type']=$data['forecast']['weather'][0]['day']['type'];
55 $array['zhishus']=$data['zhishus']['zhishu'][0];
56 return $array;
57 }