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


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三层结构(上) 简单三层结构
Jul 04 PHP
PHP的异常处理类Exception的使用及说明
Jun 13 PHP
ThinkPHP关联模型操作实例分析
Sep 23 PHP
wamp下修改mysql访问密码的解决方法
May 07 PHP
php中switch语句用法详解
Aug 17 PHP
PHP中SSO Cookie登录分析和实现
Nov 06 PHP
WordPress主题中添加文章列表页页码导航的PHP代码实例
Dec 22 PHP
PHP的AES加密算法完整实例
Jul 20 PHP
PHP 无限级分类
May 04 PHP
Laravel使用支付宝进行支付的示例代码
Aug 16 PHP
ThinkPHP 3使用OSS的方法
Jul 19 PHP
php远程请求CURL案例(爬虫、保存登录状态)
Apr 01 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
JS/FLASH实现复制代码到剪贴板(兼容所有浏览器)
2013/05/27 Javascript
前端开发过程中浏览器版本的两种判定方法
2013/10/30 Javascript
浅析JavaScript中的常用算法与函数
2013/11/21 Javascript
javascript模拟枚举的简单实例
2014/03/06 Javascript
jquery中获得元素尺寸和坐标的方法整理
2014/05/18 Javascript
JavaScript Promise启示录
2014/08/12 Javascript
DOM基础教程之事件对象
2015/01/20 Javascript
实例讲解javascript注册事件处理函数
2016/01/09 Javascript
sencha ext js 6 快速入门(必看)
2016/06/01 Javascript
微信小程序中显示html格式内容的方法
2017/04/25 Javascript
详解angularjs获取元素以及angular.element()用法
2017/07/25 Javascript
详解vue-cli下ESlint 配置说明
2018/09/03 Javascript
微信小程序页面缩放式侧滑效果的实现代码
2018/11/15 Javascript
使用layui日期控件laydate对开始和结束时间进行联动控制的方法
2019/09/06 Javascript
通过vue写一个瀑布流插件代码实例
2019/09/07 Javascript
vue+element导航栏高亮显示的解决方式
2019/11/12 Javascript
jquery检测上传文件大小示例
2020/04/26 jQuery
基于react项目打包css引用路径错误解决方案
2020/10/28 Javascript
简述Python中的进程、线程、协程
2016/03/18 Python
用Python将一个列表分割成小列表的实例讲解
2018/07/02 Python
PyCharm专业最新版2019.1安装步骤(含激活码)
2019/10/09 Python
python实现IOU计算案例
2020/04/12 Python
pandas.DataFrame.drop_duplicates 用法介绍
2020/07/06 Python
Html5 webview元素定位工具的实现
2020/08/07 HTML / CSS
美国最流行的男士时尚网站:Touch of Modern
2018/02/05 全球购物
Farah官方网站:男士服装及配件
2019/11/01 全球购物
厨房工作人员岗位职责
2013/11/15 职场文书
教育学专业毕业生的自我评价
2013/11/21 职场文书
奥巴马演讲稿
2014/01/08 职场文书
幼儿园毕业家长感言
2014/02/10 职场文书
消防安全标语
2014/06/07 职场文书
创建绿色社区汇报材料
2014/08/22 职场文书
2014党委书记四风问题对照检查材料思想汇报
2014/09/22 职场文书
资金申请报告范文
2015/05/14 职场文书
幼儿园庆六一主持词
2015/06/30 职场文书
MyBatis核心源码深度剖析SQL语句执行过程
2022/05/20 Java/Android