首页 > 代码库 > 根据ip判断返回城市名称查询当地天气

根据ip判断返回城市名称查询当地天气

<?php
header("content-type:text/html;charset=utf-8");
date_default_timezone_set("Asia/Shanghai");
error_reporting(0);
// 根据IP判断城市
$user_ip = $_SERVER[‘REMOTE_ADDR‘];
$url ="http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip=$user_ip";
$address = file_get_contents($url);
$address_arr = json_decode($address);  //返回对象,需要转换为数组

//以上海为例

stdClass Object
 (
 [ret] => 1
 [start] => -1
 [end] => -1
 [country] => 中国
 [province] => 上海
 [city] => 上海
 [district] =>
 [isp] =>
 [type] =>
 [desc] =>
 )

function object_array($array){
  if(is_object($array)){
    $array = (array)$array;
  }
  if(is_array($array)){
    foreach($array as $key=>$value){
      $array[$key] = object_array($value);
    }
  }
  return $array;
}

//通过该函数转化为数组
$address_arr = object_array($address_arr);

// print_r($address_arr);

Array
 (
 [ret] => 1
 [start] => -1
 [end] => -1
 [country] => 中国
 [province] => 上海
 [city] => 上海
 [district] =>
 [isp] =>
 [type] =>
 [desc] =>
 )


$city = $address_arr["city"];  

//输出为上海,获得城市通过百度天气API查询当地天气

$con=file_get_contents("http://api.map.baidu.com/telematics/v3/weather?location=$city&output=json&ak=spmMww7Eoqcmf3FXbnLyDUwL");  //注意ak值需要进入百度接口注册,附上地址:http://lbsyun.baidu.com/apiconsole/key
$con = json_decode($con);

print_r($con);

stdClass Object
 (
 [error] => 0
 [status] => success
 [date] => 2016-09-23
 [results] => Array
 (
 [0] => stdClass Object
 (
 [currentCity] => 上海
 [pm25] => 42
 [index] => Array
 (
 [0] => stdClass Object
 (
 [title] => 穿衣
 [zs] => 热
 [tipt] => 穿衣指数
 [des] => 天气热,建议着短裙、短裤、短薄外套、T恤等夏季服装。
 )
  
 [1] => stdClass Object
 (
 [title] => 洗车
 [zs] => 较适宜
 [tipt] => 洗车指数
 [des] => 较适宜洗车,未来一天无雨,风力较小,擦洗一新的汽车至少能保持一天。
 )
  
 [2] => stdClass Object
 (
 [title] => 旅游
 [zs] => 适宜
 [tipt] => 旅游指数
 [des] => 天气较好,但丝毫不会影响您出行的心情。温度适宜又有微风相伴,适宜旅游。
 )
  
 [3] => stdClass Object
 (
 [title] => 感冒
 [zs] => 少发
 [tipt] => 感冒指数
 [des] => 各项气象条件适宜,无明显降温过程,发生感冒机率较低。
 )
  
 [4] => stdClass Object
 (
 [title] => 运动
 [zs] => 较适宜
 [tipt] => 运动指数
 [des] => 天气较好,户外运动请注意防晒。推荐您进行室内运动。
 )
  
 [5] => stdClass Object
 (
 [title] => 紫外线强度
 [zs] => 弱
 [tipt] => 紫外线强度指数
 [des] => 紫外线强度较弱,建议出门前涂擦SPF在12-15之间、PA+的防晒护肤品。
 )
  
 )
  
 [weather_data] => Array
 (
 [0] => stdClass Object
 (
 [date] => 周五 09月23日 (实时:26℃)
 [dayPictureUrl] => http://api.map.baidu.com/images/weather/day/duoyun.png
 [nightPictureUrl] => http://api.map.baidu.com/images/weather/night/duoyun.png
 [weather] => 多云
 [wind] => 东风微风
 [temperature] => 27 ~ 21℃
 )
  
 [1] => stdClass Object
 (
 [date] => 周六
 [dayPictureUrl] => http://api.map.baidu.com/images/weather/day/duoyun.png
 [nightPictureUrl] => http://api.map.baidu.com/images/weather/night/duoyun.png
 [weather] => 多云
 [wind] => 东风微风
 [temperature] => 28 ~ 23℃
 )
  
 [2] => stdClass Object
 (
 [date] => 周日
 [dayPictureUrl] => http://api.map.baidu.com/images/weather/day/duoyun.png
 [nightPictureUrl] => http://api.map.baidu.com/images/weather/night/yin.png
 [weather] => 多云转阴
 [wind] => 东风微风
 [temperature] => 28 ~ 23℃
 )
  
 [3] => stdClass Object
 (
 [date] => 周一
 [dayPictureUrl] => http://api.map.baidu.com/images/weather/day/duoyun.png
 [nightPictureUrl] => http://api.map.baidu.com/images/weather/night/yin.png
 [weather] => 多云转阴
 [wind] => 东北风微风
 [temperature] => 29 ~ 25℃
 )
  
 )
  
 )
  
 )
  
 )

$arr = object_array($con);  //继续转成数组操作

$detail = $arr["results"][0]["weather_data"];
$city = $arr["results"][0]["currentCity"];

print_r($detail);

Array
 (
 [0] => Array
 (
 [date] => 周五 09月23日 (实时:26℃)
 [dayPictureUrl] => http://api.map.baidu.com/images/weather/day/duoyun.png
 [nightPictureUrl] => http://api.map.baidu.com/images/weather/night/duoyun.png
 [weather] => 多云
 [wind] => 东风微风
 [temperature] => 27 ~ 21℃
 )
  
 [1] => Array
 (
 [date] => 周六
 [dayPictureUrl] => http://api.map.baidu.com/images/weather/day/duoyun.png
 [nightPictureUrl] => http://api.map.baidu.com/images/weather/night/duoyun.png
 [weather] => 多云
 [wind] => 东风微风
 [temperature] => 28 ~ 23℃
 )
  
 [2] => Array
 (
 [date] => 周日
 [dayPictureUrl] => http://api.map.baidu.com/images/weather/day/duoyun.png
 [nightPictureUrl] => http://api.map.baidu.com/images/weather/night/yin.png
 [weather] => 多云转阴
 [wind] => 东风微风
 [temperature] => 28 ~ 23℃
 )
  
 [3] => Array
 (
 [date] => 周一
 [dayPictureUrl] => http://api.map.baidu.com/images/weather/day/duoyun.png
 [nightPictureUrl] => http://api.map.baidu.com/images/weather/night/yin.png
 [weather] => 多云转阴
 [wind] => 东北风微风
 [temperature] => 29 ~ 25℃
 )
  
 )

//获得天气数据,根据自己需求进行调整

?>

 

根据ip判断返回城市名称查询当地天气