思路
首先要对用户发送过来的消息进行判断,判断消息里是否含有“天气”关键字,如果含有,则需要继续提取地区信息,然后再通过中国天气网(http://www.weather.com.cn)
提供的开放API进行查询。
实时天气信息API:http://www.weather.com.cn/data/sk/101110101.html
关键字判断与地区读取
用户发送过来查询天气的消息格式是固定好的,即 “地区+天气”,所以首先截取后两个字,判断是否为 “天气” 关键字。
我们使用php的 mb_substr()函数截取:
$str=mb_substr($keyword,-2,2,"UTF-8");
从消息的结尾第二个字符开始截取,截取两个字符,然后加以判断是否为 “天气” 关键字。
下面进行地区提取,还是使用 mb_substr() 函数。
$str_key=mb_substr($keyword,0,-2,"UTF-8");
从消息的开头开始,截掉末尾的两个字符(天气),得地区关键字。
if($str=='天气'&&!empty($str_key)){//调用函数查询天气}
调用函数查询天气
接口地址:
http://www.weather.com.cn/data/sk/101110101.html
其中URL中的数字指代城市的编号101190401(苏州)。 返回信息格式如下:
{"weatherinfo":{"city":"西安","cityid":"101110101","temp":"24","WD":"东南风","WS":"2级","SD":"62%","WSE":"2","time":"21:00","isRadar":"1","Radar":"JC_RADAR_AZ9290_JB"}}
其中:
- cityid为城市编码,
- temp为当前温度
- WD //风向
- WS //风力
- SD//相对湿度
- WSE //风力
- isRadar "1"//是否有雷达图
- Radar "JC_RADAR_AZ9010_JB"//雷达图地址 http://www.weather.com.cn/html/radar/JC_RADAR_AZ9010_JB.shtml 现在地址更新成: http://products.weather.com.cn/product/radar/index/procode/JC_RADAR_AZ9736_JB 了
我们通过解析JSON,获取相应城市的天气数据。
weather() 函数如下:
这里include 了一个城市对应关系文件 weather_cityId.php,格式如下:
<?php$weather_cityId=array("北京"=>"101010100","上海"=>"101020100","苏州"=>"101190401");?>
根据传入的城市名,得到城市代码
效果:
欢迎关注我的公众号: