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


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调用Java对象的方法
Oct 09 PHP
不用数据库的多用户文件自由上传投票系统(1)
Oct 09 PHP
PHP 编程请选择正确的文本编辑软件
Dec 21 PHP
在字符串指定位置插入一段字符串的php代码
Feb 16 PHP
php checkdate、getdate等日期时间函数操作详解
Mar 11 PHP
php设计模式 Bridge (桥接模式)
Jun 26 PHP
解析php中static,const与define的使用区别
Jun 18 PHP
php删除左端与右端空格的方法
Nov 29 PHP
thinkphp配置连接数据库技巧
Dec 02 PHP
PHP查询附近的人及其距离的实现方法
May 11 PHP
PHP简单实现冒泡排序的方法
Dec 26 PHP
php 函数使用可变数量的参数方法
May 02 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检测文件编码的方法示例
2014/04/25 PHP
php微信公众平台开发(四)回复功能开发
2016/12/06 PHP
php批量转换文件夹下所有文件编码的函数类
2017/08/06 PHP
PHP网页安全认证的实例详解
2017/09/28 PHP
php封装的page分页类完整实例代码
2020/02/01 PHP
javascript 一些用法小结
2009/09/11 Javascript
jQuery UI Datepicker length为空或不是对象错误的解决方法
2010/12/19 Javascript
JS子父窗口互相操作取值赋值的方法介绍
2013/05/11 Javascript
jQuery事件绑定和委托实例
2014/11/25 Javascript
js计算时间差代码【包括计算,天,时,分,秒】
2016/04/26 Javascript
iscroll碰到Select无法选择下拉刷新的解决办法
2016/05/21 Javascript
在Javascript操作JSON对象,增加 删除 修改的简单实现
2016/06/02 Javascript
Restify中接入Socket.io报Error:Can’t set headers的错误解决
2017/03/28 Javascript
基于Vue实例对象的数据选项
2017/08/09 Javascript
详解设置Webstorm 利用babel将ES6自动转码成ES5
2017/12/20 Javascript
一个Vue视频媒体多段裁剪组件的实现示例
2018/08/09 Javascript
angularJs提交文本框数据到后台的方法
2018/10/08 Javascript
通过jQuery学习js类型判断的技巧
2019/05/27 jQuery
vue-router两种模式区别及使用注意事项详解
2019/08/01 Javascript
laravel实现中文和英语互相切换的例子
2019/09/30 Javascript
p5.js码绘“跳动的小正方形”的实现代码
2019/10/22 Javascript
微信小程序事件流原理解析
2019/11/27 Javascript
vue路由结构可设一层方便动态添加路由操作
2020/08/31 Javascript
深入分析python中整型不会溢出问题
2018/06/18 Python
Django 实现图片上传和显示过程详解
2019/07/18 Python
python 使用while写猜年龄小游戏过程解析
2019/10/07 Python
Pytorch 计算误判率,计算准确率,计算召回率的例子
2020/01/18 Python
VSCode中autopep8无法运行问题解决方案(提示Error: Command failed,usage)
2021/03/02 Python
HTML5学习笔记之History API
2015/02/26 HTML / CSS
法国一家芭蕾舞鞋公司:Repetto
2018/11/12 全球购物
具结保证书范本
2015/05/11 职场文书
无工作证明怎么写
2015/06/15 职场文书
讲座新闻稿
2015/07/18 职场文书
导游词之桂林山水
2019/09/20 职场文书
详解Vue的options
2021/05/15 Vue.js
Python可视化动图组件ipyvizzu绘制惊艳的可视化动图
2022/04/21 Python