微信公众平台开发(五) 天气预报功能开发
一、简介前面几篇文章对微信公众平台的开通及简单使用做了简单的介绍,但都没有涉及到实际使用中的问题,例如天气查询,公交查询,快递查询等。接下来的几篇文章将对实际生活中会经常使用到的一些功能进行开发讲解,以供读者参考。 这一篇文章将对大家每天都会关心的天气查询进行开发,例如,用户发送消息 “苏州天气”,则会返回苏州实时天气状况,以及未来两天甚至未来五天的天气状况。 二、思路分析首先要对用户发送过来的消息进行判断,判断消息里是否含有“天气”关键字,如果含有,则需要继续提取地区信息,然后再通过中国天气网()提供的开放API进行相关地区天气查询。 三、关键字判断与地区读取用户发送过来查询天气的消息的格式是固定好的,即 “地区+天气”,所以首先截取后两个字,判断是否为 “天气” 关键字。 使用php函数 mb_substr() 截取,关于该函数的用法: mb_substr — 获取字符串的部分 说明:根据字符数执行一个多字节安全的 substr() 操作。 位置是从 str 的开始位置进行计数。 第一个字符的位置是 0。第二个字符的位置是 1,以此类推。 参数:str从该 string 中提取子字符串。 startstr 中要使用的第一个字符的位置。 正数 -> 从字符串开头指定位置开始; 负数 -> 从字符串结尾指定位置开始; lengthstr 中要使用的最大字符数。 正数 -> 从 start 处开始最多包括 length 个字符; 负数 -> string 末尾处的 length 个字符将会被漏掉(若 start 是负数则从字符串开头算起)。 encodingencoding 参数为字符编码。如果省略,则使用内部字符编码。 返回值:mb_substr() 函数根据 start 和 length 参数返回 str 中指定的部分。 从消息的结尾数第二个字符开始截取,截取两个字符,然后加以判断是否为 “天气” 关键字。 下面进行地区提取,还是使用 mb_substr() 函数。 $str_key = mb_substr($keyword,"UTF-8"); 从消息的开头开始,截掉末尾的两个字符(天气),既得地区关键字。 然后进行判断,继而调用函数查询天气数据。 四、调用 weather() 函数查询我们这里调用的是中国国家气象局提供的天气预报API接口,接口地址: URL中的数字指代城市的编号101190401(苏州),其他城市对应关系将在下面提供。 该接口返回信息比较全面,也是以json格式提供,格式如下: 我们可以通过解析JSON,获取相应城市的天气数据。 weather() 函数如下: 这里include 了一个城市对应关系文件 weather_cityId.php,格式如下: "101010100","上海"=>"101020100","苏州"=>"101190401");
?>
根据传入的城市名,得到城市代码,如果不为空,则调用中国天气网的API进行查询,返回json格式的数据,然后进行解析并返回数据,如果为空,则返回null值。 五、组织回复消息形式判断返回数据是否为空,若为空,则 $contentStr = "抱歉,没有查到"".$str_key.""的天气信息!"; 若返回数据不为空,则: weatherinfo->city."天气预报】n".$data->weatherinfo->date_y." ".$data->weatherinfo->fchh."时发布"."nn实时天气n".$data->weatherinfo->weather1." ".$data->weatherinfo->temp1." ".$data->weatherinfo->wind1."nn温馨提示:".$data->weatherinfo->index_d."nn明天n".$data->weatherinfo->weather2." ".$data->weatherinfo->temp2." ".$data->weatherinfo->wind2."nn后天n".$data->weatherinfo->weather3." ".$data->weatherinfo->temp3." ".$data->weatherinfo->wind3;
说明:$data->weatherinfo->city //获取城市名,这里为苏州 $data->weatherinfo->date_y //获取日期,这里为2013年7月9日 $data->weatherinfo->fchh //数据发布时间 $data->weatherinfo->weather1 //实时天气 $data->weatherinfo->temp1 //实时温度 $data->weatherinfo->wind1 //实时风向和风速 $data->weatherinfo->index_d //穿衣指数 weather2,temp2,wind2 分别代表了明天的天气,温度和风向风速,其他的以此类推。 n //表示换行 六、测试 七、完整代码 //define your token
define("TOKEN","zhuojin"); $wechatObj = new wechatCallbackapiTest(); $wechatObj->responseMsg(); //$wechatObj->valid(); class wechatCallbackapiTest //valid signature,option public function responseMsg() //extract post data
}else { public function handleText($postObj) //天气 public function handleEvent($object) public function responseText($object,$content,$flag=0) private function weather($n){ private function checkSignature() $token = TOKEN; if( $tmpStr == $signature ){ ?> 关于城市对应关系文件 weather_cityId.php,目前更新到了2564个城市,以后还会继续增加,请到官方网盘下载吧。 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |