根据ip判断返回城市名称查询当地天气
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了根据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判断返回城市名称查询当地天气的主要内容,如果未能解决你的问题,请参考以下文章
python中通过客户端IP拿到所在城市和当地天气信息—附带项目案例