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


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 strstr 函数判断字符串是否否存在的实例代码
Sep 28 PHP
php实现12306余票查询、价格查询示例
Apr 17 PHP
PHP反射使用实例和PHP反射API的中文说明
Jul 02 PHP
php显示时间常用方法小结
Jun 05 PHP
php正则表达式验证(邮件地址、Url地址、电话号码、邮政编码)
Mar 14 PHP
Yii2框架RESTful API 格式化响应,授权认证和速率限制三部分详解
Nov 10 PHP
PHP全功能无变形图片裁剪操作类与用法示例
Jan 10 PHP
学习thinkphp5.0验证类使用方法
Nov 16 PHP
thinkphp5 加载静态资源路径与常量的方法
Dec 24 PHP
深入理解 PHP7 中全新的 zval 容器和引用计数机制
Oct 15 PHP
详解PHP队列的实现
Mar 14 PHP
php服务器的系统详解
Oct 12 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
PHP中simplexml_load_string函数使用说明
2011/01/01 PHP
PHP Directory 函数的详解
2013/03/07 PHP
教你如何使用php session
2013/10/28 PHP
php上传图片类及用法示例
2016/05/11 PHP
Laravel实现autoload方法详解
2017/05/07 PHP
js资料prototype 属性
2007/03/13 Javascript
javascript 面向对象全新理练之继承与多态
2009/12/03 Javascript
文档对象模型DOM通俗讲解
2013/11/01 Javascript
js控制input输入字符解析
2013/12/27 Javascript
5款JavaScript代码压缩工具推荐
2014/07/07 Javascript
Javascript核心读书有感之表达式和运算符
2015/02/11 Javascript
ECMAScript 5严格模式(Strict Mode)介绍
2015/03/02 Javascript
JS实现网页表格自动变大缩小的方法
2015/03/09 Javascript
一看就懂:jsonp详解
2015/06/01 Javascript
javascript实现简单查找与替换的方法
2015/07/22 Javascript
input 禁止输入特殊字符的四种实现方式
2016/08/24 Javascript
Bootstrap Modal遮罩弹出层代码分享
2016/11/21 Javascript
使用BootStrap实现悬浮窗口的效果
2016/12/13 Javascript
angular动态表单制作
2018/02/23 Javascript
详解如何在微信小程序开发中正确的使用vant ui组件
2018/09/13 Javascript
vue 项目@change多个参数传值多个事件的操作
2021/01/29 Vue.js
js实现简单商品筛选功能
2021/02/02 Javascript
[32:36]完美世界DOTA2联赛PWL S3 LBZS vs CPG 第二场 12.12
2020/12/16 DOTA
python操作MySQL数据库具体方法
2013/10/28 Python
利用Python的装饰器解决Bottle框架中用户验证问题
2015/04/24 Python
Python字符串处理之count()方法的使用
2015/05/18 Python
分享Python开发中要注意的十个小贴士
2016/08/30 Python
只需7行Python代码玩转微信自动聊天
2019/01/27 Python
Python获取对象属性的几种方式小结
2020/03/12 Python
python生成word合同的实例方法
2021/01/12 Python
html5移动端自适应布局的实现
2020/04/15 HTML / CSS
致跳高运动员加油稿
2014/02/12 职场文书
数控技术学生的自我评价
2014/02/15 职场文书
2015年元宵节活动总结
2015/02/06 职场文书
退休欢送会主持词
2015/07/01 职场文书
python flask开发的简单基金查询工具
2021/06/02 Python