微信公众平台天气预报功能开发


Posted in PHP onJuly 06, 2014

本来是想自己直接从中国天气网获取信息并处理,后来发现处理起来太麻烦,而且要获取所有城市的城市编码,再有就是!不支持国外天气!!(我们学校有很多毕业生在国外上学,所以我考虑还是做出支持国外天气的版本)

因此考虑直接调用别人的API,一开始选用了方倍工作室已经做好的接口(无奈也没有国外)。直到有一天返回北京天气温度是零下的时候(当时天热到不敢出门)。。。换!换!换!

后来终于发现最靠谱的接口----百度的天气API。

废话少说,首先大家要上 百度地图API申请一个专用key(大概一分钟就搞定了,很方便)
代码如下:

//图文信息2 for 天气【这是微信的图文信息模板】
  $tqTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<ArticleCount>5</ArticleCount>
<Articles>
<item>
<Title><![CDATA[%s]]></Title>
<Description><![CDATA[%s]]></Description>
<PicUrl><![CDATA[%s]]></PicUrl>
<Url><![CDATA[%s]]></Url>
</item>
<item>
<Title><![CDATA[%s]]></Title>
<Description><![CDATA[%s]]></Description>
<PicUrl><![CDATA[%s]]></PicUrl>
<Url><![CDATA[%s]]></Url>
</item>
<item>
<Title><![CDATA[%s]]></Title>
<Description><![CDATA[%s]]></Description>
<PicUrl><![CDATA[%s]]></PicUrl>
<Url><![CDATA[%s]]></Url>
</item>
<item>
<Title><![CDATA[%s]]></Title>
<Description><![CDATA[%s]]></Description>
<PicUrl><![CDATA[%s]]></PicUrl>
<Url><![CDATA[%s]]></Url>
</item>
<item>
<Title><![CDATA[%s]]></Title>
<Description><![CDATA[%s]]></Description>
<PicUrl><![CDATA[%s]]></PicUrl>
<Url><![CDATA[%s]]></Url>
</item>
<item>
<Title><![CDATA[%s]]></Title>
<Description><![CDATA[%s]]></Description>
<PicUrl><![CDATA[%s]]></PicUrl>
<Url><![CDATA[%s]]></Url>
</item>
</Articles>
</xml> ";//最后发现最多只能看到五个item= =无语。。。

PHP代码

if(substr_count($keyword,'天气')!=0 && $keyword!='天气')
  { 
   $geshu = substr_count($keyword,'天气');
   $t = explode("天气",$keyword);
   
   for($i=0;$i<=$geshu;$i++)
   {
    if($t[$i]!='')
    {
    $city = $t[$i];
    break;
    }
    
   }
   $mykey = "【这里换成你的API key】";
   $url = "http://api.map.baidu.com/telematics/v3/weather?location=".$city."&output=json&ak=".$mykey;
   $output = file_get_contents($url);
   $contentStr = json_decode($output, true);
   
   if($contentStr['status']=='success')
   {
    
    $T[0]['Title']=$contentStr['date']." ".$contentStr['results'][0]['currentCity']."天气";
//$T[0]['PicUrl']="http://zhengwairen-try2.stor.sinaapp.com/xytq.jpg";
//$T[0]['Url']="http://zhengwairen-try2.stor.sinaapp.com/xytq.jpg";
    //上面两行可以设成你想要的顶部图片
    if(is_array($contentStr['results'][0]['index']))
    {
    $T[2]['Title']="【pm2.5】".$contentStr['results'][0]['pm25']."\n"."【".$contentStr['results'][0]['index'][0]['title']."】"."(".$contentStr['results'][0]['index'][0]['zs'].") ".$contentStr['results'][0]['index'][0]['des'];
    //下一行是洗车指数,感觉不对主题还是不要的好。。
    //$T[2]['Title']=$T[2]['Title']."\n"."【".$contentStr['results'][0]['index'][1]['title']."】(".$contentStr['results'][0]['index'][1]['zs'].") ".$contentStr['results'][0]['index'][1]['des'];
    $T[2]['Title']=$T[2]['Title']."\n"."【".$contentStr['results'][0]['index'][2]['title']."】(".$contentStr['results'][0]['index'][2]['zs'].") ".$contentStr['results'][0]['index'][2]['des'];
    }
    else
    $guowai=1;
    for($i=1,$aaa=0;$i<=5;$i++)
    {
    if($i==2 && $guowai!=1)
     continue;
    if($guowai==1 && $i==5)
     continue;
    $T[$i]['Title']=$contentStr['results'][0]['weather_data'][$aaa]['date']." ".$contentStr['results'][0]['weather_data'][$aaa]['temperature']." ".$contentStr['results'][0]['weather_data'][$aaa]['weather']." ".$contentStr['results'][0]['weather_data'][$aaa]['wind'];
    $T[$i]['PicUrl']=$contentStr['results'][0]['weather_data'][$aaa]['dayPictureUrl'];
    $T[$i]['Url']=$contentStr['results'][0]['weather_data'][$aaa]['dayPictureUrl'];
    $aaa++;
    }
    
    $tianqi = sprintf($tqTpl,$fromUsername,$toUsername,time(),"news",$T[0]['Title'],$T[0]['Description'],$T[0]['PicUrl'],$T[0]['Url'], $T[1]['Title'],$T[1]['Description'],$T[1]['PicUrl'],$T[1]['Url'], $T[2]['Title'],$T[2]['Description'],$T[2]['PicUrl'],$T[2]['Url'], $T[3]['Title'],$T[3]['Description'],$T[3]['PicUrl'],$T[3]['Url'], $T[4]['Title'],$T[4]['Description'],$T[4]['PicUrl'],$T[4]['Url'],$T[5]['Title'],$T[5]['Description'],$T[5]['PicUrl'],$T[5]['Url']);
    echo $tianqi;
   }
 
  }

效果图如下:

微信公众平台天气预报功能开发

将其中的$mykey变量改成自己的APIkey就行了。另外有一点让我不解的是,我微信用的图文模板明明是6个item,为什么回复实际效果只有5个呢= = 求广大网友帮忙解释

最后附代码说明。用户发送“北京天气”和“天气北京”都是可以的,所以首先做了字符串处理,得到正确的城市名。利用百度地图API给的网址,发出GET请求(其实就是直接访问),获取一个json类型的数据包。将数据包信息转成数组格式,对应的回复微信用户即可。国外的天气没有当天天气的具体说明,所以最后做了一点小修改。

PHP 相关文章推荐
PHP中的加密功能
Oct 09 PHP
php&amp;java(三)
Oct 09 PHP
php adodb连接带密码access数据库实例,测试成功
May 14 PHP
php下防止单引号,双引号在接受页面转义的设置方法
Sep 25 PHP
黑夜路人出的几道php笔试题
Aug 04 PHP
php全局变量和类配合使用深刻理解
Jun 05 PHP
php几个预定义变量$_SERVER用法小结
Nov 07 PHP
php页面,mysql数据库转utf-8乱码,utf-8编码问题总结
Aug 27 PHP
学习php设计模式 php实现适配器模式
Dec 07 PHP
浅谈PHP检查数组中是否存在某个值 in_array 函数
Jun 13 PHP
基于php中echo用逗号和用点号的区别详解
Jan 23 PHP
PHP crypt()函数的用法讲解
Feb 15 PHP
最常用的8款PHP调试工具
Jul 06 #PHP
一个不易被发现的PHP后门代码解析
Jul 05 #PHP
linux下使用crontab实现定时PHP计划任务失败的原因分析
Jul 05 #PHP
php操作redis中的hash和zset类型数据的方法和代码例子
Jul 05 #PHP
采用memcache在web集群中实现session的同步会话
Jul 05 #PHP
30个php操作redis常用方法代码例子
Jul 05 #PHP
PHP在网页中动态生成PDF文件详细教程
Jul 05 #PHP
You might like
《魔兽争霸3》重制版究竟重制了什么?玩家:这么糊弄真的好吗?
2020/05/04 魔兽争霸
PHP面向对象三大特点学习(充分理解抽象、封装、继承、多态)
2012/05/07 PHP
php excel reader读取excel内容存入数据库实现代码
2012/12/06 PHP
使用php+apc实现上传进度条且在IE7下不显示的问题解决方法
2013/04/25 PHP
PHP JS Ip地址及域名格式检测代码
2013/09/27 PHP
PHP实现对数组分页处理实例详解
2017/02/07 PHP
对于Laravel 5.5核心架构的深入理解
2018/02/22 PHP
PHP封装的验证码工具类定义与用法示例
2018/08/22 PHP
JavaScript版TAB选项卡效果实例
2013/08/16 Javascript
javascript实现网页子页面遍历回调的方法(涉及 window.frames、递归函数、函数上下文)
2015/07/27 Javascript
jQuery与Ajax以及序列化
2016/02/01 Javascript
node.js实现端口转发
2016/04/14 Javascript
JSON 数据详解及实例代码分析
2017/01/20 Javascript
jQuery实现鼠标响应式淘宝动画效果示例
2018/02/13 jQuery
对angularJs中controller控制器scope父子集作用域的实例讲解
2018/10/08 Javascript
angular4中引入echarts的方法示例
2019/01/29 Javascript
过滤器vue.filters的使用方法实现
2019/09/18 Javascript
IDEA安装vue插件图文详解
2019/09/26 Javascript
在vue中根据光标的显示与消失实现下拉列表
2019/09/29 Javascript
js实现登录时记住密码的方法分析
2020/04/05 Javascript
JavaScript直接调用函数与call调用的区别实例分析
2020/05/22 Javascript
Python搭建APNS苹果推送通知推送服务的相关模块使用指南
2016/06/02 Python
PyTorch的深度学习入门教程之构建神经网络
2019/06/27 Python
Python实现的统计文章单词次数功能示例
2019/07/08 Python
python机器学习实现决策树
2019/11/11 Python
python文字转语音实现过程解析
2019/11/12 Python
移动端解决悬浮层(悬浮header、footer)会遮挡住内容的3种方法
2015/03/27 HTML / CSS
美国领先的家庭健康检测试剂盒提供商:LetsGetChecked
2019/03/18 全球购物
优秀信贷员先进事迹
2014/01/31 职场文书
党支部综合考察材料
2014/05/19 职场文书
项目申报专员岗位职责
2014/07/09 职场文书
庆六一活动总结
2014/08/29 职场文书
2014年接待工作总结
2014/11/26 职场文书
嘉宾邀请函
2015/01/31 职场文书
车间主任岗位职责范本
2015/04/08 职场文书
学习计划是什么
2019/04/30 职场文书