最近的项目中遇到了一个实时天气显示的问题.通过高德地图的开放 API 解决了;
将思路留下.
已经将它封装成了一个函数. 可以直接拿去使用. 不过使用前最好还是测试一下;
思路:
首先通过调用高德地图IP定位的 API;
http://lbs.amap.com/api/webservice/guide/api/ipconfig
获取的 IP 定位信息中有 adcode;(好像是高德的一组城市地理信息编号吧)
然后通过调用高德的天气查询的 Api;
http://lbs.amap.com/api/webservice/guide/api/weatherinfo/
结合之前IP定位获得的adcode和你的密钥;
该类使用步骤
在高德官网申请一个web的秘钥. 然后实例化一个对象. 调用方法info. 方法的参数填上你申请的秘钥,返回值就是你目前ip所在地的天气;
class nansongWeather{
//获得天气信息
public function info($key)
{
//$key = '你在高德申请的秘钥';
$ipInfo = $this->ipInfo($key); //调用方法获得 Ip 定位信息;
$city = $ipInfo->adcode; //获得adcode;
$weatherInfo = $this->weatherInfo($key, $city); //已经获取了天气信息;
return $weatherInfo;
}
//定位信息
public function ipInfo($key)
{
$ch = curl_init("http://restapi.amap.com/v3/ip?key=".$key);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 请求的数据不直接发送到浏览器
$result = curl_exec($ch); //执行请求,直接发送到浏览器
// $city = json_decode($result)->adcode;
$info = json_decode($result);
return $info;
}
//天气信息
public function weatherInfo($key, $city)
{
$ch = curl_init("http://restapi.amap.com/v3/weather/weatherInfo?city=" . $city ."&key=" . $key);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
$info = json_decode($result)->lives[0];
return $info;
}
}
结果如图 注意:获得的是对象