微信公众平台开发(五) 天气预报功能开发
微信(小程序)  /  管理员 发布于 5年前   403
一、简介 前面几篇文章对微信公众平台的开通及简单使用做了简单的介绍,但都没有涉及到实际使用中的问题,例如天气查询,公交查询,快递查询等。接下来的几篇文章将对实际生活中会经常使用到的一些功能进行开发讲解,以供读者参考。 这一篇文章将对大家每天都会关心的天气查询进行开发,例如,用户发送消息 “苏州天气”,则会返回苏州实时天气状况,以及未来两天甚至未来五天的天气状况。 二、思路分析 首先要对用户发送过来的消息进行判断,判断消息里是否含有“天气”关键字,如果含有,则需要继续提取地区信息,然后再通过中国天气网(http://www.weather.com.cn)提供的开放API进行相关地区天气查询。 三、关键字判断与地区读取 用户发送过来查询天气的消息的格式是固定好的,即 “地区+天气”,所以首先截取后两个字,判断是否为 “天气” 关键字。 使用php函数 mb_substr() 截取,关于该函数的用法: mb_substr ― 获取字符串的部分 说明:根据字符数执行一个多字节安全的 substr() 操作。 位置是从 str 的开始位置进行计数。 第一个字符的位置是 0。第二个字符的位置是 1,以此类推。 参数: str 从该 string 中提取子字符串。 start str 中要使用的第一个字符的位置。 正数 -> 从字符串开头指定位置开始; 负数 -> 从字符串结尾指定位置开始; length str 中要使用的最大字符数。 正数 -> 从 start 处开始最多包括 length 个字符; 负数 -> string 末尾处的 length 个字符将会被漏掉(若 start 是负数则从字符串开头算起)。 encoding encoding 参数为字符编码。如果省略,则使用内部字符编码。 返回值: mb_substr() 函数根据 start 和 length 参数返回 str 中指定的部分。 从消息的结尾数第二个字符开始截取,截取两个字符,然后加以判断是否为 “天气” 关键字。 下面进行地区提取,还是使用 mb_substr() 函数。 $str_key = mb_substr($keyword,0,-2,"UTF-8"); 从消息的开头开始,截掉末尾的两个字符(天气),既得地区关键字。 然后进行判断,继而调用函数查询天气数据。 四、调用 weather() 函数查询 我们这里调用的是中国国家气象局提供的天气预报API接口,接口地址:http://m.weather.com.cn/data/101190401.html URL中的数字指代城市的编号101190401(苏州),其他城市对应关系将在下面提供。 该接口返回信息比较全面,也是以json格式提供,格式如下: 我们可以通过解析JSON,获取相应城市的天气数据。 weather() 函数如下: 这里include 了一个城市对应关系文件 weather_cityId.php,格式如下: 根据传入的城市名,得到城市代码,如果不为空,则调用中国天气网的API进行查询,返回json格式的数据,然后进行解析并返回数据,如果为空,则返回null值。 五、组织回复消息形式 判断返回数据是否为空,若为空,则 $contentStr = "抱歉,没有查到\"".$str_key."\"的天气信息!"; 若返回数据不为空,则: $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 //表示换行 六、测试 七、完整代码 关于城市对应关系文件 weather_cityId.php,目前更新到了2564个城市,以后还会继续增加,请到官方网盘http://pan.baidu.com/s/1gfcBX6N下载吧。 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。 string mb_substr ( string $str , int $start [, int $length [, string $encoding ]] )
$str = mb_substr($keyword,-2,2,"UTF-8");
if($str == '天气' && !empty($str_key)){ //调用函数查询天气数据}
{"weatherinfo":{//基本信息;"city":"苏州","city_en":"suzhou","date_y":"2013年7月9日","date":"","week":"星期二","fchh":"18","cityid":"101190401",//摄氏温度"temp1":"30℃~37℃","temp2":"30℃~37℃","temp3":"29℃~35℃","temp4":"27℃~33℃","temp5":"27℃~31℃","temp6":"27℃~35℃",//华氏温度;"tempF1":"86H~98.6H","tempF2":"86H~98.6H","tempF3":"84.2H~95H","tempF4":"80.6H~91.4H","tempF5":"80.6H~87.8H","tempF6":"80.6H~95H",//天气描述;"weather1":"晴转多云","weather2":"晴转多云","weather3":"晴转多云","weather4":"多云","weather5":"雷阵雨转中雨","weather6":"雷阵雨转多云",//天气描述图片序号"img1":"0","img2":"1","img3":"0","img4":"1","img5":"0","img6":"1","img7":"1","img8":"99","img9":"4","img10":"8","img11":"4","img12":"1",//图片名称;"img_single":"1","img_title1":"晴","img_title2":"多云","img_title3":"晴","img_title4":"多云","img_title5":"晴","img_title6":"多云","img_title7":"多云","img_title8":"多云","img_title9":"雷阵雨","img_title10":"中雨","img_title11":"雷阵雨","img_title12":"多云","img_title_single":"多云",//风速描述"wind1":"西南风3-4级","wind2":"西南风3-4级","wind3":"东南风3-4级","wind4":"东南风3-4级转4-5级","wind5":"东南风4-5级转西南风3-4级","wind6":"西南风3-4级转4-5级",//风速级别描述"fx1":"西南风","fx2":"西南风","fl1":"3-4级","fl2":"3-4级","fl3":"3-4级","fl4":"3-4级转4-5级","fl5":"4-5级转3-4级","fl6":"3-4级转4-5级",//今日穿衣指数;"index":"炎热","index_d":"天气炎热,建议着短衫、短裙、短裤、薄型T恤衫等清凉夏季服装。",//48小时穿衣指数"index48":"炎热","index48_d":"天气炎热,建议着短衫、短裙、短裤、薄型T恤衫等清凉夏季服装。",//紫外线及48小时紫外线"index_uv":"中等","index48_uv":"中等",//洗车指数"index_xc":"适宜",//旅游指数"index_tr":"较不宜",//舒适指数"index_co":"很不舒适","st1":"36","st2":"28","st3":"36","st4":"28","st5":"34","st6":"27",//晨练指数"index_cl":"较适宜",//晾晒指数"index_ls":"适宜",//过敏指数"index_ag":"不易发"}}
private function weather($n){ include("weather_cityId.php"); $c_name=$weather_cityId[$n]; if(!empty($c_name)){ $json=file_get_contents("http://m.weather.com.cn/data/".$c_name.".html"); return json_decode($json); } else { return null; }}
"101010100","上海"=>"101020100","苏州"=>"101190401");?>
$contentStr = "【".$data->weatherinfo->city."天气预报】\n".$data->weatherinfo->date_y." ".$data->weatherinfo->fchh."时发布"."\n\n实时天气\n".$data->weatherinfo->weather1." ".$data->weatherinfo->temp1." ".$data->weatherinfo->wind1."\n\n温馨提示:".$data->weatherinfo->index_d."\n\n明天\n".$data->weatherinfo->weather2." ".$data->weatherinfo->temp2." ".$data->weatherinfo->wind2."\n\n后天\n".$data->weatherinfo->weather3." ".$data->weatherinfo->temp3." ".$data->weatherinfo->wind3;
说明:responseMsg();//$wechatObj->valid();class wechatCallbackapiTest{ /*public function valid() { $echoStr = $_GET["echostr"]; //valid signature , option if($this->checkSignature()){ echo $echoStr; exit; } }*/ public function responseMsg() { //get post data, May be due to the different environments $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; //extract post data if (!empty($postStr)){ $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); $RX_TYPE = trim($postObj->MsgType); switch($RX_TYPE) { case "text": $resultStr = $this->handleText($postObj); break; case "event": $resultStr = $this->handleEvent($postObj); break; default: $resultStr = "Unknow msg type: ".$RX_TYPE; break; } echo $resultStr; }else { echo ""; exit; } } public function handleText($postObj) { $fromUsername = $postObj->FromUserName; $toUsername = $postObj->ToUserName; $keyword = trim($postObj->Content); $time = time(); $textTpl = "
您可能感兴趣的文章:
123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..路人 在
php中使用hyperf框架调用讯飞星火大模型实现国内版chatgpt功能示例中评论 教程很详细,如果加个前端chatgpt对话页面就完美了..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号